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에 의해 번역되었습니다. 정확한 정보는 영어 버전을 참조하세요.

#다중 환경 모드

앱 수퍼바이저Enterprise Edition+

#소개

공유 메모리 모드의 다중 애플리케이션은 배포 및 운영 면에서 뚜렷한 장점이 있지만, 애플리케이션 수와 비즈니스 복잡도가 증가함에 따라 단일 인스턴스는 점차 리소스 경합, 안정성 저하 등의 문제에 직면할 수 있습니다. 이러한 시나리오에 대응하여 사용자는 더 복잡한 비즈니스 요구 사항을 지원하기 위해 다중 환경 혼합 배포 방안을 채택할 수 있습니다.

이 모드에서 시스템은 통합 관리 및 스케줄링 센터로서 하나의 입구 애플리케이션(Supervisor)을 배포하고, 실제 비즈니스 애플리케이션을 담당하는 독립적인 애플리케이션 실행 환경으로서 여러 NocoBase 인스턴스를 배포합니다. 각 환경은 서로 격리되어 협업하며, 이를 통해 단일 인스턴스의 부하를 효과적으로 분산하고 시스템의 안정성, 확장성 및 장애 격리 능력을 현저히 향상시킵니다.

배포 측면에서 서로 다른 환경은 독립된 프로세스에서 실행되거나, 서로 다른 Docker 컨테이너로 배포되거나, 여러 Kubernetes Deployment 형태로 존재할 수 있어 다양한 규모와 아키텍처의 인프라 환경에 유연하게 적응할 수 있습니다.

#배포

다중 환경 혼합 배포 모드에서:

  • 입구 애플리케이션(Supervisor)은 애플리케이션 및 환경 정보를 통합 관리합니다.
  • 작업 애플리케이션(Worker)은 실제 비즈니스 실행 환경 역할을 합니다.
  • 애플리케이션 및 환경 설정은 Redis를 통해 캐시됩니다.
  • 입구 애플리케이션과 작업 애플리케이션 간의 명령 및 상태 동기화는 Redis 통신에 의존합니다.

현재 환경 생성 기능은 아직 제공되지 않으며, 각 작업 애플리케이션은 수동으로 배포하고 해당 환경 정보를 설정해야 입구 애플리케이션에서 인식할 수 있습니다.

#아키텍처 종속성

배포 전에 다음 서비스를 준비해 주십시오:

  • Redis

    • 애플리케이션 및 환경 설정 캐시
    • 입구 애플리케이션과 작업 애플리케이션 간의 명령 통신 채널 역할
  • 데이터베이스

    • 입구 애플리케이션과 작업 애플리케이션이 연결해야 하는 데이터베이스 서비스

#입구 애플리케이션 (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'

#사용 설명서

애플리케이션의 기본 관리 작업은 공유 메모리 모드와 동일하므로 공유 메모리 모드를 참고하십시오. 이 섹션에서는 주로 다중 환경 설정과 관련된 내용을 소개합니다.

#환경 목록

배포 완료 후, 입구 애플리케이션의 「애플리케이션 관리자」 페이지로 들어가 「환경」 탭에서 등록된 작업 환경 목록을 확인할 수 있습니다. 여기에는 환경 식별자, 작업 애플리케이션 버전, 접속 URL 및 상태 등의 정보가 포함됩니다. 작업 애플리케이션은 환경의 가용성을 보장하기 위해 2분마다 한 번씩 하트비트(Heartbeat)를 보고합니다.

#애플리케이션 생성

애플리케이션을 생성할 때 하나 이상의 실행 환경을 선택하여 해당 애플리케이션이 어떤 작업 애플리케이션에 배포될지 지정할 수 있습니다. 일반적으로 하나의 환경만 선택하는 것을 권장합니다. 작업 애플리케이션에서 서비스 분할을 수행하여 부하 분산이나 기능 격리를 위해 동일한 애플리케이션을 여러 실행 환경에 배포해야 하는 경우에만 여러 환경을 선택하십시오.

#애플리케이션 목록

애플리케이션 목록 페이지에는 각 애플리케이션이 현재 위치한 실행 환경 및 상태 정보가 표시됩니다. 애플리케이션이 여러 환경에 배포된 경우 여러 실행 상태가 표시됩니다. 여러 환경의 동일한 애플리케이션은 정상적인 상황에서 통합된 상태를 유지하며, 시작과 중지를 통합적으로 제어해야 합니다.

#애플리케이션 시작

애플리케이션 시작 시 데이터베이스에 초기화 데이터를 기록할 수 있으므로, 다중 환경에서의 경합 상태(Race Condition)를 피하기 위해 여러 환경에 배포된 애플리케이션은 시작 시 순차적으로 대기하며 진행됩니다.

#애플리케이션 접속 프록시

작업 애플리케이션은 입구 애플리케이션의 하위 경로인 /apps/:appName/admin을 통해 프록시 접속이 가능합니다.

애플리케이션이 여러 환경에 배포된 경우 프록시 접속을 위한 대상 환경을 지정해야 합니다.

기본적으로 프록시 접속 주소는 작업 애플리케이션의 접속 주소를 사용하며, 이는 환경 변수 ENVIRONMENT_URL에 해당합니다. 이 주소가 입구 애플리케이션이 위치한 네트워크 환경에서 접근 가능한지 확인해야 합니다. 다른 프록시 접속 주소를 사용해야 하는 경우 환경 변수 ENVIRONMENT_PROXY_URL을 통해 덮어쓸 수 있습니다.