logologo
התחלה
מדריך
פיתוח
תוספים
API
בית
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
התחלה
מדריך
פיתוח
תוספים
API
בית
logologo

ריבוי יישומים

סקירה כללית
מצב זיכרון משותף
מצב ריבוי סביבות
מרחבים מרובים
Previous Pageמצב זיכרון משותף
Next Pageמרחבים מרובים
הודעת תרגום AI

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

#pkg: '@nocobase/plugin-app-supervisor'

#מצב ריבוי סביבות

#מבוא

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

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

ברמת הפריסה, סביבות שונות יכולות לרוץ בתהליכים נפרדים, להיפרס כמיכלי Docker שונים, או להתקיים כפריסות Kubernetes מרובות, מה שמאפשר התאמה גמישה לתשתיות בקנה מידה וארכיטקטורות שונות.

#פריסה

במצב פריסה היברידית מרובת סביבות:

  • אפליקציית הכניסה (Supervisor) אחראית על ניהול מאוחד של אפליקציות ומידע על סביבות.
  • אפליקציות העבודה (Worker) משמשות כסביבות הרצה עסקיות בפועל.
  • הגדרות האפליקציה והסביבה נשמרות במטמון Redis.
  • סנכרון פקודות וסטטוסים בין אפליקציית הכניסה לאפליקציות העבודה מתבצע באמצעות תקשורת Redis.

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

#תלויות ארכיטקטורה

לפני הפריסה, אנא הכינו את השירותים הבאים:

  • Redis

    • שמירת הגדרות אפליקציה וסביבה במטמון.
    • משמש כערוץ תקשורת פקודות בין אפליקציית הכניסה לאפליקציות העבודה.
  • בסיס נתונים (Database)

    • שירותי בסיס הנתונים אליהם צריכות להתחבר אפליקציית הכניסה ואפליקציות העבודה.

#אפליקציית כניסה (Supervisor)

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

הסבר על הגדרת משתני סביבה עבור אפליקציית הכניסה:

# מצב אפליקציה
APP_MODE=supervisor
# שיטת גילוי אפליקציות
APP_DISCOVERY_ADAPTER=remote
# שיטת ניהול תהליכי אפליקציה
APP_PROCESS_ADAPTER=remote
# Redis למטמון הגדרות אפליקציה וסביבה
APP_SUPERVISOR_REDIS_URL=
# שיטת תקשורת פקודות אפליקציה
APP_COMMAND_ADPATER=redis
# Redis לתקשורת פקודות אפליקציה
APP_COMMAND_REDIS_URL=

#אפליקציית עבודה (Worker)

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

הסבר על הגדרת משתני סביבה עבור אפליקציית עבודה:

# מצב אפליקציה
APP_MODE=worker
# שיטת גילוי אפליקציות
APP_DISCOVERY_ADAPTER=remote
# שיטת ניהול תהליכי אפליקציה
APP_PROCESS_ADAPTER=local
# Redis למטמון הגדרות אפליקציה וסביבה
APP_SUPERVISOR_REDIS_URL=
# שיטת תקשורת פקודות אפליקציה
APP_COMMAND_ADPATER=redis
# Redis לתקשורת פקודות אפליקציה
APP_COMMAND_REDIS_URL=
# מזהה סביבה
ENVIRONMENT_NAME=
# URL לגישה לסביבה
ENVIRONMENT_URL=
# URL לגישת פרוקסי לסביבה
ENVIRONMENT_PROXY_URL=

#דוגמת Docker Compose

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

networks:
  nocobase:
    driver: bridge

services:
  redis:
    networks:
      - nocobase
    image: redis/redis-stack-server:latest
  supervisor:
    container_name: nocobase-supervisor
    image: nocobase/nocobase:alpha
    restart: always
    platform: linux/amd64
    networks:
      - nocobase
    depends_on:
      - redis
    environment:
      - DB_DIALECT=postgres
      - DB_HOST=postgres
      - DB_PORT=5432
      - DB_DATABASE=nocobase_supervisor
      - DB_USER=postgres
      - DB_PASSWORD=postgres
      - TZ=Asia/Shanghai
      - APP_MODE=supervisor
      - APP_DISCOVERY_ADAPTER=remote
      - APP_PROCESS_ADAPTER=remote
      - APP_SUPERVISOR_REDIS_URL=redis://redis:6379/0
      - APP_COMMAND_ADAPTER=redis
      - APP_COMMAND_REDIS_URL=redis://redis:6379/0
      - APPEND_PRESET_BUILT_IN_PLUGINS=@nocobase/plugin-app-supervisor
    volumes:
      - ./storage-supervisor:/app/nocobase/storage
    ports:
      - '14000:80'
  worker_a:
    container_name: nocobase-worker-a
    image: nocobase/nocobase:alpha
    restart: always
    platform: linux/amd64
    networks:
      - nocobase
    depends_on:
      - redis
    environment:
      - DB_DIALECT=postgres
      - DB_HOST=postgres
      - DB_PORT=5432
      - DB_DATABASE=nocobase_worker_a
      - DB_USER=postgres
      - DB_PASSWORD=postgres
      - TZ=Asia/Shanghai
      - APP_MODE=worker
      - APP_DISCOVERY_ADAPTER=remote
      - APP_PROCESS_ADAPTER=local
      - APP_SUPERVISOR_REDIS_URL=redis://redis:6379/0
      - APP_COMMAND_ADAPTER=redis
      - APP_COMMAND_REDIS_URL=redis://redis:6379/0
      - ENVIRONMENT_NAME=env_a
      - ENVIRONMENT_URL=http://localhost:15000
      - ENVIRONMENT_PROXY_URL=http://worker_a
      - APPEND_PRESET_BUILT_IN_PLUGINS=@nocobase/plugin-app-supervisor
    volumes:
      - ./storage-worker-a:/app/nocobase/storage
    ports:
      - '15000:80'
  worker_b:
    container_name: nocobase-worker-b
    image: nocobase/nocobase:alpha
    restart: always
    platform: linux/amd64
    networks:
      - nocobase
    depends_on:
      - redis
    environment:
      - DB_DIALECT=postgres
      - DB_HOST=postgres
      - DB_PORT=5432
      - DB_DATABASE=nocobase_worker_b
      - DB_USER=postgres
      - DB_PASSWORD=postgres
      - TZ=Asia/Shanghai
      - APP_MODE=worker
      - APP_DISCOVERY_ADAPTER=remote
      - APP_PROCESS_ADAPTER=local
      - APP_SUPERVISOR_REDIS_URL=redis://redis:6379/0
      - APP_COMMAND_ADAPTER=redis
      - APP_COMMAND_REDIS_URL=redis://redis:6379/0
      - ENVIRONMENT_NAME=env_b
      - ENVIRONMENT_URL=http://localhost:16000
      - ENVIRONMENT_PROXY_URL=http://worker_b
      - APPEND_PRESET_BUILT_IN_PLUGINS=@nocobase/plugin-app-supervisor
    volumes:
      - ./storage-worker-b:/app/nocobase/storage
    ports:
      - '16000:80'

#מדריך שימוש

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

#רשימת סביבות

לאחר השלמת הפריסה, היכנסו לדף "מפקח אפליקציות" (App Supervisor) באפליקציית הכניסה. בלשונית "סביבות" (Environments) ניתן לצפות ברשימת סביבות העבודה הרשומות. הרשימה כוללת מזהה סביבה, גרסת אפליקציית עבודה, כתובת URL לגישה וסטטוס. אפליקציית העבודה מדווחת על "דופק" (heartbeat) כל 2 דקות כדי להבטיח את זמינות הסביבה.

#יצירת אפליקציה

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

#רשימת אפליקציות

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

#הפעלת אפליקציה

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

#גישת פרוקסי לאפליקציה

ניתן לגשת לאפליקציות עבודה דרך נתיב המשנה /apps/:appName/admin של אפליקציית הכניסה באמצעות פרוקסי.

אם האפליקציה פרוסה במספר סביבות, יש לציין סביבת יעד עבור גישת הפרוקסי.

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