logologo
시작
가이드
개발
플러그인
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
시작
가이드
개발
플러그인
API
logologo
클러스터 모드
개요
준비
Kubernetes 배포
운영 프로세스
서비스 분리
개발 참조
Previous Page운영 프로세스
Next Page개발 참조
TIP

이 문서는 AI로 번역되었습니다. 부정확한 내용이 있을 경우 영어 버전을 참조하세요

#서비스 분리 v1.9.0+

#소개

일반적으로 NocoBase 애플리케이션의 모든 서비스는 단일 Node.js 인스턴스에서 실행됩니다. 하지만 비즈니스 성장에 따라 애플리케이션 내 기능이 점차 복잡해지면, 일부 시간이 오래 걸리는 서비스가 전체 성능에 영향을 미칠 수 있습니다.

애플리케이션 성능을 향상시키기 위해 NocoBase는 클러스터 모드에서 애플리케이션 서비스를 여러 노드로 분리하여 실행하는 것을 지원합니다. 이렇게 하면 단일 서비스의 성능 문제가 전체 애플리케이션에 영향을 미쳐 사용자 요청에 정상적으로 응답하지 못하는 상황을 방지할 수 있습니다.

또한, 특정 서비스에 대해서만 선택적으로 수평 확장을 수행하여 클러스터의 리소스 활용률을 높일 수 있습니다.

NocoBase를 클러스터에 배포할 때, 여러 서비스를 분리하여 다른 노드에 배포하고 실행할 수 있습니다. 아래 그림은 서비스 분리 구조를 보여줍니다.

20250803214857

#분리 가능한 서비스

#비동기 워크플로우

서비스 KEY: workflow:process

비동기 모드의 워크플로우는 트리거된 후 큐에 들어가 순서대로 실행됩니다. 이러한 워크플로우는 백그라운드 작업으로 간주되며, 일반적으로 사용자가 결과가 반환될 때까지 기다릴 필요가 없습니다. 특히 복잡하고 시간이 많이 소요되며 트리거 빈도가 높은 프로세스의 경우, 독립적인 노드에서 실행되도록 분리하는 것을 권장합니다.

#기타 사용자 수준 비동기 작업

서비스 KEY: async-task:process

비동기 가져오기(import), 내보내기(export) 등 사용자 작업으로 생성되는 태스크를 포함합니다. 대량의 데이터 처리나 높은 동시성이 요구되는 경우, 독립적인 노드에서 실행되도록 분리하는 것을 권장합니다.

#서비스 분리 방법

여러 서비스를 다른 노드로 분리하려면 WORKER_MODE 환경 변수를 설정해야 합니다. 이 환경 변수는 다음 규칙에 따라 구성할 수 있습니다.

  • WORKER_MODE=<비어 있음>: 설정되지 않았거나 비어 있는 경우, 작업 모드는 현재 단일 인스턴스와 동일하게 모든 요청을 수신하고 모든 태스크를 처리합니다. 이전에 설정되지 않은 애플리케이션과 호환됩니다.
  • WORKER_MODE=! : 작업 모드는 요청만 처리하고 어떤 태스크도 처리하지 않습니다.
  • WORKER_MODE=workflow:process,async-task:process: 하나 이상의 서비스 식별자(쉼표로 구분)로 설정된 경우, 작업 모드는 해당 식별자의 태스크만 처리하고 요청은 처리하지 않습니다.
  • WORKER_MODE=* : 작업 모드는 모듈과 관계없이 모든 백그라운드 태스크를 처리하지만, 요청은 처리하지 않습니다.
  • WORKER_MODE=!,workflow:process: 작업 모드는 요청을 처리하는 동시에 특정 식별자의 태스크만 처리합니다.
  • WORKER_MODE=- : 작업 모드는 어떤 요청이나 태스크도 처리하지 않습니다 (이 모드는 워커 프로세스 내에서 필요합니다).

예를 들어, 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=!로 설정하고 로드 밸런서가 이 두 노드로 요청을 자동으로 분산합니다.
  • node3 및 node4: 모든 다른 백그라운드 태스크를 처리하며, WORKER_MODE=*로 설정합니다.

#개발자 참고 자료

비즈니스 플러그인 개발 시, 요구 사항 시나리오에 따라 리소스 소모가 큰 서비스를 분리할 수 있습니다. 이는 다음 방법으로 구현할 수 있습니다.

  1. my-plugin:process와 같은 새로운 서비스 식별자를 정의하고, 환경 변수 설정에 사용하며 관련 문서를 제공합니다.
  2. 플러그인의 서버 측 비즈니스 로직에서 app.serving() 인터페이스를 사용하여 환경을 판단하고, 환경 변수에 따라 현재 노드가 특정 서비스를 제공할지 여부를 결정합니다.
const MY_PLUGIN_SERVICE_KEY = 'my-plugin:process';
// 플러그인의 서버 측 코드에서
if (this.app.serving(MY_PLUGIN_SERVICE_KEY)) {
  // 해당 서비스의 비즈니스 로직 처리
} else {
  // 해당 서비스의 비즈니스 로직을 처리하지 않음
}