logologo
البدء
الدليل
التطوير
الإضافات
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
البدء
الدليل
التطوير
الإضافات
API
logologo
وضع التكتل
نظرة عامة
التحضير
نشر Kubernetes
عملية التشغيل
تقسيم الخدمات
مرجع التطوير
Previous Pageعملية التشغيل
Next Pageمرجع التطوير
إشعار الترجمة بالذكاء الاصطناعي

تمت ترجمة هذه الوثائق تلقائيًا بواسطة الذكاء الاصطناعي.

#تقسيم الخدمات v1.9.0+

#مقدمة

عادةً، تعمل جميع خدمات تطبيق NocoBase ضمن نفس مثيل Node.js. مع ازدياد تعقيد وظائف التطبيق تدريجياً مع نمو الأعمال، قد تؤثر بعض الخدمات التي تستغرق وقتاً طويلاً على الأداء العام.

لتحسين أداء التطبيق، يدعم NocoBase تقسيم خدمات التطبيق لتشغيلها على عقد مختلفة في وضع التجميع (Cluster Mode). يمنع هذا النهج مشاكل أداء خدمة واحدة من التأثير على قدرة التطبيق بأكمله على الاستجابة لطلبات المستخدمين.

من ناحية أخرى، يتيح هذا أيضاً التوسع الأفقي المستهدف لخدمات معينة، مما يحسن استخدام موارد التجميع.

عند نشر NocoBase في تجميع، يمكن تقسيم الخدمات المختلفة ونشرها لتعمل على عقد مختلفة. يوضح الرسم التخطيطي التالي هيكل التقسيم:

20250803214857

#الخدمات التي يمكن تقسيمها

#سير العمل غير المتزامن

مفتاح الخدمة: workflow:process

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

#مهام غير متزامنة أخرى على مستوى المستخدم

مفتاح الخدمة: async-task:process

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

#كيفية تقسيم الخدمات

يتم تقسيم الخدمات المختلفة إلى عقد مختلفة عن طريق تهيئة متغير البيئة WORKER_MODE. يمكن تهيئة متغير البيئة هذا وفقاً للقواعد التالية:

  • WORKER_MODE=<فارغ>: عند عدم التهيئة أو عند تهيئته كفارغ، يكون وضع العامل (worker mode) هو نفسه وضع المثيل الفردي الحالي، حيث يستقبل جميع الطلبات ويعالج جميع المهام. هذا متوافق مع التطبيقات التي لم يتم تهيئتها مسبقاً.
  • WORKER_MODE=! : وضع العامل هو معالجة الطلبات فقط، وعدم معالجة أي مهام.
  • WORKER_MODE=workflow:process,async-task:process: عند تهيئته بمعرف خدمة واحد أو أكثر (مفصولة بفواصل إنجليزية)، يكون وضع العامل هو معالجة المهام الخاصة بهذه المعرفات فقط، وعدم معالجة الطلبات.
  • WORKER_MODE=*: وضع العامل هو معالجة جميع المهام الخلفية، بغض النظر عن الوحدة، ولكن لا يعالج الطلبات.
  • WORKER_MODE=!,workflow:process: وضع العامل هو معالجة الطلبات، ومعالجة المهام الخاصة بمعرف معين في نفس الوقت.
  • WORKER_MODE=-: وضع العامل هو عدم معالجة أي طلبات أو مهام (هذا الوضع مطلوب داخل عملية العامل).

على سبيل المثال، في بيئة K8S، يمكن للعقد ذات وظيفة التقسيم المتماثلة استخدام نفس تهيئة متغير البيئة، مما يسهل التوسع الأفقي لنوع معين من الخدمات.

#أمثلة التهيئة

#عقد متعددة بمعالجة منفصلة

لن نفترض وجود ثلاث عقد: node1 و node2 و node3. يمكن تهيئتها بالطرق التالية:

  • node1: تعالج طلبات واجهة المستخدم (UI) فقط، تهيئتها WORKER_MODE=! .
  • node2: تعالج مهام سير العمل فقط، تهيئتها WORKER_MODE=workflow:process.
  • node3: تعالج المهام غير المتزامنة فقط، تهيئتها WORKER_MODE=async-task:process.

#عقد متعددة بمعالجة مختلطة

لن نفترض وجود أربع عقد: node1 و node2 و node3 و node4. يمكن تهيئتها بالطرق التالية:

  • node1 و node2: تعالج جميع الطلبات العادية، تهيئتها WORKER_MODE=!، ويقوم موازن التحميل (load balancer) بتوزيع الطلبات تلقائياً على هاتين العقدتين.
  • node3 و node4: تعالج جميع المهام الخلفية الأخرى، تهيئتها WORKER_MODE=*.

#مرجع للمطورين

عند تطوير إضافات الأعمال (plugins)، يمكنك تقسيم الخدمات التي تستهلك موارد كبيرة بناءً على متطلبات السيناريو. يمكن تحقيق ذلك بالطرق التالية:

  1. حدد معرف خدمة جديداً، على سبيل المثال my-plugin:process، لتهيئة متغير البيئة، وقدم وثائق له.
  2. في منطق الأعمال الخاص بالجانب الخادم للإضافة (plugin)، استخدم واجهة app.serving() للتحقق من البيئة وتحديد ما إذا كان يجب على العقدة الحالية توفير خدمة معينة بناءً على متغير البيئة.
const MY_PLUGIN_SERVICE_KEY = 'my-plugin:process';
// في كود الجانب الخادم للإضافة
if (this.app.serving(MY_PLUGIN_SERVICE_KEY)) {
  // معالجة منطق الأعمال لهذه الخدمة
} else {
  // عدم معالجة منطق الأعمال لهذه الخدمة
}