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

Мульти-приложения

Обзор
Режим общей памяти
Мультисреда
Multi-space
Previous PageРежим общей памяти
Next PageMulti-space
Уведомление об ИИ-переводе

Этот документ был переведён с помощью ИИ. Для получения точной информации обратитесь к английской версии.

#Режим мультисреды

Диспетчер приложенийEnterprise Edition+

#Введение

Режим мульти-приложений в общей памяти обладает явными преимуществами в развертывании и эксплуатации, но по мере роста количества приложений и сложности бизнеса одиночный экземпляр может столкнуться с конкуренцией за ресурсы и снижением стабильности. Для этого применяется гибридное мультисредовое развертывание.

В этом режиме одна входная инстанция используется как единый центр управления и планирования, а несколько экземпляров NocoBase работают как независимые среды исполнения, отвечающие за фактическую работу бизнес-приложений. Среды изолированы друг от друга и работают совместно, что эффективно распределяет нагрузку, значительно повышая стабильность, масштабируемость и отказоустойчивость системы.

На уровне инфраструктуры среды могут работать как отдельные процессы, Docker-контейнеры или несколько Kubernetes Deployment, что позволяет гибко адаптироваться к инфраструктурам различного масштаба и архитектуры.

#Развертывание

В мультисредовом режиме:

  • Входное приложение (Supervisor) централизованно управляет приложениями и средами
  • Worker-приложения выполняют фактическую бизнес-нагрузку
  • Конфигурации приложений и сред кэшируются в Redis
  • Команды и синхронизация состояния между Supervisor и Worker идут через Redis

Создание сред пока не автоматизировано. Каждый Worker нужно развернуть и настроить вручную.

#Архитектурные зависимости

Перед развертыванием подготовьте:

  • Redis

    • Кэш конфигурации приложений и сред
    • Канал командной коммуникации между Supervisor и Worker
  • База данных

    • DB-сервисы для Supervisor и Worker

#Входное приложение (Supervisor)

Supervisor отвечает за создание приложений, запуск/остановку, маршрутизацию по средам и проксирование доступа.

Переменные окружения Supervisor:

# Application mode
APP_MODE=supervisor
# Application discovery adapter
APP_DISCOVERY_ADAPTER=remote
# Application process adapter
APP_PROCESS_ADAPTER=remote
# Redis for application and environment configuration cache
APP_SUPERVISOR_REDIS_URL=
# Command communication adapter
APP_COMMAND_ADPATER=redis
# Redis for command communication
APP_COMMAND_REDIS_URL=

#Worker-приложение

Worker хостит и запускает конкретные экземпляры приложений NocoBase.

Переменные окружения Worker:

# Application mode
APP_MODE=worker
# Application discovery adapter
APP_DISCOVERY_ADAPTER=remote
# Application process adapter
APP_PROCESS_ADAPTER=local
# Redis for application and environment configuration cache
APP_SUPERVISOR_REDIS_URL=
# Command communication adapter
APP_COMMAND_ADPATER=redis
# Redis for command communication
APP_COMMAND_REDIS_URL=
# Environment identifier
ENVIRONMENT_NAME=
# Environment access URL
ENVIRONMENT_URL=
# Environment proxy access URL
ENVIRONMENT_PROXY_URL=

#Пример Docker Compose

В следующем примере показана схема гибридного развертывания в нескольких средах с использованием Docker-контейнеров, где через Docker Compose одновременно развертываются одно входное приложение и два рабочих приложения (Worker).

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 и откройте вкладку Environment: там отображаются зарегистрированные Worker-среды (идентификатор, версия, URL, статус). Worker отправляют heartbeat каждые 2 минуты для обеспечения доступности среды.

#Создание приложения

При создании приложения можно выбрать одну или несколько сред исполнения. Обычно достаточно одной. Несколько сред нужны в сценариях разделение сервисов.

#Список приложений

Список показывает текущие среды и статусы приложений. Если приложение размещено в нескольких средах, отображается несколько статусов. В обычных условиях одно и то же приложение в нескольких средах сохраняет единое состояние, а его запуск и остановка управляются централизованно.

#Запуск приложения

Поскольку запуск может записывать инициализационные данные в БД, для предотвращения race condition запуск в нескольких средах выполняется через очередь.

#Прокси-доступ

Worker-приложения доступны через подпуть /apps/:appName/admin входного приложения.

Если приложение развернуто в нескольких средах, необходимо указать целевую среду для прокси-доступа.

По умолчанию используется ENVIRONMENT_URL, адрес должен быть достижим из сети входного приложения. Для отдельного прокси-адреса задайте ENVIRONMENT_PROXY_URL.