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הפניה למפתחים
TIP

מסמך זה תורגם על ידי בינה מלאכותית. לכל אי דיוק, אנא עיין בגרסה האנגלית

#פיצול שירותים v1.9.0+

#מבוא

בדרך כלל, כל השירותים של יישום NocoBase פועלים באותו מופע (instance) של Node.js. כאשר הפונקציונליות בתוך היישום הופכת מורכבת יותר עם התפתחות העסק, חלק מהשירותים שצורכים זמן רב עלולים להשפיע על הביצועים הכוללים.

כדי לשפר את ביצועי היישום, NocoBase תומך בפיצול שירותי היישום להרצה על צמתים (nodes) שונים במצב אשכול (cluster mode). הדבר מונע מבעיות ביצועים של שירות בודד להשפיע על יכולת היישום כולו להגיב לבקשות משתמשים.

מצד שני, זה גם מאפשר הרחבה אופקית (horizontal scaling) ממוקדת של שירותים ספציפיים, ובכך לשפר את ניצול המשאבים של האשכול.

בעת פריסת NocoBase באשכול, ניתן לפצל ולפרוס שירותים שונים להרצה על צמתים שונים. התרשים הבא ממחיש את מבנה הפיצול:

20250803214857

#אילו שירותים ניתן לפצל

#תהליך עבודה אסינכרוני

מפתח שירות: workflow:process

תהליכי עבודה במצב אסינכרוני ייכנסו לתור לביצוע לאחר הפעלתם. תהליכי עבודה אלו יכולים להיחשב כמשימות רקע, ובדרך כלל משתמשים אינם צריכים להמתין לקבלת התוצאות. במיוחד עבור תהליכים מורכבים וגוזלי זמן עם נפח הפעלה גבוה, מומלץ לפצל אותם להרצה על צמתים עצמאיים.

#משימות אסינכרוניות אחרות ברמת משתמש

מפתח שירות: async-task:process

זה כולל משימות שנוצרו על ידי פעולות משתמש כגון ייבוא וייצוא אסינכרוניים. במקרים של נפחי נתונים גדולים או ריבוי פעולות במקביל (concurrency), מומלץ לפצל אותן להרצה על צמתים עצמאיים.

#כיצד לפצל שירותים

פיצול שירותים שונים לצמתים שונים מתבצע באמצעות הגדרת משתנה הסביבה WORKER_MODE. משתנה סביבה זה יכול להיות מוגדר לפי הכללים הבאים:

  • WORKER_MODE=<empty>: כאשר לא מוגדר או מוגדר כריק, מצב העבודה זהה למצב המופע הבודד הנוכחי, מקבל את כל הבקשות ומטפל בכל המשימות. זה תואם ליישומים שלא הוגדרו בעבר.
  • WORKER_MODE=! : מצב העבודה הוא לטפל בבקשות בלבד, ולא לטפל באף משימה.
  • WORKER_MODE=workflow:process,async-task:process: מוגדר עם מזהה שירות אחד או יותר (מופרדים בפסיקים באנגלית), מצב העבודה הוא לטפל במשימות עבור מזהים אלו בלבד, ולא לטפל בבקשות.
  • WORKER_MODE=*: מצב העבודה הוא לטפל בכל משימות הרקע, ללא קשר למודול, אך לא לטפל בבקשות.
  • WORKER_MODE=!,workflow:process: מצב העבודה הוא לטפל בבקשות, ובמקביל לטפל במשימות עבור מזהה ספציפי.
  • WORKER_MODE=-: מצב העבודה הוא לא לטפל באף בקשה או משימה (מצב זה נדרש בתוך תהליך ה-worker).

לדוגמה, בסביבת 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=*.

#הפניה למפתחים

בעת פיתוח תוספים עסקיים (business plugins), תוכלו לפצל שירותים הצורכים משאבים משמעותיים בהתאם לדרישות התרחיש. ניתן להשיג זאת בדרכים הבאות:

  1. הגדירו מזהה שירות חדש, לדוגמה, my-plugin:process, עבור תצורת משתנה הסביבה, וספקו תיעוד עבורו.
  2. בלוגיקה העסקית בצד השרת של ה-תוסף, השתמשו בממשק app.serving() כדי לבדוק את הסביבה ולקבוע אם הצומת הנוכחי צריך לספק שירות עסקי מסוים בהתבסס על משתנה הסביבה.
const MY_PLUGIN_SERVICE_KEY = 'my-plugin:process';
// בקוד צד השרת של התוסף
if (this.app.serving(MY_PLUGIN_SERVICE_KEY)) {
  // טפלו בלוגיקה העסקית עבור שירות זה
} else {
  // אל תטפלו בלוגיקה העסקית עבור שירות זה
}