محتويات الدورة
معمارية البرمجيات
الأساسيات: الوعود والبنية والملكية
التفاعلات: التوزيع والفشل والتشغيل
التطور: السعة والانتقال والتحقق والمراجعة

معمارية البرمجيات / التفاعلات: التوزيع والفشل والتشغيل / الدرس 9

عالج الاتساق عبر الحدود دون ذرية متوهمة

اشرح فجوات الكتابة المزدوجة وصندوق الصادر الذري وتعويض العمل ضمن حجز افتراضي.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • حدّد نوافذ الفشل بين كتابة دائمة ورسالة خارجية.
  • صمّم حالات عمل وتعويضا صريحين بدلا من افتراض تراجع موزع.

لا تصنع واجهتان ناجحتان معاملة واحدة

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

سجّل نية النشر مع تغيير العمل

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

text بروتوكول مقترح لصندوق الصادر
BEGIN local transaction
  insert reservation r-18 as confirmed
  insert outbox event e-18 for reservation r-18
COMMIT
relay publishes e-18 later
consumer records e-18 before applying its repeat-sensitive effect

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

نمذج الحالات الوسيطة بدلا من إخفائها

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

التعويض إجراء عمل جديد

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

yaml جدول جزئي لانتقالات العمل
awaiting_payment:
  payment_succeeded: confirmed
  payment_failed: cancellation_requested
cancellation_requested:
  seat_released: cancelled
  release_failed: requires_review
confirmed:
  duplicate_payment_succeeded: confirmed

يبقي النجاح المكرر الحالة مؤكدة. تحتاج requires_review مالكا في التنفيذ. ويحذف الجدول قواعد كثيرة خاصة بالمنتج فلا يُعد بروتوكول دفع كاملا.

اختبر نوافذ الانهيار ومسار المطابقة

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

الأخطاء الشائعة وإصلاحها

لحجز مثبت لا يوجد حدث إشعار.

لماذا يحدث؟
كانت كتابة العمل والنشر مستقلتين معرضتين للانهيار.
كيف تصلحه؟
خزّن نية النشر في الحد الذري المقصود.
كيف تتجنب تكراره؟
اختبر نافذة ما بعد التثبيت وقبل النشر.

ينتج حدث الصندوق الأثر نفسه مرتين.

لماذا يحدث؟
افتُرض استحالة إعادة المُرحّل.
كيف تصلحه؟
استخدم منع تكرار المستهلك أو أثرا متكرر الهوية.
كيف تتجنب تكراره؟
ضمّن انهيار المُرحّل بعد النشر الناجح.

يوصف التعويض بأنه محو التاريخ.

لماذا يحدث؟
اختلط عكس العمل بالتراجع المحلي.
كيف تصلحه؟
نمذج إجراء جديدا مملوكا وحالات فشله.
كيف تتجنب تكراره؟
وثّق الآثار غير المعكوسة قبل ترتيب العمل.

اختبر فهمك

1. لماذا يعرّض تعليم السجل مرسلا قبل النشر الحدث للضياع؟

اعرض الحل المشروح

يترك الانهيار بعد التعليم وقبل النشر السجل خارج المعلق فلا يعيده المُرحّل. يمنع النشر أولا هذه الفجوة لكنه يسمح بالتكرار إذا فشل التعليم. اختر تسليما مرة على الأقل بأثر مستهلك آمن أو آلية مثبتة؛ فالترتيب وحده لا يضمن عدم الفقد وعدم التكرار معا.

2. يفشل تعويض تحرير المقعد مرارا. ماذا ينبغي أن يحدث؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • يحمي الصندوق نية نشر محلية، لا كل أثر لاحق.
  • يحتاج التعويض حالة وملكية واستعادة صريحة.

المراجع الرسمية