본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

여러 프로세스 그룹을 하나의 앱에서 실행하기

원문 보기 위키 갱신

프로세스 그룹(process groups)은 하나의 Fly App으로 여러 다른 프로그램을 실행할 수 있게 해주는 구성 방식이에요. 이 페이지에서는 fly.toml에 프로세스를 정의하는 방법, 기본 프로세스 그룹, 서비스 연결, 배포 동작, 그리고 프로세스 그룹을 가로/세로로 확장하는 방법을 설명합니다.

출처: 문서

본문

프로세스 그룹은 하나의 Fly App으로 여러 다른 프로그램을 실행하도록 구성하는 방법입니다.

fly.toml에서 프로세스를 정의해 각 프로세스 그룹에 이름과 부팅 시 실행할 명령을 부여합니다. 정의된 각 프로세스는 앱 안의 자체 Fly Machine(s)에서 실행되므로 리소스를 놓고 경쟁하지 않고, 프로세스 그룹별로 확장할 수 있어요.

기본 프로세스 그룹

프로세스를 명시적으로 정의하지 않으면 Fly App의 Machines는 기본 app 프로세스 그룹에 속하고, 부팅 시 앱의 Docker 이미지가 가진 엔트리포인트 프로세스를 실행합니다. (앱은 Docker 이미지로 Fly.io에 전달되지만, 우리는 컨테이너가 아닌 VM을 실행합니다.)

fly launch 명령이 앱의 fly.toml 파일을 만들 때 http_service 섹션에 정의된 기본 서비스는 app 프로세스 그룹에 속합니다.

여러 프로세스 실행

여러 프로세스를 실행하려면 먼저 실행하려는 모든 것이 앱의 Docker 이미지에 설치되어 있는지 확인하세요.

앱의 fly.toml에 processes 섹션을 정의해 프로세스 그룹 이름과 실행할 명령을 짝지어 주세요. 예시는 다음과 같아요.

[processes]
  web = "bin/rails fly:server"
  cron = "supercronic /app/crontab"

설정에 [processes] 섹션이 있으면 flyctl은 이것이 프로세스의 전체 목록이라고 가정합니다. 다른 프로세스 그룹 옆에 app 프로세스 그룹도 원한다면 명시적으로 설정에 추가하세요.

Fly App의 프로세스 그룹 명령은 Docker의 CMD에 해당합니다. 앱 이미지의 ENTRYPOINT를 대체하지는 않지만 CMD를 대체합니다.

프로세스와 서비스

아마 여러분은 사용자 요청이 프로세스 중 하나에만 도달하기를 원할 거예요. 위 예시에서 그 프로세스는 web이므로, 앱의 HTTP 서비스에 대해 http_service 또는 [[services]] 섹션에서 web 프로세스를 지정하면 됩니다.

...
[[services]]
  http_checks = []
  internal_port = 8080
  processes = ["web"]
  ...

Fly Proxy(공개적으로는 공개, 또는 Flycast 경유)로부터 연결을 받아야 하는 각 프로세스에 대해 fly.toml에 여러 [[services]] 섹션을 만들어 각각에 대해 별도의 서비스를 정의할 수 있어요.

중요: 프로세스가 서로 다른 외부 포트에서 연결을 처리하는지 확인하세요. Fly Proxy는 프로세스 그룹을 알지 못하며, 요청된 포트에 서비스가 구성된 모든 Machines 간에 요청을 로드 밸런싱합니다.

배포

fly deploy는 각 프로세스 그룹에 대해 최소 하나의 Machine을 만들고, 앱의 fly.toml 파일에 정의되지 않은 프로세스 그룹에 속한 모든 Machine을 파괴합니다. 또한 앱의 fly deploy-관리 Machine 각각의 명령, 서비스, 헬스 체크를 업데이트하고, 새 앱 릴리스를 생성합니다.

따라서 첫 번째 배포(fly launch의 끝 또는 첫 번째 명시적 fly deploy)에서 flyctl은 fly.toml의 각 프로세스 그룹에 대해 최소 하나의 Machine을 만들고 시작합니다.

앱의 [processes] 블록에 새 프로세스 그룹을 추가하면 다음 fly deploy가 각 새 프로세스를 실행할 새 Machine을 최소 하나 띄웁니다.

앱의 [processes] 블록에서 프로세스 그룹을 제거하면 다음 fly deploy가 삭제된 프로세스에 속한 Machines를 파괴합니다.

fly launch와 fly deploy가 생성하는 Machine 수에 대한 자세한 내용은 앱 가용성과 탄력성을 참조하세요.

프로세스 그룹을 가로로 확장하기

앱의 Machine 수를 확장하는 방법은 두 가지가 있어요. 이 섹션은 가로 확장에 대한 요약을 제공합니다. 자세한 내용은 Machine 수 확장을 참조하세요.

fly scale count로 프로세스 그룹을 가로로 확장

fly scale count 명령으로 프로세스 그룹당 Machine 수를 늘리거나 줄일 수 있어요. 다음 예시는 web 프로세스 그룹을 8개 Machine으로, cron 프로세스 그룹을 2개 Machine으로 확장합니다.

fly scale count web=8 cron=2

--region 옵션으로 리전별로 확장할 수 있어요. 여러 리전을 지정하면 Machines가 리전 사이에 최대한 균등하게 분산됩니다. 다음 명령은 gru에 2개, bog에 2개의 Machine을 만듭니다.

fly scale count web=4 --region gru,bog

fly machine clone으로 프로세스 그룹을 가로로 확장

fly machine clone과 fly machine destroy 명령으로 프로세스 그룹 안에서 Machine 수를 개별적으로 확장할 수도 있어요. 프로세스 그룹에 속한 Machine을 클론하면 새 Machine은 앱에 해당 프로세스에 대해 구성된 명령, 서비스, 체크와 함께 생성됩니다.

Machine을 새 리전으로 클론하면 리전을 앱에 추가할 수 있어요.

먼저 fly status를 실행해 ID와 프로세스 그룹이 있는 Machines 목록을 얻으세요.

다음 예시는 Machine을 gru(상파울루) 리전으로 클론합니다.

fly machine clone --region gru e2865641be9786

Machine을 강제로 중지하고 파괴하려면 다음 명령을 실행하세요.

fly machine destroy e2865641be9786 --force

프로세스 그룹을 세로로 확장하기

fly scale vm과 fly scale memory 명령으로 전체 프로세스 그룹의 Machine CPU와 메모리 설정을 확장할 수 있어요. 이 섹션은 세로 확장에 대한 요약입니다. 자세한 내용은 Machine CPU와 RAM 확장을 참조하세요.

참고: --process-group 옵션은 더 빠른 명령 입력을 위해 -g로 별칭됩니다.

다음 예시는 web 프로세스 그룹의 Machines CPU/RAM을 다른 프리셋 조합으로 변경합니다.

fly scale vm performance-2x --process-group web

유효한 CPU/RAM 프리셋 조합 목록은 fly platform vm-sizes를 실행하세요.

이 예시는 web 프로세스 그룹의 Machines RAM만 변경합니다.

fly scale memory 4096 --process-group web

Machine을 프로세스 그룹 간에 이동하기

메타데이터를 업데이트해 기존 Machine의 프로세스 그룹을 변경할 수 있어요.

fly machine update --metadata fly_process_group=app 21781973f03e89

그런 다음 앱을 배포해 해당 프로세스 그룹에 대한 구성을 Machine에 적용합니다.

fly deploy

더 알아보기 (Learn more)