المقدمة
كما تعلم ، فإن الانتقال من بنية متراصة إلى بنية الخدمات المصغرة يسبب عددًا من الصعوبات المرتبطة بالجزء الفني للمشروع والعامل البشري. أحد أصعب التحديات التقنية هو ضمان الاتساق في النظام الموزع.
في المرة الأخيرة ، ناقشنا أسباب مشكلات الاتساق في بنية الخدمات المصغرة ، والنهج المتفائل للاتساق والاتساق باستخدام الالتزام على مرحلتين.
نمط الملحمة
Saga هي آلية لضمان اتساق البيانات في بنية الخدمات المصغرة دون استخدام المعاملات الموزعة.
لكل أمر نظام يحتاج إلى تحديث البيانات في العديد من الخدمات ، يتم إنشاء ملحمة. الملحمة هي نوع من "قائمة التحقق" تتكون من معاملات ACID محلية متسلسلة ، كل منها يقوم بتحديث البيانات في خدمة واحدة. يتم تطبيق معاملة تعويضية للتعامل مع حالات الفشل. يتم تنفيذ مثل هذه المعاملات في حالة فشل جميع الخدمات التي تمت فيها المعاملات المحلية بنجاح.
هناك عدة أنواع من المعاملات في الملحمة ، تصل إلى أربعة:
- التعويض - إلغاء تغيير تم إجراؤه بواسطة معاملة محلية.
- القابلة للتعويض هي معاملة يجب تعويضها (عكسها) في حالة فشل المعاملات اللاحقة.
- تحول - صفقة تحدد نجاح القصة بأكملها. إذا نجحت ، فعندئذٍ ستصل الملحمة إلى النهاية.
- قابل للتكرار - يتبع المحور ويضمن النجاح.
يمكنك تنظيم ملحمة باستخدام تصميم الرقصات أو التنسيق.
في حالة ملحمة الرقص ، لا يوجد منسق متخصص. باستخدام خدمة الطلب والمستخدمين كمثال ، قد يبدو الأمر كما يلي: تتلقى خدمة الطلب طلبًا وتنشئ طلبًا في حالة معلق ، ثم تنشر حدث "تم إنشاء الطلب". معالج حدث في خدمة المستخدم يعالج هذا الحدث ، ويحاول حجز عنصر ، وينشر النتيجة كحدث. تعالج خدمة الطلب هذا الحدث ، وتأكيد الطلب أو إلغائه بناءً على نتيجة القراءة.
تبدو الملحمة المدبرة أكثر إثارة للاهتمام. باستخدام الخدمات المذكورة أعلاه كمثال ، قد يبدو الأمر كما يلي: تتلقى خدمة الطلب طلبًا ، وتنشئ ملحمة تنشئ طلبًا في حالة PENDING ، ثم ترسل أمرًا لحجز البضائع لخدمة المستخدم. تحاول خدمة المستخدم حجز المنتج وترسل رسالة استجابة تشير إلى النتيجة. الملحمة توافق على الأمر أو تلغيه.
يسمح نمط الملحمة للتطبيق بالحفاظ على تناسق البيانات عبر خدمات متعددة دون استخدام المعاملات الموزعة (التزامات مرحلتين) وتجنب المشكلات التي تمت مناقشتها في المقالة السابقة. ولكن من ناحية أخرى ، فإن نموذج البرمجة معقد للغاية: على سبيل المثال ، يجب على المطور لكل معاملة كتابة معاملة تعويضية تعكس التغييرات التي تم إجراؤها مسبقًا داخل الملحمة.
تسمح لنا هذه الملحمة بتحقيق نموذج ACD (الذرية + الاتساق + المتانة في مصطلحات ACID) ، لكننا فقدنا حرفًا واحدًا. يؤدي عدم وجود الحرف الأول إلى مشاكل معروفة من عدم العزلة. تتضمن هذه: التحديثات المفقودة - إحدى القصص الملحمية تستبدل التغييرات التي أجراها الآخر دون قراءتها ، أو القراءات القذرة - تقرأ المعاملة أو الملحمة تحديثات غير مكتملة لسلسلة أخرى ، غامضة / قراءات غير متكررة) - مرحلتان مختلفتان من الملحمة تقرأان نفس البيانات ولكن تحصلان على نتائج مختلفة لأن ملحمة أخرى أحدثت تغييرًا. هناك عدد من الأنماط التي تسمح لك بإصلاح بعض الحالات الشاذة: القفل الدلالي والتحديثات التبادلية والتمثيل المتشائم وإعادة قراءة القيمة وتغييرات الملف والقيمة.تظل مسألة ضمان العزلة مفتوحة.
هناك مشكلة أخرى مثيرة للاهتمام وهي استحالة التحديث الذري لقاعدة البيانات ونشر رسالة إلى وسيط الرسائل لبدء خطوات أخرى في الملحمة.
خاتمة
تحدثنا عن طرق تنظيم الملحمة باستخدام تصميم الرقصات والتناغم ، بالإضافة إلى المشكلات التي ينطوي عليها هذا النمط. بعد ذلك ، سنتحدث عن طرق إصلاح بعض الحالات الشاذة وإرسال رسائل إلى وسيط الرسائل بالمعاملات.
