castomFLOW
افتح castomFLOW

تشغيلات تستحق الثقة

لا أحد ينتبه إلى الأتمتة حتى ترسل شيئاً مرتين

عندها ينتبه الجميع. الآليات الأربع في هذه الصفحة موجودة لأن أعطال هذا النوع من البرمجيات هي دائماً الأعطال الأربعة نفسها، وكلها يمكن تفاديها بالتصميم لا بالعناية.

جرّب المحاكاة قبل النشر

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

لا شيء يخرج من المبنى. لا بريد يُرسل، ولا فاتورة تُصدر، ولا محاولة خصم، ولا صف يُكتب. تُسجَّل النداءات الخارجية كنوايا، مع الحمولة التي كان ستُرسل، لترى إن كان التعيين صحيحاً قبل أن يصبح مشكلة أحد ما.

المحاكاة هي وسيلتك للإجابة عن السؤال الذي يمنع الناس من تشغيل الأتمتة: ماذا سيفعل هذا فعلاً؟

محاكاة · الطلب 88 214لم يُرسل شيء
  • 1التحقق من العنوانتطابق. كان سيُكتب 6 حقول.
  • ?شرططلب يتجاوز 1 000 زلوتي؟ لا — 289,00 زلوتي. تم اتخاذ المسار القصير.
  • 3الفاتورةسيُرسَل POST إلى نظام الفوترة. الحمولة معروضة بالكامل.
  • !تم الالتقاط هناتم ربط معدل ضريبة القيمة المضافة من الحقل الخطأ. وُجد في محاكاة بدلًا من صندوق بريد المحاسب.

المُرسَل: لا شيءالمُحصَّل: لا شيء

كل تشغيل يسير على الإصدار الذي دخل إليه

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

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

عمليات التشغيل الجديدة تحصل على الإصدار الجديد من لحظة النشر. الإصدار الذي يعمل عليه كل تشغيل مكتوب على التشغيل نفسه، لذا فالسؤال عن السلوك في مارس له إجابة في سبتمبر.

التعديل أثناء التشغيل الحيv4 → v5
  • 1قبل2 918 تشغيلًا جارٍ، كلها على v4. بعضها في انتظار يومين.
  • 2نشر v5إعادة ترتيب خطوتين، وإعادة صياغة رسالة واحدة.
  • 3بعدتلك الـ 2 918 تُكمل v4. كل ما يبدأ من 11:40 يعمل على v5.
  • §لا أحدتلقّى نصف سير عمل واحد ونصف آخر.

الإصدار مسجَّل على كل تشغيلالإصدارات القديمة محفوظة

إعادة محاولة لا يمكن أن تُرسِل مرتين

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

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

الاستدعاءات الصادرة إلى الأنظمة التي تدعم مفاتيح التكرار تحمل مفتاحًا مشتقًا من التشغيل والخطوة، ليتمكن الطرف الآخر أيضًا من التعرف على التكرار.

قُتل العامل في منتصف الإرسالتم الاستعادة
  • 1تبدأ الخطوة 5أرسل إشعار الشحن.
  • ✕يتوقف العاملنشر إصدار. لم يُسجَّل شيء.
  • 2تم الالتقاطيجد عامل آخر التشغيل ما زال على الخطوة 5.
  • ✓أُرسلت مرة واحدةتلقّى العميل بريدًا إلكترونيًا واحدًا، لا اثنين.

تُسجَّل الآثار مع التقدُّممفتاح تكرار لكل تشغيل وخطوة

سجل مكتوب ليقرأه إنسان

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

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

تُجمع التشغيلات الفاشلة في مكان واحد مع تجميع السبب، فتتحول «إحدى وأربعون فشلة في ليلة واحدة» إلى «مورّد واحد أعاد 503 لمدة تسع دقائق» بدلًا من إحدى وأربعين تحقيقًا منفصلًا.

في ليلة واحدة، مجمّعة41 فشلة
  • 1سبب واحدأعادت واجهة برمجة المورّد 503 بين 02:41 و02:50.
  • 2ما الذي حدثأُعيدت محاولة الـ41 كلها؛ ونجحت 39 في المحاولة الثانية.
  • 3المتبقّيتوقفت اثنتان وتنتظران تدخّل شخص. كلتاهما مدرجة مع الصف الذي فشل.
  • §ليست إحدى وأربعينتحقيقًا. واحد فقط، وقرار بشأن سجلّين.

بيانات الاعتماد محجوبةالإصدار مسجّل

ما لا نزعمه

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

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

بشأن الانتظار: التشغيل الذي ينتظر يومين هو wake_at على التشغيل نفسه، وليس مهمة جالسة في طابور. لهذا يمكن لسير عمل أن يحمل مئة ألف تشغيل في انتظار ثلاثة أسابيع دون أي تكلفة، ولذلك لا يتعين عليك التفكير في عدد التشغيلات المنتظرة حاليًا.

التشغيل الذي لا تفكر فيه أبدًا هو الذي نجح.