
مراقبة عمليات التشغيل لحظيًا وإلغاؤها عبر نسخ الخادم
سجلات تشغيل خطوة بخطوة تصل إلى المتصفح فور كتابتها، وإلغاء يصل إلى أي خادم ينفّذ خط المعالجة.
- الشريك
- شركة استشارات تعمل عبر الحدود
- المدة
- من أكتوبر 2024 إلى يناير 2026
- بث مباشر
- 2
- التشغيل كاملًا، ومدخلات كل خطوة أو مخرجاتها
- نسخة من الخادم
- أيّ
- يصل الإلغاء إلى الخادم الذي ينفّذ العمل
- عند الاتصال
- إعادة عرض
- تُرسل السجلات السابقة قبل السجلات المباشرة
التحدي
قد تستمر خطوط المعالجة في العمل لدقائق. واحتاج المستخدمون إلى متابعة التقدم خطوة بخطوة وإيقاف أي تشغيل يسير على نحو خاطئ، مع أن المنصة تعمل على عدة نسخ من الخادم.
ما بنيناه
مُحفِّز (trigger) في قاعدة البيانات يعلن عن كل إدخال جديد في السجل، ومستمع ينقل الإدخالات إلى المتصفحات عبر WebSockets، وقناة Redis تحمل طلبات الإلغاء إلى النسخة التي تملك التشغيل ثم تعيد تأكيد نجاح الإلغاء.
ما تم تسليمه
- عرض مباشر للتشغيل ولكل خطوة عبر WebSockets
- إعادة إرسال إدخالات السجل السابقة عند اتصال المشاهد
- إلغاء يعمل عبر نسخ الخادم، ويُسجَّل التشغيل بحالة الإلغاء
نبذة عن الشريك
شريكنا شركة استشارات تعمل عبر الحدود، تتعامل فرقها مع كميات كبيرة من المستندات وجداول البيانات وقواعد البيانات والبريد الإلكتروني. أرادت الشركة منصة داخلية واحدة تبني فيها هذه الفرق خطوط معالجة البيانات ووكلاء الذكاء الاصطناعي بنفسها، بدلًا من طلب تطبيق جديد لكل حاجة. وكان على المنصة أن تعمل ضمن بيئة Microsoft 365 وAzure لدى الشريك، وأن تفصل عمل كل فريق عن غيره، وأن تنقل العمل من التجربة إلى الإنتاج عبر بيئات مضبوطة.
التحدي
انتظار دون مؤشرات
في غياب عرض مباشر للتقدم، كان المستخدمون يحدّثون الصفحات أو يبدؤون عمليات تشغيل مكررة للتأكد من أن خط المعالجة ما زال يعمل.
أكثر من خادم
قد يصل طلب عرض التشغيل أو إلغائه إلى نسخة غير النسخة التي تنفّذه.
مخرجات كبيرة
قد تكون مخرجات الخطوة أكبر من أن تُرسل في رسالة واحدة.
الأهداف
- عرض تقدم كل خطوة لحظة حدوثه
- إتاحة ما جرى سابقًا للمشاهدين الذين ينضمون متأخرين
- إلغاء التشغيل من أي جلسة، أيًّا كانت النسخة التي تنفّذه
- إيصال مخرجات الخطوات الكبيرة إلى المتصفح بأمان
دورنا
تولّت كارسنترك القيادة التقنية والبنية المعمارية ضمن فريق هندسي متعدد التخصصات، وأسهمت مباشرة في التنفيذ. بُنيت المنصة على مدى 16 شهرًا، من أكتوبر 2024 إلى يناير 2026، بواجهة خلفية مبنية على Python وFastAPI وتعمل على Azure.
النطاق والجدول الزمني
بُني مُحفِّز السجل ونقاط نهاية البث وآلية الإلغاء بين ديسمبر 2024 وأغسطس 2025.

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

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

الأدوات والتقنيات
| الأداة | الغرض |
|---|---|
| PostgreSQL LISTEN وNOTIFY | إشعارات تغيّر السجلات |
| asyncpg | اتصال استماع أصلي بقاعدة البيانات |
| Redis للنشر والاشتراك | طلبات الإلغاء وتأكيداته |
| FastAPI WebSockets | البث إلى المتصفح |
| Alembic | ترحيل قاعدة البيانات لإنشاء المُحفِّز |
ما تم تسليمه
- بث عبر WebSocket
- 2
- قناة إلغاء مشتركة
- 1
- المستمعون
- عند الطلب
- المخرجات الكبيرة
- على دفعات
- سجلات مباشرة للتشغيل وللخطوات في المتصفح، قابلة لإعادة العرض
- إلغاء يعمل عبر نسخ الخادم المختلفة
- مستمعون لا يعملون إلا حين يتابع أحدٌ التشغيل
- إيصال مخرجات الخطوات الكبيرة على دفعات
لماذا يهم ذلك
تشغيل أي نظام يشمل رؤية ما يفعله وإيقافه عند الحاجة. والتصميم لعدة نسخ من الخادم منذ البداية يجنّب سلوكًا لا يعمل إلا على خادم واحد.
إذا كانت مؤسستكم تخطط لمنصة من هذا النوع، أو تحتاج إلى تصميم جزء محدد منها وتنفيذه، يسعدنا أن نناقش ذلك معكم.