Table of Contents
وتمثل الخدمات الصغرى التي تُنفذ في الأحداث تحولا أساسيا في كيفية تصميم نظم البرامجيات الحديثة على نطاق واسع، والقدرة على التكيف، ومواءمة الأعمال التجارية، وعندما تقترن هذه الهياكل بالتصميم القائم على أساس النطاقات، فإنها تتجاوز مجرد التحلل التقني لإنشاء نظم تعكس لغة ومعوقات مجال الأعمال الفعلي، ويوفر هذا الدليل نهجاً شاملاً وعملياً لتصميم الخدمات الدقيقة التي تحركها الأحداث باستخدام مبادئ التصحر وتدهور الأراضي والجفاف، وتغطي كل شيء من اكتشافات السياق الملزمة إلى حدث.
خدمات مايكروسات الهضم
وفي هيكل تقليدي يقوم على الطلب، تتواصل الخدمات بصورة متزامنة عن طريق نداءات من حزب تحرير شعب الهنغروس أو التجمع الكونغولي من أجل الديمقراطية، مما يؤدي إلى حدوث انقلاب زمني ضيق - يجب على المتصل أن ينتظر من المتلقي عليه الرد، كما أن الخدمات الصغرى التي تدار في الأحداث تُعد من دون هذا النموذج: تنشر الخدمات أحداثاً (تمثل شيئاً حدث) لسماسرة الرسائل، وتستهلك خدمات أخرى تلك الأحداث بغرابة.
وتشمل العناصر الأساسية لبنية الخدمات الدقيقة التي تحركها الأحداث ما يلي:
- Event Producers: Services that detect and emit events (e.g., "OrderPlaced")
- Event Consumers]: Services that subscribe to events and react accordingly
- Message Broker]: Middleware like Apache Kafka, RabbitMQ, or Amazon EventBridge that stores and routes events
- Event Schema Registry: a central store for event contracts, enabling versioning and evolution
ويحسن هذا النموذج إمكانية التصعيد لأن كل خدمة يمكن أن تُرفع بشكل مستقل على أساس حمولة خاصة بها، ويتحسّن مدى سهولة الإنتاج لأن فشل المستهلك لا يعرقل أحداث المنتجين، ويمكن إعادة تجهيزها في وقت لاحق، وبالإضافة إلى ذلك، تدعم النظم القائمة على الأحداث، بطبيعة الحال، الاتساق في نهاية المطاف، الذي كثيرا ما يكون أكثر ملاءمة من المعاملات الموزعة للنظم الواسعة النطاق.
المبادئ الأساسية للتصميم على أساس الدومين - الدريفن
وقد صُقل التصميم القائم على أساس رئيسي على مدى عقود من قبل إيريك إيفانز ومجتمع إدارة التنمية البشرية، والهدف هو إنشاء برامجيات تُعدّل بأمانة مجال الأعمال بدلاً من أن تُدمج في شواغل الهياكل الأساسية، وتطبق لبنات البناء الرئيسية للديوكسينات بصورة مباشرة على تصميم الخدمات الصغرى:
الوحدات البرية
فالسياق المقيد هو حدود منطقية ينطبق عليها نموذج ميداني معين، مثلا، قد يختلف مفهوم " الزبون " بين سياق البيع (حيث يكون الزبون رائدا في مجال الاتصال) وسياق الشحن (حيث يكون الزبون عنوانا وأفضلية تسليما)، وكل سياق ملزَم به لغته المتنافرة، ففي الحالات البالغة الصغر، تكون كل خدمة تملك عادة سياقا واحدا ملزِما تماما.
الكيانات وأصول القيمة
فالأشخاص هم أشياء ذات هوية فريدة تستمر بمرور الوقت (مثلاً، أمر يحمل أمراً بالهوية) وتُعتبر الأشياء القيمة أشياء غير قابلة للاشتعال تصف جوانب المجال دون هوية مكرسة لها (مثل العنوان والمال) وفي الحالات، تكون الأحداث ذاتها ذات قيمة كبيرة للأجسام - فهي تمثل لحظة في الزمن وينبغي أن تكون غير قابلة للاشتعال، والخطأ المشترك هو تكوين كوابيس متغيرة في الدولة.
المجموع
فالمجموعة هي مجموعة من الأشياء التي يمكن معالجتها كوحدة واحدة، وخط حدود المعاملات يضمن الاتساق داخل المجموع، وفي هيكل يقوم على الأحداث، تنشر الأحداث عندما يطرأ تغيير شامل على الحالة، مثلا عندما يكون ] أورد ] عمليات انتقال إجمالية من " ريثما يتم تأكيدها " ، ينشر النظام ما يلي:
الأحداث الرئيسية
وهذه هي حجر الزاوية في النظم القائمة على الأحداث، إذ تستوعب مناسبة ميدانية شيئاً حدث في المجال الذي يهتم به خبراء المجال، وتُدرج الأحداث في التوتر الماضي (مثلاً، ] InvoicePaid ، Inventory Reserved) وتُحمل البيانات اللازمة للمستهلكين من خلال الأنشطة التي تُنشأ.
تصميم خدمات صغيرة مع إدارة التصحر وتدهور الأراضي والجفاف
ولا يتعلق تطبيق الـ دي دي دي دي دي دي دي دي دي دي على تصميم الخدمات الجزئية فقط بتجزئة واحدة إلى خدمات أصغر، بل يتطلب إجراء عملية منهجية لتحديد نطاق الأعمال التجارية في سياقات مقيدة، يصبح كل منها مرشحا للخدمة الصغرى، وتشمل هذه العملية ثلاث مراحل رئيسية هي: التصميم الاستراتيجي، والتصميم التكتيكي، ونموذج الأحداث.
التصميم الاستراتيجي: الكشف عن السياقات البرية
(أ) بدء دورة Domain Storytelling]) أو حلقة عمل Event Storming]]، وجمع خبراء ومطوري ميدان معاً لرسم خريطة لتدفق أنشطة الأعمال التجارية، وعند تحديد الأحداث والقيادات، تجميعهم في سياقات، وبالنسبة لنظام التجارة الإلكترونية، قد تشمل السياقات النموذجية الملزمة ما يلي:
- Order Management]: handles cart, checkout, order state machine
- Inventory: tracks stock levels, reservations, restocking
- Billing]: الفواتير والمدفوعات والمبالغ المستردة
- Fulfillment]: الشحن، والتتبع، والتسليم
- Customer Management]: النبذات، الأفضليات، التوثيق
وسيصبح كل من هذه السياقات خدمة صغيرة، وتتصور خريطة كونتسيت ] العلاقات بين السياقات - ولا سيما السياقات التي تُعد في أعلى المجرى (الأحداث المنتجة) والتي هي في المجرى (أحداث الحجم) وتصبح هذه الخريطة المخطط لعلم الطبقات التي تُقام فيها أحداث.
التصميم التكتيكي: وضع النماذج داخل إطار بناء
في كل سياق مقيد، بناء نموذج للمجالات الغنية باستخدام الكيانات، وأجسام القيمة، والمجاميع، والأحداث الميدانية، مثلا في سياق إدارة النظام، يمكن أن تحددوا ما يلي:
- Order] (الجمود الكلي): يحتوي على البنود، والحالة، وعنوان الشحن
- Order Item] (entity): references a product, quantity, price
- ShippingAddress] (الموضوع القيم): الشارع، المدينة، الزبيب
- OrderPlaced (حدث رئيسي): أثيرت عند تقديم الطلب
- OrderShipped (حدث رئيسي): أثيرت عندما ينتقل الأمر إلى الشحن
ويكفل الجذر الكلي إنفاذ جميع الغزاة (مثل الحساب الكلي، والتحولات في الوضع) قبل نشر الحدث، وهذا يتمشى مع النمط الكلي ويمنع الدولة غير المتجانسة من التسرب إلى المستهلكين.
مناسبة نموذجية: تحديد الأحداث والتصوير
وبعد تحديد السياقات المقيدة، نمذج الأحداث التي تتدفق فيما بينها، واستخدام تقنية تعاونية مثل Event Modeling] (التي أعدها آدم ديميتروك)، وابدأ بالجدول الزمني: قائمة الأحداث حسب الترتيب الزمني كما يحدث في رحلة للمستعملين، وبالنسبة لكل حدث، يقرر السياق الذي ينتجه، والسياقات التي تستهلكه.
- Order Management] ⁇ publishes OrderPlaced]]
- Inventory] zos OrderPlaced], reserves stock, then publishes Inventory Reserved (or ]ReservationFailed[7]
- Billing] woumes Inventory Reserved], processes payment, publishes PaymentSucceed or ]PaymentFailed[7]
- Order Management] woumes ] Paymentsucceed], changes order status to "confirmed", publishes OrderConfirmed]
- Fulfillment] woumes Order Confirmed], triggers shipping, publishes Shipped]
ويقضي هذا الدرس على الحاجة إلى مركز أوركستراس، وكل خدمة تستجيب للأحداث وقد تنتج أحداثا جديدة، ويحقق النظام ككل الاتساق في نهاية المطاف، ولكي تعالج الإخفاقات، يجب أن تكون الخدمات مُجدية وأن تكون قادرة على إعادة معالجة الأحداث.
فوائد الهيكل التنظيمي المشترك والمصرف الصحي
ويحقق التآزر بين الهيكل القائم على الأحداث والهيكل المصحوب بالتصحر وتدهور الأراضي والجفاف عدة مزايا قابلة للقياس على تصميمات الخدمات التقليدية:
الازدواج
الخدمات تتواصل حصراً من خلال الأحداث، لا تتصل مباشرة بشركة (آي بي آي) الحدث هو رسالة حريق ونباتية، المنتج لا يتوقع رد متزامن، وهذا يلغي الانقلابات التي تدوم وقتها، ويمكن إضافة المستهلك أو إزالته دون التأثير على المنتج، ولا تسرّب التغييرات في النموذج الداخلي لإحدى الدوائر إلى الآخرين ما دام الحدث ثابتاً.
Scalability
ويتيح تجهيز الأحداث المتزامنة لكل خدمة أن تُقَدَّم أفقياً على أساس حمولة خاصة بها، ولا يُجبر ارتفاع عدد المواضع المطلوبة على خدمة الجرد إلى نفس الدرجة؛ كما أن الأحداث تُعَزَّل في السمسار، علاوة على ذلك، يمكن أن تضيف مستهلكين جدداً (مثلاً، محرك التوصية الذي يستمع إلى OrderPlaced) دون تعديل الخدمات القائمة.
المرونة
وإذا كانت خدمة بيلينغ معزولة، فإن إدارة النظام لا تزال تنشر أحداثاً، لا تزال مستمرة، وعندما يسترد بيلينغ، فإنها تعيد صياغة الأعمال المتأخرة، وهي أكثر قوة بكثير من السلاسل المتزامنة حيث تسلسل زمني واحد من خلال النظام بأكمله، وفي إطار مكافحة التصحر وتدهور الأراضي والجفاف، يكفل الحد الكلي أن تكون كل خدمة متسقة دون انتظار خدمات المجرى.
Domain Alignment
ربما يكون أقوى فائدة: فالهيكل يجسد العمل، وتُسمى الأحداث بلغة خبراء المجال، وهذا يجعل النظام شفافاً لأصحاب المصلحة ويسهل تطوره مع تغيرات الأعمال، فالسياقات الملزمة تمنع جميع الناس من خدمة عامة تحاول خدمة سادة متعددين وتنتهي بعدم خدمة أي منهم.
التحديات وأفضل الممارسات
وفي حين أن الجمع بين الخدمات الصغرى التي تحركها الأحداث والديوكسينات المصحوبة بدافع من القوة، فإنه يستحدث تعقيدات جديدة تتطلب ممارسات هندسية متناسقة.
إدارة المواظبة على الأحداث
وعندما تقترن الخدمات بشكل غير مباشر بالأحداث، يكون النظام متسقاً في نهاية المطاف، ويمكن للمستعمل أن يرى حالة " الدفع معلقاً " قبل فترة وجيزة من ] [التعويضات عن الحوادث التي تم التوصل إليها ، إذا كان ينبغي أن تكون هذه الأنشطة مقبولة بالنسبة للعديد من المجالات، ولكن يجب أن تصمم تجربة المستعملين وفقاً لذلك.
الحدث: التصوير والتطوير
فالأحداث هي سجلات غير قابلة للاشتعال في الماضي، ولكن يجب أن تتطور شياطاتها، واعتماد سجل Event Schema Registry ] (مثل سجل شيما المؤثر أو حل عرفي) لإنفاذ عمليات التحقق من التوافق، واستخدام استمارة تسلسل تدعم تطور الكيماويات، مثل أفرو، أو بروتوف، أو شركة JSON Schema مع الصيغ:
- دائماً ما تضيف حقول جديدة كخيارية مع التقصير
- لا تزيل الحقول دون فترة استهلاك.
- Version events at the schema level (e.g., OrderPlacedV2).
- :: إبقاء المستهلكين متسامحين مع الصيغ القديمة (التوافق فيما بين المستقبل).
Event Sourcing vs. Event Notifications
ولا ينبغي تخزين جميع الأحداث كمصدر للحقيقة، بل إن العديد من عمليات التنفيذ تستخدم الإخطارات ] - عروض تُبلغ دوائر أخرى بالتغيير دون تخزين تاريخ الحدث الكامل، وعلى النقيض من ذلك، فإن [السؤالان اللذان يُستعان بهما في إعداد العطاءات ، لا تزالان كل تغيير في سجل مراجعة الحسابات.
الحياد والتجهيزات
وكثيراً ما تؤدي النظم الموزعة إلى أحداث مرة واحدة على الأقل، إذ أن تصميم مستهلكيك على أن يكون متفائلاً: فتجهيز نفس الحدث مرتين يجب أن يسفر عن النتيجة نفسها، ويتمثل النهج المشترك في إزالة التطابق حسب الهوية حسب الحدث. وفي الوثيقة DDD، يمكن أن يكون الرقم الإجمالي للتعرف على الهوية، إلى جانب رقم تسلسل الأحداث، مفتاحاً للانتقاص، بالإضافة إلى ضمان أن يتعامل المستهلكون في المناسبات المكررة مع الأحداث دون أن يتحملوا التسليم الفريد.
الرصد والقابلية للاحتجاز
نظم الأحداث أصعب من أن تُلغى لأن التدفق غير متجانس ويُنتج عنه خدمات متعددة. () أن تنفذ عمليات تعقب موزعة ) (مثلاً، المقاييس المفتوحة) التي تُستخدم فيها بطاقة تعريفية تُستخدم في كل حدث.
خطوات عملية للبدء
- Run an Event Storming workshop with domain experts to identify all domain events, commands, and bounded contexts.
- Define the Context Map]. Determine which contexts will be microservices and draw the upstream/downstream relationships.
- ] hoose your event broker] (Kafka for high throughput, RabbitMQ for simpler routing, or cloud-native like AWS EventBridge).
- Design event schemas] collaboratively using a registry. Start with a few core events.
- Implement one service] following the DDD tactical patterns. Publish its first domain event.
- Build a consumer] in another service.اختبار تدفق الأسينك من نهاية إلى نهاية.
- ] التوسع على نحوٍ واسع ].
النموذج العالمي الحقيقي: نظام التجارة الإلكترونية
[FLT]-F-F-d-FT-J-S-F-F-F-F-F-F-F-F-I-S-F-F-F-F-F-F-F-F-F-F-F-F-F-F-J-(
الموارد الخارجية
وبغية تعميق فهمكم لهذه المفاهيم، استكشاف المصادر الموثوقة التالية:
- مقالة (مارتين فاولر) عن الخدمات الدقيقة
- ترجمة:
- Event Modeling website] - دليل عملي وأداة لتصميم نظم تحركها الأحداث
- Apache Kafka Streams documentation] - لفهم أنماط تجهيز المناسبات
خاتمة
ويعد تصميم الخدمات الصغرى التي تحركها الأحداث مع مبادئ التصميم القائمة على أساس النطاقات نهجاً مثبتاً لنظم البناء، سواء كانت قوية تقنياً أو متوافقة مع الأعمال التجارية، ويعالج الجمع بين السياقات المقيدة، والمجاميع، والأحداث الميدانية، والتصوير الفصيري المتناهيج، والتقريبية المستقلة، والقدرة على التكيف، وفي حين أن التحديات مثل الاتساق والنسخة النهائية تتطلب تخطيطاً دقيقاً، فإن الدفع هو نظام يمكن أن يتطور بعقود العمل بدون استثمار.