English

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

تشغيل شيفرة المستخدمين في أجهزة Firecracker الافتراضية المصغّرة وتحليل المستندات في خدمة مستقلة

يحصل كل تشغيل لشيفرة Python يكتبها المستخدمون على جهاز Firecracker افتراضي مصغّر (microVM) خاص به على Azure، بذاكرة ثابتة ودون شبكة افتراضيًا ودون أي بيانات سرية للمنصة، وتُحلَّل المستندات في خدمة خاصة بها.

الشريك
شركة استشارية متعددة الجنسيات
المدة
من أكتوبر 2024 إلى يناير 2026
جهاز افتراضي مصغّر لكل تشغيل
1
يُنشأ للتشغيل ويُتخلّص منه بعده
ذاكرة لكل تشغيل
⁦1 GB⁩
يحددها الجهاز الافتراضي المصغّر، فلا يمكن للشيفرة تجاوزها
الشبكة افتراضيًا
معطّلة
قائمة سماح حين تحتاج إليها خطوة ما

التحدي

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

ما بنيناه

خدمة لتنفيذ الشيفرة تشغّل كل مهمة في جهاز Firecracker افتراضي مصغّر خاص بها على Azure Virtual Machine Scale Set، يُستعاد من لقطة (snapshot) بـ ⁦1 vCPU⁩ و⁦1 GB⁩ من الذاكرة، دون شبكة افتراضيًا ودون بيانات سرية للمنصة، وخدمة تحليل مبنية على Docling تقبل الملفات أو عناوين URL وتعيد نصًا منظَّمًا.

ما تم تسليمه

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

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

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

التحدي

لا غنى عن المنطق المخصص

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

شيفرة المستخدمين غير موثوقة

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

موارد مشتركة

أي مهمة خارجة عن السيطرة داخل الواجهة الخلفية الرئيسية ستؤثر في جميع مستخدمي المنصة.

المستندات ليست بيانات

يجب تحويل ملفات PDF والملفات المكتبية إلى نص منظَّم قبل أن يتمكن خط معالجة أو قاعدة معرفة من استخدامها.

الأهداف

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

دورنا

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

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

بُنيت خدمة تنفيذ الشيفرة بين مارس ويوليو 2025، وخدمة تحليل المستندات بين أبريل وأكتوبر 2025.

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

المنهجية

جهاز افتراضي مصغّر لكل تشغيل

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

حدود لا تستطيع الشيفرة تجاوزها

لكل جهاز افتراضي مصغّر ⁦1 vCPU⁩ و⁦1 GB⁩ من الذاكرة، فلا يمكن لأي تشغيل أن يستهلك أكثر من حصته. ونظام الملفات الجذري للقراءة فقط، وتعمل الشيفرة بمستخدم لا يملك صلاحيات الجذر (root)، والشبكة معطّلة ما لم تسمح خطوة بمضيفين محددين، ولكل تشغيل حد زمني.

القبول حسب السعة

تعرف الخدمة عدد الأجهزة الافتراضية المصغّرة التي يستوعبها كل مضيف. وتنتظر الطلبات الإضافية حتى تتوفر خانة شاغرة، وتضيف مجموعة التوسعة (scale set) مضيفين حين تكبر قائمة الانتظار.

التنفيذ

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

الأجهزة المضيفة

يحتاج Firecracker إلى المحاكاة الافتراضية على مستوى العتاد، لذلك فالأجهزة المضيفة مجموعة Azure Virtual Machine Scale Set من أجهزة سلسلة Dsv5، وهي تدعم المحاكاة الافتراضية المتداخلة (nested virtualization). ويُشغَّل كل جهاز افتراضي مصغّر عبر Firecracker jailer.

تنفيذ الشيفرة

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

تحليل المستندات

تقبل الخدمة محتوى ملف أو قائمة من عناوين URL، وتتحقق من العناوين وترفض العناوين الخاصة والداخلية، وتحتفظ بذاكرة تخزين مؤقت للمستندات المحلَّلة مفهرسة ببصمة المحتوى (hash)، مع حد للحجم ومدة صلاحية، وتستخدم Docling لإنتاج نص منظَّم.

الاستخدام في المنصة

تستخدم خطوة التحويل بشيفرة Python خدمة التنفيذ. وتستخدم خطوة قراءة المستندات وأدوات تحميل المعرفة خدمة التحليل.

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

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

الأداةالغرض
Firecrackerجهاز افتراضي مصغّر لكل تشغيل
Azure Virtual Machine Scale Setsأجهزة مضيفة تدعم المحاكاة الافتراضية المتداخلة
FastAPI WebSocketsواجهات الخدمات
ijsonتحليل JSON تدفقيًا
Doclingتحليل المستندات
Dockerحاوية خدمة التحليل

ما تم تسليمه

جهاز افتراضي مصغّر لكل تشغيل
1
ذاكرة لكل تشغيل
⁦1 GB⁩
الشبكة افتراضيًا
معطّلة
خدمتان
2
  • تنفيذ معزول لشيفرة Python التي يكتبها المستخدمون في أجهزة Firecracker الافتراضية المصغّرة
  • حدود للذاكرة والشبكة والوقت تُفرض من خارج شيفرة المستخدم
  • خدمة لتحليل المستندات لخطوط المعالجة وقواعد المعرفة
  • نقل بيانات متدفق وعلى دفعات بين الخدمات

لماذا يهم ذلك

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

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