هذا المشروع تجريبي 100%. يرجى عدم محاولة تثبيت وحدة التحكم في أي بيئة إنتاج و/أو مشتركة.
الهدف من Temporal Worker Controller هو تسهيل تشغيل العمال على Kubernetes مع الاستفادة من إصدار العامل.
يمكن أن تتسبب القيود الحتمية المؤقتة في حدوث مشكلات عند طرح تغييرات رمز سير العمل أو التراجع عنها.
يتمثل النهج التقليدي لحتمية سير العمل في بوابة السلوك الجديد خلف اختبارات الإصدار. بمرور الوقت، يمكن أن تصبح عمليات التحقق هذه مصدرًا للديون الفنية، حيث إن إزالتها بأمان من قاعدة التعليمات البرمجية هي عملية دقيقة تتضمن غالبًا الاستعلام عن جميع مسارات العمل الجاري تشغيلها.
يعد إصدار العامل أسلوبًا بديلاً يتيح تنفيذ عمليات سير العمل بحيث تكون ملتصقة بالعاملين الذين يقومون بمراجعة تعليمات برمجية محددة. يسمح هذا لمؤلف سير العمل بحذف عمليات التحقق من الإصدار في التعليمات البرمجية وبدلاً من ذلك تشغيل إصدارات متعددة من العامل الخاص به بالتوازي، والاعتماد على Temporal للحفاظ على تثبيت عمليات تنفيذ سير العمل على العمال الذين يقومون بتشغيل تعليمات برمجية متوافقة.
يهدف هذا المشروع إلى توفير التشغيل الآلي الذي يبسط مسك الدفاتر حول تتبع إصدارات العامل التي لا تزال تحتوي على سير عمل نشط، وإدارة دورة حياة عمليات نشر العامل ذات الإصدار، واستدعاء واجهات برمجة التطبيقات المؤقتة لتحديث الإصدار الافتراضي بعد النشر.
تسجيل إصدارات العامل الجديدة
إنشاء موارد نشر العامل ذات الإصدار
حذف عمليات نشر العمال التي لا يمكن الوصول إليها
عمليات الطرح اليدوية والأزرق/الأخضر والتقدمية لإصدارات العمال الجديدة
التوسع التلقائي لعمليات نشر العمال
الانتقال التلقائي إلى إصدارات العامل المتوافقة
تحليل الكناري لإصدارات العامل الجديدة
الإلغاء الاختياري بعد انتهاء مهلة سير العمل على الإصدارات القديمة
تمرير إشارة ContinueAsNew
إلى سير العمل في الإصدارات القديمة
لكي يكون متوافقًا مع وحدة التحكم هذه، يجب تكوين العمال باستخدام متغيرات البيئة القياسية التالية:
WORKER_BUILD_ID
TEMPORAL_HOST_PORT
TEMPORAL_TASK_QUEUE
TEMPORAL_NAMESPACE
سيتم تعيين كل من هذه العناصر تلقائيًا في بيئة قالب pod، ولا يلزم تحديدها يدويًا خارج مواصفات TemporalWorker
.
يدير كل مورد TemporalWorker
واحدًا أو أكثر من موارد Deployment
القياسية. يدير كل نشر البودات التي بدورها تقوم باستطلاع مؤقت للمهام المثبتة على الإصدارات الخاصة بها.
مخطط انسيابي TD
wd[عامل مؤقت]
رسم بياني فرعي "أحدث/إصدار عامل افتراضي"
d5["الإصدار v5"]
rs5["مجموعة النسخ المتماثلة v5"]
p5a["جراب v5-a"]
p5b["جراب v5-ب"]
p5c["جراب v5-c"]
d5 -> rs5
rs5 -> p5a
rs5 -> p5b
rs5 -> p5c
نهاية
رسم بياني فرعي "إصدارات العامل المهملة"
d1["الإصدار v1"]
rs1["مجموعة النسخ المتماثلة v1"]
p1a["جراب v1-a"]
p1b["جراب v1-ب"]
د1 --> rs1
rs1 --> p1a
rs1 --> p1b
dN["النشر ..."]
نهاية
دبليو-> د1
wd-> dN
دبليو-> د5
ص1أ-. "إصدار الاستطلاع v1" .-> الخادم
ص1ب-. "إصدار الاستطلاع v1" .-> الخادم
ص5أ-. "إصدار الاستطلاع v5" .-> الخادم
ص5ب-. "إصدار الاستطلاع v5" .-> الخادم
p5c-. "إصدار الاستطلاع v5" .-> الخادم
الخادم ["الخادم المؤقت"]
تحميلعند نشر إصدار عامل جديد، تقوم وحدة التحكم العاملة بأتمتة تسجيل إصدار العامل الافتراضي الجديد في Temporal.
مع انتهاء تنفيذ مهام سير العمل القديمة ولم تعد هناك حاجة إلى إصدارات العامل المهملة، تقوم وحدة التحكم العاملة أيضًا بتحرير الموارد عن طريق حذف عمليات النشر القديمة.
مخطط تسلسل
ترقيم تلقائي
مشارك ديف كمطور
مشارك K8s مثل Kubernetes
Ctl المشارك كـ WorkerController
المشارك T مؤقتًا
Dev->>K8s: إنشاء TemporalWorker "foo" (الإصدار 1)
K8s-->>Ctl: قم بإعلام تم إنشاء TemporalWorker "foo".
Ctl->>K8s: إنشاء النشر "foo-v1"
Ctl->>T: قم بتسجيل الإصدار v1 كافتراضي جديد
Dev->>K8s: تحديث TemporalWorker "foo" (الإصدار 2)
K8s-->>Ctl: قم بإعلام تم تحديث TemporalWorker "foo".
Ctl->>K8s: إنشاء النشر "foo-v2"
Ctl->>T: قم بتسجيل الإصدار v2 كافتراضي جديد
Ctl->>Ctl: تشغيل الكشف عن التغيير بين الإصدارين v1 وv2
Ctl->>T: إذا كانت الإصدارات متوافقة، قم بدمج الإصدارين v1 وv2.
حلقة API المؤقتة للاستطلاع
Ctl-->>T: انتظر حتى يتم إغلاق عمليات تنفيذ سير العمل v1
نهاية
Ctl->>K8s: حذف النشر "foo-v1"
تحميلهذا المشروع في مراحله المبكرة جدًا؛ على هذا النحو، لم يتم بعد طلب مساهمات الكود الخارجي.
نرحب بتقارير الأخطاء وطلبات الميزات! يرجى رفع قضية.
يمكنك أيضًا التواصل مع @jlegrone
على Temporal Slack إذا كانت لديك أسئلة أو اقتراحات أو كنت مهتمًا بتقديم مساهمات أخرى.