"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لغة بايثون المتينة: إنشاء مسارات عمل طويلة الأمد مقاومة للرصاص، أصبحت بسيطة

لغة بايثون المتينة: إنشاء مسارات عمل طويلة الأمد مقاومة للرصاص، أصبحت بسيطة

تم النشر بتاريخ 2024-11-05
تصفح:323

Durable Python: Building Bullet-Proof Long-Running Workflows, Made Simple

في تطوير البرمجيات الحديثة، يعد إنشاء مسارات عمل قوية تربط واجهات برمجة التطبيقات من الخدمات المختلفة وتتعامل مع الأحداث المتزامنة وغير المتزامنة تحديًا شائعًا. يتضمن النهج التقليدي استخدام مزيج من قوائم الانتظار والخدمات الصغيرة وأنظمة إدارة الحالة لإنشاء تطبيقات قابلة للتطوير. على الرغم من فعاليتها، إلا أن هذه البنية تأتي مع نفقات عامة كبيرة: إعداد وصيانة البنية التحتية مثل قوائم انتظار الرسائل، وتشغيل الخوادم أو وظائف لامدا، وإدارة الحالة في قواعد البيانات، وتنفيذ آليات معقدة لمعالجة الأخطاء.

ماذا لو كانت هناك طريقة أبسط وأكثر موثوقية للتعامل مع سير العمل طويل الأمد دون متاعب إدارة كل هذه البنية التحتية؟ هذا هو الهدف من لغة بايثون المتينة، لتجربتها، قم بالتسجيل في النسخة التجريبية.

مشكلة الحلول الساذجة للعمليات طويلة الأمد

تخيل أنك تريد مراقبة طلبات السحب (PRs) في GitHub. في كل مرة يتم فيها فتح PR جديد، ترغب في إنشاء قناة Slack مخصصة للمناقشة وإرسال تذكيرات يومية حتى يتم إغلاق PR أو دمجه. يبدو هذا واضحًا، لذا قد تعتقد أنه يمكنك حل المشكلة باستخدام وظيفة Python الأساسية (إليك وظيفة Python الأساسية التي تم إنشاؤها بواسطة ChatGPT):

@app.route('/webhook', methods=['POST'])
def github_webhook():
    data = request.json
    if 'pull_request' in data and data['action'] == 'opened':
        pr_number = data['pull_request']['number']
        pr_url = data['pull_request']['html_url']
        # Create a new Slack channel for the PR
        channel_id = create_slack_channel(pr_number)
        send_slack_notification(channel_id, pr_number, pr_url)
        # Periodically check the PR status and send reminders until it's closed or merged
        while True:
            time.sleep(3600)  # Wait for 1 hour before checking the status again
            pr_status = check_pr_status(pr_number)
            if pr_status == 'open':
                send_slack_notification(channel_id, pr_number, pr_url)
            else:
                break
    return jsonify({'status': 'ok'})

يبدو أن مقتطف التعليمات البرمجية هذا يتعامل مع المهمة، ولكنه مناسب فقط لسيناريو "التدفق السعيد". في تطبيقات العالم الحقيقي، هذا النهج الساذج لا يكفي. تعتمد حلقة while على وقت تشغيل الخادم المستمر، وهو أمر غير مضمون. يمكن أن تتعطل العمليات، ويمكن إعادة تشغيل الخوادم، وفجأة، ينقطع سير عملك.

حل العالم الحقيقي: التطبيقات المستندة إلى الأحداث

يتضمن النهج الأكثر موثوقية إنشاء تطبيق يعتمد على الأحداث. هنا، يمكنك استخدام قوائم الانتظار للاستماع إلى أحداث GitHub، ووظائف cron لإرسال التذكيرات، وقواعد البيانات لتخزين حالة العلاقات العامة والقناة، والوظائف للتعامل مع هذه الأحداث. عادةً، يتم تشغيل هذا الإعداد على البنية التحتية السحابية، مع الاستفادة من خدمات مثل AWS Lambda للنشر والتنفيذ.

على الرغم من أن هذه الطريقة مجدية وقوية، إلا أنها تتطلب أيضًا قدرًا كبيرًا من الإعداد والصيانة والخبرة. تتطلب إدارة البنية التحتية، وضمان وقت التشغيل، والتعامل مع حالات الخطأ موارد كبيرة وفريقًا ماهرًا.

أدخل لغة Python المتينة: البساطة تلتقي بالموثوقية

ماذا لو كان بإمكانك الجمع بين بساطة كود Python الساذج وموثوقية التصميم غير المتزامن؟ ماذا لو تمكنت بايثون من ضمان أنه حتى في حالة تعطل العملية أو إعادة تشغيل الخادم، فإنها ستستأنف من حيث توقفت؟

يعالج AutoKitteh هذا التحدي بدقة باستخدام لغة Python المتينة. باستخدام لغة Python المتينة، يكتب المستخدم كود لغة Python بينما يضمن النظام أنه في حالة إعادة تشغيل العملية، فإنها تستمر في العمل من نفس النقطة. على الرغم من وجود قيود (على سبيل المثال، قد لا يكون التوقف الطويل مثاليًا)، إلا أن هذا الحل يعمل بشكل مثالي بالنسبة لمعظم حالات الاستخدام.

ما يقدمه برنامج التحمل بايثون

يوفر لك برنامج Durable-Python إدارة الحالة يدويًا، مما يسمح لك بكتابة سير العمل الخاص بك كتدفق مستمر بدلاً من آلة حالة تعتمد على الأحداث، الأمر الذي قد يكون من الصعب إنشاؤه وتصحيح الأخطاء. تتمتع AutoKitteh، باعتبارها بنية أساسية، بقوائم انتظار مدمجة وعمليات تكامل مع التطبيقات الخارجية وواجهات برمجة التطبيقات، مما يجعل من السهل تطوير مسارات عمل قوية بسرعة في Python.

كيف يعمل

لا يوجد سحر - مجرد هندسة قوية. يتم تشغيل AutoKitteh بواسطة Temporal، وهو إطار عمل لبناء مسارات عمل متينة. يتطلب الزماني طريقة محددة للترميز، بما في ذلك فهم الحتمية والعجز والمفاهيم الأخرى لضمان الموثوقية. يلخص AutoKitteh هذه التعقيدات، مما يسمح للمطورين بكتابة كود Python القياسي. تحت الغطاء، يتم تحويل أي وظيفة ذات آثار جانبية إلى نشاط مؤقت. كمطور، لا داعي للقلق بشأن هذه التفاصيل، فقط ركز على كتابة منطق العمل.

لمزيد من التفاصيل الفنية، راجع وثائق AutoKitteh.

هل هناك تكلفة؟

وبطبيعة الحال، كل تجريد له ثمن. تحت الغطاء، تسجل لغة Python المتينة تدفق سير العمل لتمكين التعافي بعد الفشل، مما يؤدي إلى بعض تكاليف التخزين والأداء.

تم تصميم Python المتين لتنسيق واجهات برمجة التطبيقات بدلاً من إنشاء تطبيقات البيانات. إذا كنت بحاجة إلى تطبيقات عالية الأداء، فيجب عليك التفكير في إنشاء حل مخصص. ومع ذلك، إذا كنت ترغب في تطوير سير عمل موثوق به بسرعة مع الحد الأدنى من التطوير والاستثمار في البنية التحتية، فقد تكون لغة Python المتينة خيارًا جيدًا.

تطبيقات العالم الحقيقي

يمكن تطبيق لغة Python المتينة على مجموعة واسعة من مسارات العمل، خاصة في المجالات التي تكون فيها الموثوقية أمرًا بالغ الأهمية، مثل:

  • تنسيق واجهة برمجة التطبيقات (API) - إنشاء مسارات عمل داخلية موثوقة.
  • أتمتة DevOps: أتمتة مسارات النشر أو أتمتة مراجعة التعليمات البرمجية مع التعافي المضمون من حالات الفشل.
  • ChatOps: التكامل مع منصات الدردشة لأتمتة إشعارات الفريق وإدارة سير العمل.
  • عمليات MLOps: ضمان استمرار سير عمل التعلم الآلي طويل الأمد بسلاسة على الرغم من الانقطاعات.

يمكن العثور على أمثلة لتدفقات العمل هنا.

الخلاصة: كود أقل، ومتاعب أقل

يعمل مفهوم Python المتين، الذي يتم تنفيذه بواسطة AutoKitteh، على تمكين المطورين من إنشاء ونشر وإدارة أتمتة موثوقة لسير العمل بأقل قدر من التعليمات البرمجية. يتم التعامل مع التنفيذ الدائم والاسترداد السلس خلف الكواليس، حتى تتمكن من التركيز على ما يهم حقًا - منطق عملك.

على الرغم من وجود العديد من الأدوات الممتازة لتحقيق المتانة (مثل Temporal وRestate)، إلا أن تقنية Duar-Python توفر طريقة سريعة وبسيطة وفعالة من حيث التكلفة لتحقيق نفس النتائج.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/haimzlato/durable-python-building-bullet-proof-long-running-workflows-made-simple-49h4?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3