sbarbase
المحتويات

التجهيز

ما هو

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

لماذا

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

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

كيف بنيناه

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

سجّل أولًا، ثم نفّذ، ثم أغلق. النتيجة المجهولة لا تُنفَّذ مرتين بالتخمين.

التبادل نفسه في مخطط تسلسلي:

تسلسل بين واجهة الإدارة والفهرس والعامل بقفله الحصري وملف الإيصال وDocker مع SQL: مهمة جديدة، ثم استلامها، ثم كتابة الإيصال وتثبيته، ثم الأثر المسيّج، ثم نتيجة معروفة تُسجَّل مع إتمام المهمة، ثم استهلاك الإيصال؛ وبعد الانهيار يُغلق الإيصال المكتمل ويتوقف المجهول

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

الأجزاء بكلمات بسيطة (وكل مصطلح منها في المسرد أيضًا):

الكود: lab/worker.py، lab/effect_receipt.py، lab/effect_lease.py، lab/provision.py، lab/sql_operation_fence.py، lab/hba_authority.py، lab/hba_generation.py، lab/migrate-generation.py. أداة الفحص للقراءة فقط هي lab/inspect-provisioning.py.

الحدود

للتعمق

عدّل على GitHub