البنية المدفوعة بالأحداث — إنتاج ونشر واستهلاك

البنية المدفوعة بالأحداث على لوحة تفاعلية: المُنتِجون، وناقل الأحداث، والمشتركون، ومخزن الأحداث، وكيف يتيح فكّ الاقتران لمستهلكين جدد أن ينضمّوا دون المساس بالمُنتِجين.

البنية المدفوعة بالأحداث تفكّ اقتران الأنظمة بجعلها تتواصل عبر الأحداث: المُنتِجون ينشرون ما وقع، والناقل يوجّهه إلى المشتركين، ومخزن الأحداث يحفظ التاريخ.

البنية المدفوعة بالأحداث — إنتاج ونشر واستهلاك

لوحة FlowJam التفاعلية لهذا الشرح — كل مسار وصف وسهم أعلاه جزء من مخطط QueryChart حقيقي يمكنك فتحه وتعديله.

كيف تقرأ هذا الشرح المرئي

  • اقرأ من اليسار إلى اليمين: بثّ، ثم نشر، ثم استهلاك واحتفاظ.
  • صف المُنتِجين لا يشير إلى مستهلك أبداً — فكل سهم يعبر الناقل، وهذا هو فكّ الاقتران وقد صار مرئياً.
  • الفرع السفلي هو مخزن الأحداث: فالأحداث نفسها التي تُستهلك آنياً يُحتفظ بها أيضاً لإعادة التشغيل والتدقيق.

الإنتاج والنشر

«الخدمات تنتج أحداث المجال» هي كامل مسؤولية المُنتِج — تسجيل أن شيئاً ما قد وقع. و«الأحداث تُنشر إلى الناقل» و«الناقل يوجّه الأحداث إلى المشتركين» هما خطوة النشر: فالناقل يقبل الأحداث ويسلّمها إلى كل من اشترك فيها. ويجعل التعليق على مربع البثّ القاعدة صريحة — فالمُنتِجون لا يعرفون من يستمع، وهذا ما يجعل النظام قابلاً للتوسيع.

الاستهلاك الآني

«المستهلكون يعالجون الأحداث بشكل غير متزامن» هو المسار على اليمين: فالمشتركون يتصرّفون بناءً على كل حدث — بتحديث نموذج قراءة، أو إرسال بريد إلكتروني، أو إطلاق سير عمل — وفق جدولهم هم. والمعالجة غير المتزامنة هي سبب أن مستهلكاً بطيئاً لا يُبطئ مُنتِجاً، وسبب إبقاء الشرح المرئي الاثنين في مجموعتين منفصلتين.

الاحتفاظ بالتاريخ

«مخزن الأحداث يحتفظ بالتاريخ الكامل» يسجّل كل حدث بالترتيب، و«يمكن إعادة تشغيل الأحداث للتدقيق أو الاستعادة» هو الغرض من هذا السجل — إعادة بناء حالة، أو الإجابة عن سؤال تدقيقي، أو تغذية مستهلك جديد من الماضي. و«مستهلكون جدد ينضمّون دون المساس بالمُنتِجين» هو اختبار هذه البنية: فلأن التاريخ موجود ولأن الناقل يوجّه بحسب الاشتراك، لا تغيّر إضافة خدمة شيئاً في الأعلى.

العلاقات الرئيسية والخلاصات

  • الحدث يسجّل ما وقع؛ وهو ليس أمراً موجّهاً إلى أحد بعينه.
  • الناقل يفكّ اقتران المُنتِجين عن المستهلكين — فلا يعرف أي منهما هوية الآخر ولا جدوله.
  • مخزن الأحداث يجعل التاريخ مصدراً موثوقاً يمكن إعادة تشغيله.
  • المستهلكون غير متزامنين: فمستهلك بطيء لا يعطّل مُنتِجاً أبداً.
  • المستهلكون الجدد ينضمّون بالاشتراك — وعلى ذلك يقوم كل ادّعاء المرونة في هذه البنية.

متى تستخدم هذا الشرح المرئي

  • تعليم تقسيم المُنتِج والناقل والمستهلك لفريق ينتقل من الطلب/الاستجابة إلى الأحداث.
  • تصميم تكامل جديد: مخزن الأحداث يجيب عمّا إذا كان التاريخ يحتاج إلى حفظ أم يُستهلك ويُنسى.
  • تدقيق نظام قائم مدفوع بالأحداث بحثاً عن العطل الكلاسيكي — مستهلك هو في حقيقته تبعية متزامنة.

كيف تعمل

  1. أعد تسمية الأطراف لتطابق نظامك

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

  2. سمِّ المواضيع ومستهلكيها

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

  3. أضف فروع الأعطال

    أدرج ما يحدث حين يتعطّل الناقل، أو يموت مستهلك في منتصف حدث، أو يصل حدث مرتين — مع آلية التكرارية الآمنة (idempotency) أو إعادة المحاولة التي تعالج كل حالة.

  4. وسّع مخزن الأحداث

    أضف قواعد الاحتفاظ وإعادة التشغيل التي يستخدمها نظامك فعلاً — كم من الوقت يُحفظ التاريخ وأي الحالات يُعاد بناؤها منه — لتعكس مجموعة المخزن سياستك.

الأسئلة الشائعة

ما هي البنية المدفوعة بالأحداث؟

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

ما الفرق بين الأمر والحدث؟

الأمر تعليمات موجّهة إلى مستقبِل بعينه — «عالج هذه الطلبية» — وينتظر نتيجة. أما الحدث فسجلّ بأن شيئاً قد وقع فعلاً — «تم تقديم طلبية» — ولا يسمّي أي مستقبِل. والتمييز مهم لأن الأوامر تقرن المرسِل بالمستقبِل، بينما تترك الأحداث المستقبِل حراً في التغيّر. ومُنتِجو الشرح المرئي لا يبثّون إلا الأحداث، وهذا ما يُبقي الناقل مرناً.

ما الغرض من مخزن الأحداث؟

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

ما أنماط الأعطال في البنية المدفوعة بالأحداث؟

الأنماط الكلاسيكية هي: أحداث تُسلَّم أكثر من مرة (فيجب أن يكون المستهلكون آمنين تجاه التكرار)، وأحداث تُعالج خارج الترتيب (فيجب أن يتعامل المستهلكون مع الترتيب)، وطابور الرسائل الميتة (الأحداث التي تفشل مراراً). والمعالجة غير المتزامنة في الشرح المرئي هي ما يجعل هذه الأنماط قابلة للإدارة — إذ يستطيع المستهلك إعادة المحاولة دون تعطيل المُنتِج — ولهذا فإن فروع الأعطال في خطوات الإرشاد هي النصف العملي من هذا التصميم.

عدّل هذا الشرح المرئي في QueryChart (FlowJam)

افتح لوحة البنية المدفوعة بالأحداث هذه نفسها كمخطط خاص بك، وأعد تسمية المُنتِجين والمستهلكين ليطابقوا خدماتك، وارسم أحداثك.

عدّل هذا الشرح المرئي في QueryChart (FlowJam)

المزيد في الشروحات المرئية