جميع العيّنات

عيّنة معمارية للبحث والتطوير 02 — مرجع: طبقة التكامل المؤسسي

طابور أحداث آمن عند الفشل: قبول دائم، إعادة محاولة محدودة، أثر متكافئ

عيّنة معمارية للبحث والتطوير: عمل بحثي وتطويري للاستوديو، بُني وقيس في هذا المستودع. وليس عملًا لعميل ولا يصف أي عميل. كل رقم في هذه الصفحة إما مقيس أو محسوب، وطريقته مذكورة.

سؤال التصميم

حين يتعثر نظام في سلسلة، يجب ألا تضيع الأحداث ولا أن تُطبَّق مرتين. هل تستطيع آلة حالات صغيرة بلا اعتماديات أن تمنح تسليمًا مرة واحدة على الأقل بأثر مرة واحدة على الأكثر، وأن تنجو من إعادة التشغيل ومن قناة ميتة، وأن تُظهر ذلك على سيناريوهات فشل حتمية؟

طبقة الدليل B: تنفيذ مرجعي يُتحقق منه باختبارات قابلة للتنفيذ. وهو غير موصول بأنظمة أي عميل؛ والأحجام وبيانات الاعتماد والسياق القانوني خارج ما تدّعيه هذه العيّنة.

I

القيد والتفاوت

ثلاثة أنماط فشل، ولكل منها تفاوت مكتوب.

  1. الفقد: الحدث الذي أُقرَّ لمنتجه يجب أن ينجو من إعادة التشغيل ومن قناة ميتة. القبول كتابة دائمة تحدث قبل الإقرار.

  2. التكرار: الشبكات تكرر. التسليم مرة واحدة على الأقل، فيطبّق المستقبِل معرّف الحدث مرة واحدة ويُسقط التكرار أيًّا كان من أعاد إرساله.

  3. اللاحدّية: لا يجوز أن يُعاد حدث بلا نهاية أو أن يُحتجز بلا نهاية. عدد المحاولات والعمر والنتيجة عند كل حدّ (يُرسَل إلى الرسائل الميتة، يُحفظ، لا يُسقَط أبدًا) مكتوبة سياسةً.

II

العمارة

آلة حالات بلا مؤقّتات وبلا إدخال أو إخراج خاصين بها.

  1. يوفّر المستدعي الساعة والمخزن الدائم والقناة، فتعمل الشيفرة نفسها في محاكاة حتمية وفي المتصفح، ومع مخزن وقناة حقيقيين في مشروع.

  2. الحالات: معلّق، إعادة محاولة، مركون، مُسلَّم، ميت. تُعاد الإرسالات الفاشلة بتراجع أُسّي. بعد سلسلة من الإخفاقات وفشل مسبار الصحة تُفتح الدائرة: تُركَن الأحداث في المخزن ويفحص مسبار رخيص القناة حتى تعود، ثم يُفرَّغ المتراكم بالترتيب.

  3. عزل السم: الحدث الفاشل على قناة سليمة حدث سيئ لا قناة ميتة. يُعاد ضمن ميزانيته ثم يُرسَل إلى الرسائل الميتة وتبقى الدائرة مغلقة، فلا يوقف حدث سيئ واحد الطابور خلفه أطول من تلك الميزانية.

III

التحقق

سيناريوهات حتمية ومجموعة ثابتة من الثوابت.

  1. تشمل السيناريوهات قناة متوقفة عشرين ثانية، وقناة متذبذبة، وإقرارات تضيع في 30 % من الإرسالات، وحدثًا سمًّا، وحدثًا عنيدًا، وإعادات تشغيل أثناء عطل، ومنتجًا يرسل مرتين، وكل ذلك معًا. يستخدم كل منها ساعة افتراضية ومولّدًا ببذرة: بلا مؤقّتات وبلا شبكة.

  2. في كل سيناريو تؤكد اختبارات العقد أن لا حدث مقبولًا يضيع، ولا حدث يُطبَّق مرتين، وأن ترتيب القبول محفوظ، وأن لا حدث يُرسَل أكثر مما تسمح به السياسة.

  3. جدول النتائج في التوثيق مولَّد من الشيفرة ويقارنه اختبار بها، فالدليل هو ما تفعله الشيفرة اليوم.

أين تنطبق الطبقات: هذا الطابور في طبقة الدليل B (مرجع يُتحقق منه باختبارات). أما الـ webhook الموقّع بتسليم متكافئ الأثر الذي يشغّله هذا الموقع في الإنتاج فهو في الطبقة A.

IV

النتيجة المقيسة وحدودها

محسوب من الشيفرة التي تشغّلها الاختبارات.

المقيس

تُحسب هذه الأرقام عند رسم الصفحة بتشغيل السيناريوهات التي تشغّلها اختبارات العقد. وهي حتمية: متطابقة في كل طلب.

السيناريوهات المشغَّلة
9
حافظ 9 من 9 على كل الثوابت
الأحداث المقبولة
370
عبر كل السيناريوهات
الأحداث المفقودة
0
كل حدث مقبول طُبِّق أو أُرسل إلى الرسائل الميتة أو ما زال في الطابور
أحداث طُبِّقت مرتين
0
أُسقط 56 من التكرارات

محسوب من lib/arch/scenarios.ts بالمحاكي الذي تشغّله اختبارات العقد عند رسم الصفحة. أُرسل 5 حدثًا إلى الرسائل الميتة (حُفظت ولم تُسقَط): أحداث سمّ أو عنيدة بحكم التصميم.

المفاضلات والحدود

ما الذي يكلّفه هذا النمط، وأين يحتاج إلى العميل.

  1. مرة واحدة على الأقل تعني تكرارًا

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

  2. الترتيب يكلّف التوافر

    مع الترتيب الصارم يؤخّر حدث فاشل واحد ما خلفه حتى ينجح أو يُرسَل إلى الرسائل الميتة. أوقفه للأحداث المستقلة.

  3. المخزن اعتمادية

    المتانة بقدر قوة المخزن المعطى للطابور. واختياره (قاعدة بيانات، طابور مُدار) وضماناته الخاصة تعود إلى المشروع.

قيس على

  • TypeScript · no dependencies
  • Virtual clock · seeded generator
  • Node · browser
الإحاطة الاستراتيجية