العربية

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

بنية معتمدة على الأحداث: إتقان أنماط الرسائل للأنظمة القابلة للتطوير

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

ما هي البنية المعتمدة على الأحداث؟

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

الفوائد الرئيسية لـ EDA

أنماط الرسائل الشائعة في البنية المعتمدة على الأحداث

يمكن استخدام العديد من أنماط الرسائل في EDA، ولكل منها نقاط قوتها وضعفها. يعتمد اختيار النمط الصحيح على المتطلبات المحددة لتطبيقك.

1. النشر والاشتراك (Pub-Sub)

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

مثال

ضع في اعتبارك منصة للتجارة الإلكترونية. عندما يضع العميل طلبًا، يتم نشر حدث "OrderCreated" إلى موضوع "Orders". تشترك الخدمات مثل خدمة المخزون وخدمة الدفع وخدمة الشحن في موضوع "Orders" وتعالج الحدث وفقًا لذلك.

التنفيذ

يمكن تنفيذ Pub-Sub باستخدام وسطاء الرسائل مثل Apache Kafka أو RabbitMQ أو خدمات المراسلة المستندة إلى السحابة مثل AWS SNS/SQS أو Azure Service Bus. تختلف تفاصيل التنفيذ المحددة اعتمادًا على التكنولوجيا المختارة.

المزايا

العيوب

2. مصادر الأحداث

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

مثال

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

التنفيذ

تتضمن مصادر الأحداث عادةً تخزين الأحداث في متجر الأحداث، وهو قاعدة بيانات متخصصة مُحسَّنة لتخزين الأحداث واسترجاعها. غالبًا ما يتم استخدام Apache Kafka كمتجر للأحداث نظرًا لقدرته على التعامل مع كميات كبيرة من الأحداث وتوفير ضمانات ترتيب قوية.

المزايا

العيوب

3. فصل مسؤولية الأوامر والاستعلامات (CQRS)

CQRS هو نمط يفصل عمليات القراءة والكتابة لمخزن البيانات. يحدد نموذجين متميزين: نموذج الأوامر للتعامل مع عمليات الكتابة ونموذج الاستعلام للتعامل مع عمليات القراءة. يسمح هذا الفصل بتحسين كل نموذج لغرضه المحدد.

مثال

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

التنفيذ

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

المزايا

العيوب

4. الطلب والرد

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

مثال

قد ترسل واجهة مستخدم طلبًا إلى خدمة خلفية لاسترداد معلومات ملف تعريف المستخدم. تعالج خدمة الواجهة الخلفية الطلب وترسل استجابة تحتوي على بيانات ملف تعريف المستخدم.

التنفيذ

يمكن تنفيذ نمط الطلب والرد باستخدام وسطاء الرسائل الذين يدعمون دلالات الطلب والرد، مثل RabbitMQ. تتضمن رسالة الطلب عادةً معرف ارتباط، والذي يُستخدم لمطابقة رسالة الاستجابة بالطلب الأصلي.

المزايا

العيوب

5. Saga

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

مثال

ضع في اعتبارك سيناريو معالجة طلب التجارة الإلكترونية. قد يتضمن Saga الخطوات التالية: 1. إنشاء طلب في خدمة الطلبات. 2. حجز المخزون في خدمة المخزون. 3. معالجة الدفع في خدمة الدفع. 4. شحن الطلب في خدمة الشحن.

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

التنفيذ

هناك طريقتان رئيسيتان لتنفيذ Sagas: 1. Saga القائمة على تصميم الرقصات: كل خدمة مشاركة في Saga مسؤولة عن نشر الأحداث التي تؤدي إلى الخطوة التالية في Saga. لا يوجد منسق مركزي. 2. Saga القائمة على التنسيق: تدير خدمة منسق مركزي Saga وتنسق الخطوات المتضمنة. يرسل المنسق أوامر إلى الخدمات المشاركة ويستمع إلى الأحداث التي تشير إلى نجاح أو فشل كل خطوة.

المزايا

العيوب

اختيار نمط الرسائل الصحيح

يعتمد اختيار نمط الرسائل على المتطلبات المحددة لتطبيقك. ضع في اعتبارك العوامل التالية عند اتخاذ قرارك:

إليك جدول يلخص الخصائص الرئيسية لكل نمط رسائل:

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

أفضل الممارسات لتنفيذ أنماط رسائل EDA

فيما يلي بعض أفضل الممارسات التي يجب مراعاتها عند تنفيذ أنماط رسائل EDA:

أمثلة واقعية

يتم استخدام EDA وأنماط الرسائل المرتبطة بها في مجموعة واسعة من الصناعات والتطبيقات. فيما يلي بعض الأمثلة:

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

الخلاصة

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