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

מפתח שירות: 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), תוכלו לפצל שירותים הצורכים משאבים משמעותיים בהתאם לדרישות התרחיש. ניתן להשיג זאת בדרכים הבאות:
my-plugin:process, עבור תצורת משתנה הסביבה, וספקו תיעוד עבורו.app.serving() כדי לבדוק את הסביבה ולקבוע אם הצומת הנוכחי צריך לספק שירות עסקי מסוים בהתבסס על משתנה הסביבה.