Уведомление об ИИ-переводе
Этот документ был переведён с помощью ИИ. Для получения точной информации обратитесь к английской версии.
Режим мультисреды
Диспетчер приложений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.