تنفيذ نهج إعادة المحاولة باستخدام Python
يجب أن يكون أي تطبيق يتم تشغيله في السحابة أو يتصل بالخدمات والموارد البعيدة قادرا على معالجة الأخطاء العابرة. من الشائع أن تواجه هذه التطبيقات أخطاء بسبب فقدان الاتصال بالشبكة مؤقتا أو انتهاء مهلة الطلب عندما تكون الخدمة أو المورد مشغولا أو عوامل أخرى. يجب على المطورين إنشاء تطبيقات للتعامل مع الأخطاء العابرة بشفافية لتحسين الاستقرار والمرونة.
في هذه المقالة، ستتعلم كيفية استخدام مكتبة عميل Azure Storage ل Python لإعداد نهج إعادة المحاولة لتطبيق يتصل ب Azure Blob Storage. تحدد نهج إعادة المحاولة كيفية معالجة التطبيق للطلبات الفاشلة، ويجب ضبطها دائما لمطابقة متطلبات العمل للتطبيق وطبيعة الفشل.
تكوين خيارات إعادة المحاولة
يتم تكوين نهج إعادة المحاولة ل Blob Storage برمجيا، مما يوفر التحكم في كيفية تطبيق خيارات إعادة المحاولة على طلبات وسيناريوهات الخدمة المختلفة. على سبيل المثال، قد يقوم تطبيق ويب يصدر طلبات استنادا إلى تفاعل المستخدم بتنفيذ نهج مع عدد أقل من عمليات إعادة المحاولة والتأخيرات الأقصر لزيادة الاستجابة وإعلام المستخدم عند حدوث خطأ. بدلا من ذلك، قد يزيد التطبيق أو المكون الذي يقوم بتشغيل طلبات الدفعات في الخلفية من عدد عمليات إعادة المحاولة ويستخدم استراتيجية التراجع الأسي للسماح بإكمال وقت الطلب بنجاح.
لتكوين نهج إعادة المحاولة لطلبات العميل، يمكنك الاختيار من بين الأساليب التالية:
- استخدم القيم الافتراضية: نهج إعادة المحاولة الافتراضي لمكتبة عميل Azure Storage ل Python هو مثيل ل ExponentialRetry بالقيم الافتراضية. إذا لم تحدد نهج إعادة المحاولة، يتم استخدام نهج إعادة المحاولة الافتراضي.
- تمرير القيم ككلمات أساسية إلى منشئ العميل: يمكنك تمرير قيم خصائص نهج إعادة المحاولة كوسيطات كلمات أساسية عند إنشاء كائن عميل للخدمة. يسمح لك هذا الأسلوب بتخصيص نهج إعادة المحاولة للعميل، وهو مفيد إذا كنت بحاجة فقط إلى تكوين بعض الخيارات.
- إنشاء مثيل لفئة نهج إعادة المحاولة: يمكنك إنشاء مثيل لفئة الأسي أو LinearRetry وتعيين الخصائص لتكوين نهج إعادة المحاولة. بعد ذلك، يمكنك تمرير المثيل إلى منشئ العميل لتطبيق نهج إعادة المحاولة على جميع طلبات الخدمة.
يعرض الجدول التالي جميع الخصائص التي يمكنك استخدامها لتكوين نهج إعادة المحاولة. يمكن تمرير أي من هذه الخصائص ككلمات أساسية إلى منشئ العميل، ولكن بعضها متاح فقط للاستخدام مع مثيل ExponentialRetry
أو LinearRetry
. يتم ملاحظة هذه القيود في الجدول، جنبا إلى جنب مع القيم الافتراضية لكل خاصية إذا لم تجري أي تغييرات. يجب أن تكون استباقيا في ضبط قيم هذه الخصائص لتلبية احتياجات تطبيقك.
الخاصية | نوع | الوصف | القيمة الافتراضية | إعادة تعيين الأس | خطي الارتطام |
---|---|---|---|---|---|
retry_total |
العدد الصحيح | الحد الأقصى لعدد المحاولات. | 3 | نعم | نعم |
retry_connect |
العدد الصحيح | الحد الأقصى لعدد محاولات إعادة الاتصال | 3 | نعم | نعم |
retry_read |
العدد الصحيح | الحد الأقصى لعدد مرات إعادة محاولة القراءة | 3 | نعم | نعم |
retry_status |
العدد الصحيح | الحد الأقصى لعدد محاولات إعادة المحاولة للحالة | 3 | نعم | نعم |
retry_to_secondary |
منطقي | ما إذا كان يجب إعادة محاولة الطلب إلى نقطة النهاية الثانوية، إذا كان ذلك قادرا. استخدم هذا الخيار فقط لحسابات التخزين مع تمكين النسخ المتماثل المتكرر جغرافيا، مثل RA-GRS أو RA-GZRS. يجب عليك أيضا التأكد من أن تطبيقك يمكنه التعامل مع البيانات التي يحتمل أن تكون قديمة. | False |
نعم | نعم |
initial_backoff |
العدد الصحيح | الفاصل الزمني الأولي للتراجع (بالثوان) لإعادة المحاولة الأولى. ينطبق فقط على استراتيجية التراجع الأسي. | 15 ثانية | نعم | لا |
increment_base |
العدد الصحيح | الأساس (بالثوان) لزيادة initial_backoff بعد إعادة المحاولة الأولى. ينطبق فقط على استراتيجية التراجع الأسي. | 3 seconds | نعم | لا |
backoff |
العدد الصحيح | الفاصل الزمني للتراجع (بالثوان) بين كل إعادة محاولة. ينطبق فقط على استراتيجية التراجع الخطي. | 15 ثانية | لا | نعم |
random_jitter_range |
العدد الصحيح | رقم (بالثوان) يشير إلى نطاق للتشويه/التوزيع العشوائي للفاصل الزمني للتراجع. على سبيل المثال، يعني الإعداد random_jitter_range إلى 3 أن الفاصل الزمني للتراجع عن x يمكن أن يختلف بين x+3 وx-3. |
3 seconds | نعم | نعم |
إشعار
تستخدم الخصائص retry_connect
و retry_read
و retry_status
لحساب أنواع مختلفة من الأخطاء. يتم حساب عدد مرات إعادة المحاولة المتبقية كحد أدنى للقيم التالية: retry_total
و retry_connect
retry_read
و وretry_status
. لهذا السبب، قد لا يكون للإعداد فقط retry_total
تأثير إلا إذا قمت أيضا بتعيين الخصائص الأخرى. في معظم الحالات، يمكنك تعيين جميع الخصائص الأربعة إلى نفس القيمة لفرض الحد الأقصى لعدد مرات إعادة المحاولة. ومع ذلك، يجب ضبط هذه الخصائص استنادا إلى الاحتياجات المحددة لتطبيقك.
توضح الأقسام التالية كيفية تكوين نهج إعادة المحاولة باستخدام نهج مختلفة:
استخدام نهج إعادة المحاولة الافتراضي
نهج إعادة المحاولة الافتراضي لمكتبة عميل Azure Storage ل Python هو مثيل ل ExponentialRetry بالقيم الافتراضية. إذا لم تحدد نهج إعادة المحاولة، يتم استخدام نهج إعادة المحاولة الافتراضي. يمكنك أيضا تمرير أي خصائص تكوين كوسيطات كلمات أساسية عند إنشاء كائن عميل للخدمة.
يوضح مثال التعليمات البرمجية التالي كيفية تمرير قيمة للخاصية retry_total
كوسيطة كلمة أساسية عند إنشاء كائن عميل لخدمة الكائن الثنائي كبير الحجم. في هذا المثال، يستخدم كائن العميل نهج إعادة المحاولة الافتراضي مع retry_total
الخاصية وخصائص عدد إعادة المحاولة الأخرى المعينة إلى 5:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object with retry options
blob_service_client = BlobServiceClient(account_url, credential, retry_total=5,
retry_connect=5, retry_read=5, retry_status=5)
إنشاء نهج إعادة تعيين الأس
يمكنك تكوين نهج إعادة المحاولة عن طريق إنشاء مثيل من ExponentialRetry، وتمرير المثيل إلى منشئ العميل باستخدام وسيطة retry_policy
الكلمة الأساسية. يمكن أن يكون هذا الأسلوب مفيدا إذا كنت بحاجة إلى تكوين خصائص متعددة أو نهج متعددة لعملاء مختلفين.
يوضح مثال التعليمات البرمجية التالي كيفية تكوين خيارات إعادة المحاولة باستخدام مثيل .ExponentialRetry
في هذا المثال، قمنا بتعيين initial_backoff
إلى 10 ثوان، increment_base
إلى 4 ثوان، وإلى retry_total
3 محاولات إعادة:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Specify retry policy parameters
retry = ExponentialRetry(initial_backoff=10, increment_base=4, retry_total=3)
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)
إنشاء نهج LinearRetry
يمكنك تكوين نهج إعادة المحاولة عن طريق إنشاء مثيل LinearRetry، وتمرير المثيل إلى منشئ العميل باستخدام وسيطة retry_policy
الكلمة الأساسية. يمكن أن يكون هذا الأسلوب مفيدا إذا كنت بحاجة إلى تكوين خصائص متعددة أو نهج متعددة لعملاء مختلفين.
يوضح مثال التعليمات البرمجية التالي كيفية تكوين خيارات إعادة المحاولة باستخدام مثيل .LinearRetry
في هذا المثال، قمنا بتعيين backoff
إلى 10 ثوان، retry_total
إلى 3 محاولات، وإلى retry_to_secondary
True
:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Specify retry policy parameters
retry = LinearRetry(backoff=10, retry_total=3, retry_to_secondary=True)
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)
الخطوات التالية
- هذه المقالة هي جزء من دليل مطور Blob Storage ل Python. راجع القائمة الكاملة لمقالات دليل المطور في إنشاء تطبيقك.
- للحصول على إرشادات معمارية وأفضل الممارسات العامة لإعادة المحاولة، راجع معالجة الأخطاء العابرة.
- للحصول على إرشادات حول تنفيذ نمط إعادة المحاولة لحالات الفشل العابرة، راجع نمط إعادة المحاولة.