إدارة قفل أنظمة التوزيع باستخدام تخزين Azure

توجد الأنظمة الموزعة منذ فترة وهناك أنماط معروفة تم تأسيسها عند تصميمها. اليوم، سنتحدث عن أحد الأنماط الشائعة: “أقفال”.

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

لمنع حالات التوقف، يمكن استخدام استراتيجية واحدة وهي استخدام مهلات أو أقفال قائمة على التأجير.

قفل المهلة

  • في هذه الحالة، هناك مهلة محددة مسبقًا تطلب العملية القفل من أجلها. إذا لم يتم تحرير القفل قبل انتهاء المهلة، يضمن النظام أن يتم تحرير القفل في النهاية.

قفل التأجير

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

مزايا وعيوب القفل القائم على الانتهاء من الوقت والإيجار

Pros Cons
قفل قائم على الانتهاء من الوقت سهل التنفيذ يتطلب اختيارًا دقيقًا للانتهاء من الوقت
يمنع القفل الدائم إذا لم يكتمل المعالجة، فلا يوجد طريقة لتجديد الإيجار
قفل قائم على الإيجار يقلل من خطر انتهاء القفل مبكرًا
يتطلب آلية لتجديد الإيجار
يمكن للعملية الاستمرار في طلب الإيجار حتى اكتمال العمل.

كلا الاستراتيجيتين السابقتين هما طريقة للاستعادة السريعة من فشل العمليات أو تقسيمات الشبكة في أنظمة التوزيع.

استراتيجية قفل الإيجار مع تخزين Azure

دعونا نلقي نظرة على كيفية استخدام استراتيجية قفل الإيجار مع تخزين Azure. هذا يتضمن أيضًا استراتيجية قفل المهلة.

الخطوة 1: استيراد حزمة Nuget الخاصة بتخزين Blob

“12.23.0” هي أحدث نسخة في وقت كتابة هذه المقالة. يمكن العثور على أحدث الإصدارات في تخزين Azure Blob.

XML

 

الخطوة 2: احصل على القفل

فيما يلي الكود للحصول على القفل.

C#

 

  1. أولاً، نقوم بإنشاء عميل حاوية Blob واسترجاع عميل Blob للـ blob المحدد الذي نريد الحصول على قفل عليه.
  2. ثانياً، تحاول طريقة “Acquire Async” الحصول على القفل لفترة محددة. إذا كانت عملية الحصول ناجحة، يتم إرجاع معرف القفل، وإذا لم تكن كذلك، يتم إلقاء 409 (رمز الحالة للتعارض).
  3. تعتبر “Acquire Async” هي الطريقة الرئيسية هنا. يمكن تعديل بقية الكود حسب احتياجاتك.

الخطوة 3: تجديد القفل

  • “Renew Async” هي الطريقة في مجموعة أدوات تخزين .NET المستخدمة لتجديد القفل.
  • إذا كانت عملية التجديد غير ناجحة، يتم إلقاء استثناء مع ذكر سبب الفشل.
C#

 

الخطوة 4: تنسيق طرق الحصول على القفل وتجديده

  • أولاً، نقوم بتسمية “Try Acquire Lease Async” لاسترداد معرف التأجير من الخطوة 2. بمجرد أن يكون ناجحًا، يتم بدء مهمة خلفية تقوم بدعوة “Renew Lease Async” من الخطوة 3 كل X ثانية. تأكد فقط من وجود ما يكفي من الوقت بين انتهاء المهلة وعندما يتم استدعاء طريقة تجديد التأجير.
C#

 

  • يتم استخدام رمز إلغاء لإيقاف مهمة تجديد التأجير بشكل سلس عندما لم يعد هناك حاجة إليها.

الخطوة 5: إلغاء تجديد التأجير

  • عندما يتم استدعاء الطريقة “Cancel Async”، يصبح “IsCancellationRequested” في الخطوة 4 صحيحًا، وبسبب ذلك لم نعد ندخل في حلقة الوقت ونطلب تجديد التأجير.
C#

 

الخطوة 6: إطلاق التأجير

أخيرًا، لإطلاق التأجير فقط قم بدعوة الطريقة “Release Async”.

C#

 

الاستنتاج

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

Source:
https://dzone.com/articles/locks-in-distributed-systems-timeout-lease-based