English

دراسة الحالة 10 · خدمات دورة الحياة الهندسية

مراقبة عمليات التشغيل لحظيًا وإلغاؤها عبر نسخ الخادم

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

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

التحدي

قد تستمر خطوط المعالجة في العمل لدقائق. واحتاج المستخدمون إلى متابعة التقدم خطوة بخطوة وإيقاف أي تشغيل يسير على نحو خاطئ، مع أن المنصة تعمل على عدة نسخ من الخادم.

ما بنيناه

مُحفِّز (trigger) في قاعدة البيانات يعلن عن كل إدخال جديد في السجل بمعرّفه، ومستمع ينقل الإدخالات إلى المتصفحات عبر WebSockets بترتيبها التسلسلي، وقناة Redis تحمل طلبات الإلغاء إلى النسخة التي تملك التشغيل، وتؤكدها هذه النسخة.

ما تم تسليمه

  • عرض مباشر للتشغيل ولكل خطوة عبر WebSockets
  • إعادة عرض الإدخالات السابقة عند اتصال المشاهد، دون فجوات أو تكرار
  • إلغاء يعمل عبر نسخ الخادم، ويُؤكَّد ويُسجَّل بحالة ملغى

نبذة عن الشريك

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

التحدي

انتظار دون مؤشرات

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

أكثر من خادم

قد يصل طلب عرض التشغيل أو إلغائه إلى نسخة غير النسخة التي تنفّذه.

الانضمام أثناء التشغيل

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

مخرجات كبيرة

قد تكون مخرجات الخطوة أكبر من أن تُرسل في رسالة واحدة.

تعطّل النسخ

لا يجوز أن يبقى تشغيل توقفت نسخته في حالة قيد التشغيل إلى ما لا نهاية.

الأهداف

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

دورنا

تولّت كارسنترك القيادة التقنية والبنية المعمارية ضمن فريق هندسي متعدد التخصصات، وأسهمت مباشرة في التنفيذ. بُنيت المنصة على مدى 16 شهرًا، من أكتوبر 2024 إلى يناير 2026، بواجهة خلفية مبنية على Python وFastAPI وتعمل على Azure.

النطاق والجدول الزمني

بُني مُحفِّز السجل ونقاط نهاية البث وآلية الإلغاء بين ديسمبر 2024 وأغسطس 2025.

الجدول الزمني للتسليم من سجل المشروع، مقارنةً بمدة بناء المنصة كاملة
الجدول الزمني للتسليم من سجل المشروع، مقارنةً بمدة بناء المنصة كاملة

المنهجية

قاعدة البيانات تعلن عن التغييرات

يرسل مُحفِّز PostgreSQL على جدول سجل التشغيل رسالة NOTIFY تحمل معرّف الإدخال الجديد. ويمكن لأي نسخة أن تستمع إليها وتقرأ الإدخال بمعرّفه، فتبقى الرسائل أصغر بكثير من حد الحمولة في PostgreSQL البالغ 8,000 بايت.

ترقيم كل إدخال

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

قناة مشتركة للتحكم

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

التنفيذ

نظرة عامة على البنية المعمارية
نظرة عامة على البنية المعمارية

بث التشغيل

ترسل نقطة نهاية WebSocket خاصة بكل تشغيل الإدخالات المخزّنة، ثم الإدخالات المباشرة، بترتيبها التسلسلي، وتُغلق عند انتهاء التشغيل. ويبدأ المستمع عند اشتراك أول مشاهد ويتوقف عند مغادرة آخرهم.

بث الخطوة

ترسل نقطة نهاية ثانية مدخلات خطوة مختارة أو مخرجاتها، مقسّمة إلى دفعات محدودة الحجم.

الإلغاء

تحتفظ كل نسخة بسجل لعمليات التشغيل التي تنفّذها، ولا تستمع لطلبات الإلغاء إلا ما دامت لديها عمليات تشغيل نشطة.

عمليات التشغيل المتروكة

ترسل كل نسخة نبضات دورية (heartbeat) لعمليات التشغيل النشطة لديها. وتسجّل أداة مسح دورية التشغيل على أنه فاشل حين تتوقف نسخته عن إرسالها.

طريقة العمل خطوةً بخطوة
طريقة العمل خطوةً بخطوة

الأدوات والتقنيات

الأداةالغرض
PostgreSQL LISTEN وNOTIFYإشعارات تغيّر السجلات
asyncpgاتصال استماع أصلي بقاعدة البيانات
النشر والاشتراك في Redisطلبات الإلغاء وتأكيداته
FastAPI WebSocketsالبث إلى المتصفح
Alembicترحيل قاعدة البيانات لإنشاء المُحفِّز

ما تم تسليمه

مسارات بث عبر WebSocket
2
قناة إلغاء مشتركة
1
إعادة العرض
بالترتيب
المستمعون
عند الطلب
  • سجلات مباشرة للتشغيل وللخطوات في المتصفح، قابلة لإعادة العرض بالترتيب
  • إلغاء يعمل عبر نسخ الخادم المختلفة، مع تأكيده
  • مستمعون لا يعملون إلا حين يتابع أحدٌ التشغيل
  • اكتشاف عمليات التشغيل المتروكة وتسجيلها على أنها فاشلة

لماذا يهم ذلك

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

إذا كانت مؤسستكم تخطط لمنصة من هذا النوع، أو تحتاج إلى تصميم جزء محدد منها وتسليمه، يسعدنا أن نناقش ذلك معكم.