مرحباً بقراء WondTech! هل تساءلتم يوماً كيف تظل طلباتكم عبر الإنترنت متزامنة تماماً عبر الأنظمة المختلفة، خاصةً عندما يستخدم موقع ويب العديد من الخدمات الصغيرة والمستقلة؟ الحفاظ على تناسق البيانات في هذه «الخدمات المصغرة» (microservices) قد يكون صداعاً حقيقياً، لأنه على عكس التطبيقات القديمة «المتراصة» (monolith)، لا يمكنكم ببساطة تغليف كل شيء في معاملة قاعدة بيانات واحدة كبيرة.

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

هنا يأتي «نمط Saga» للإنقاذ. تخيلوا نمط Saga كسلسلة مخططة بعناية من المعاملات المحلية الأصغر. بدلاً من معاملة واحدة عملاقة عبر الخدمات، فإن كل خطوة في نمط Saga هي إجراء منفصل داخل خدمتها الخاصة. على سبيل المثال، عندما تقومون بتقديم طلب:
1. تقوم خدمة الطلبات بإنشاء طلب معلق.
2. ثم تخبر خدمة المخزون بحجز الأصناف الخاصة بكم.
3. بعد ذلك، تقوم خدمة الدفع بتحصيل المبلغ من بطاقتكم.
4. أخيراً، تقوم خدمة الشحن بجدولة التسليم، وتضع خدمة الطلبات علامتكم على الطلب كـ 'مؤكد'.

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

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