نوع النمط: Saga

مرحبا يا هبر! أقدم لكم ترجمة مقالة "النمط: ملحمة" لكريس ريتشاردسون.


الوضع


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


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


المشكلة


كيف تضمن تناسق البيانات بين الخدمات؟


الحل


يجب تنفيذ كل معاملة تجارية تغطي العديد من الخدمات كقصة ملحمية.


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



هناك طريقتان لتنسيق الملحمات:


  • تصميم الرقصات - تنشر كل معاملة أحداثًا تؤدي إلى المعاملات في خدمات أخرى.
  • Orchestration - يقوم Orchestrator بإخبار المشاركين عن المعاملات التي يجب أن تبدأ.

مثال: ملحمة الكوريغرافيا



في متجر على الإنترنت باستخدام ملحمة قائمة على تصميم الرقصات ، سيتضمن إنشاء طلب الخطوات التالية:


  1. Order Service ( ) بإنشاء Order () في الحالة المعلقة (معلق) وتنشر حدث OrderCreated ()
  2. تتلقى Customer Service ( ) حدثًا وتحاول حجز رصيد للطلب. ثم ينشر أحد الحدثين: CreditReserved () أو CreditReserved () CreditLimitExceeded ()
  3. تتلقى Order Service ( ) حدثًا وتغير حالة الطلب إلى موافق عليه (مؤكد) أو ملغى (ملغى)

مثال: أوركسترال ساجا



في متجر على الإنترنت باستخدام ملحمة قائمة على تنسيق ، سيتضمن إنشاء طلب الخطوات التالية:


  1. Order Service ( ) بإنشاء Order () في الحالة المعلقة (في انتظار المراجعة) وإنشاء CreateOrderSaga ()
  2. CreateOrderSaga () الأمر ReserveCredit () إلى Customer Service ( )
  3. تحاول Customer Service ( ) حجز قرض لأمر وإرسال رد
  4. CreateOrderSaga () استجابة ويرسل أمر ApproveOrder () أو RejectOrder () إلى Order Service ( ) RejectOrder ()
  5. Order Service ( ) تغير حالة الطلب إلى الموافقة (المؤكدة) أو الملغاة (الملغاة)

تتمتع ساغا بالمزايا التالية


  • للسماح لتطبيق ما بالحفاظ على تناسق البيانات بين الخدمات دون استخدام المعاملات الموزعة.

تحتوي الملحمة على العيوب التالية


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

Source: https://habr.com/ru/post/ar427705/


All Articles