Autostop/autostart Machines
들어오는 요청에 따라 Fly Machines을 자동으로 중지하거나 시작(또는 일시 중지)하는 autostop/autostart 기능을 알려드릴게요. 이 기능을 잘 활용하면 피크 수요에 대응하면서도 불필요한 머신을 계속 돌리는 비용을 아낄 수 있습니다. 어떤 상황에 맞고, 어떻게 구성하고 권장하는 설정은 무엇인지 함께 살펴보아요.
출처: 문서
본문
앱이 추가 머신을 계속 실행하지 않고도 피크 수요에 대응할 수 있습니다. autostop/autostart를 사용해 들어오는 요청에 따라 기존 Machines를 자동으로 시작하고 중지하거나 일시 중지하세요. Fly Machines은 시작과 중지가 빠르며, stopped 또는 suspended 상태일 때 CPU와 RAM 비용이 부과되지 않습니다.
Fly Proxy autostop/autostart가 어떻게 동작하는지에 대한 모든 세부 사항을 확인하세요.
autostop/autostart를 사용해야 할 때
autostop/autostart는 변동성이 큰 워크로드를 가진 앱, 트래픽이 낮거나 간헐적인 소규모 앱, 그리고 요청을 지속적으로 받지 않는 대부분의 앱에 잘 맞습니다. 수요가 줄고 늘어남에 따라 autostop/autostart로 Fly Machines을 관리하면 리소스 사용량과 비용을 줄일 수 있습니다. 피크 부하를 처리하기 위해 과잉 머신을 실행할 필요가 전혀 없습니다. 필요한 머신 수만큼만 실행하고 비용을 지불하면 됩니다. 기본 지역에서 하나 이상의 머신을 계속 실행하도록 선택할 수도 있습니다.
autostop/autostart는 모든 워크로드에 맞는 것은 아닙니다. Fly Proxy의 중지 루프는 몇 분마다 실행되며 패스당 지역당 최대 한 대의 머신을 중지합니다. 일반 앱에는 괜찮지만, 단일 앱에서 수천 개의 머신을 실행한다면(예: 사용자별 개발 환경) 이 루프가 따라잡지 못할 수 있습니다. 그런 경우에는 동적 라우팅과 함께 사용자당 하나의 앱을 사용하거나, 유휴 상태일 때 앱 스스로 종료하도록 만드세요.
autostop/autostart 구성하기
autostop/autostart 설정은 앱 fly.toml 파일의 각 서비스의 일부입니다. \[\[services\]\] 또는 \[http\_service\] 문서에서 서비스 구성에 대한 세부 사항을 확인하세요. 사설 앱에 서비스를 추가할 수도 있습니다.
autostop/autostart 설정:
auto_stop_machines: 앱이 수 분간 유휴 상태일 때 Fly Proxy가 취해야 할 동작(있다면).- 옵션은
"off"(false와 동일),"stop"(true와 동일), 또는"suspend"입니다. "off"이면 Fly Proxy는 머신을 절대 중지하지 않습니다."stop"이면 앱에 과잉 용량이 있을 때 Fly Proxy가 머신을 중지합니다."suspend"이면 앱에 과잉 용량이 있을 때 Fly Proxy가 (가능하다면) 머신을 일시 중지합니다.suspended상태에서 머신을 시작하는 것은stopped상태에서 시작하는 것보다 빠르지만, 알아두어야 할 몇 가지 주의사항이 있습니다.
- 옵션은
auto_start_machines: Fly Proxy가 요청과 용량에 따라 머신을 자동으로 시작해야 하는지 여부.min_machines_running:auto_stop_machines가"stop"또는"suspend"로 설정되었을 때 기본 지역에서 계속 실행할 최소 머신 수.
구성 예시:
...
[[services]]
internal_port = 8080
protocol = "tcp"
auto_stop_machines = "stop"
auto_start_machines = true
min_machines_running = 1
...
위 예시에서 Fly Proxy는 앱에 과잉 용량이 있을 때 머신을 자동으로 중지하고, 앱으로 가는 트래픽에 따라 필요할 때 다시 시작합니다. 트래픽이 없다면 앱은 결국 기본 지역에서 실행 중인 머신 하나로 줄어듭니다.
fly.toml 파일의 서비스에 대해 구성된 동시성 제한도 autostop/autostart가 동작하는 방식에 영향을 줍니다: Fly Proxy는 각 머신의 동시성 soft_limit 설정을 사용해 지역별 과잉 용량이 있는지 판단합니다.
autostop/autostart 구성 권장사항
일반적으로, 앱이 유휴 상태일 때 스스로 종료되지 않는 한, auto_stop_machines와 auto_start_machines를 둘 다 활성화하거나 둘 다 비활성화하도록 설정하는 것을 권장합니다. 절대 시작되지 않거나 절대 중지되지 않는 머신이 생기는 것을 피하기 위해서입니다. 예를 들어 auto_start_machines = false이고 auto_stop_machines = "stop"이면 Fly Proxy는 트래픽이 낮을 때 머신을 자동으로 중지하지만 다시 시작하지는 않습니다. 머신이 모두 또는 대부분 중지되면 앱에 대한 요청이 실패하기 시작할 수 있습니다.
실행 중인 최소 머신 수
기본 지역에서 항상 하나 이상의 머신을 실행하려면 min_machines_running을 1 이상으로 설정하세요. min_machines_running = 1이고 앱으로 가는 트래픽이 없다면, Fly Proxy는 결국 기본 지역에 머신 하나만 남을 때까지 머신을 중지합니다. min_machines_running은 auto_stop_machines를 "stop" 또는 "suspend"로 설정하지 않는 한 효과가 없습니다.
실행 중인 최대 머신 수
"최대 실행 머신 수(maximum machines running)" 설정은 존재하지 않습니다. 최대 머신 수는 앱의 총 머신 수이기 때문입니다.
Fly Proxy autostop/autostart는 여러분을 대신해 머신을 생성하거나 파괴하지 않습니다. 최대 실행 머신 수는 실행 시, 또는 fly scale count나 fly machine clone을 사용해 앱에 생성된 머신 수입니다. 예를 들어 요청을 처리할 수 있는 최대 10개의 머신을 갖고 싶다면 앱에 머신 10개를 생성해야 합니다. 머신 수 스케일링에 대해 자세히 알아보세요.
모든 머신을 계속 실행하기
앱의 모든 머신을 계속 실행해야 한다면 auto_stop_machines를 "off"로, auto_start_machines를 false로 설정해 autostop/autostart를 완전히 끌 수 있습니다.
앱의 특정 수의 머신만 계속 실행하면 된다면 auto_stop_machines를 "suspend" 또는 "stop"으로, min_machines_running을 1 이상으로 설정할 수 있습니다. min_machines_running은 앱의 기본 지역에만 적용된다는 점에 유의하세요.
사설 앱
사설 네트워크에서 서비스가 구성되지 않은 앱에 대한 요청은 Fly Proxy를 통해 라우팅되지 않으므로 Fly Proxy가 머신을 자동으로 중지하거나 시작할 수 없습니다. 사설 앱에 Fly Proxy autostart/autostart를 사용하려면 서비스를 설정하고 Flycast 사설 IPv6 주소를 사용하세요. Flycast - Private Fly Proxy Services와 Autostop/autostart private apps를 참조하세요.
유휴 상태일 때 종료되는 앱
auto_stop_machines로 앱이 과잉 용량일 때 머신을 자동으로 중지 또는 일시 중지하도록 설정하는 것은, 앱이 일정 기간 비활성 상태 후 스스로 종료하지 않을 때의 대안이 될 수 있습니다. 앱이 이미 유휴 상태일 때 종료한다면 auto_start_machines = true와 auto_stop_machines = "off"를 설정해 Fly Proxy가 앱이 중지한 머신을 자동으로 다시 시작하게 할 수 있습니다.
앱에 사용자 지정 종료 프로세스를 원한다면 유휴 상태일 때 종료되도록 앱을 코딩할 수 있습니다.
몇 가지 예시:
- Shutting Down a Phoenix App When Idle: Chris McCord가 Elixir 앱의 감독 트리(supervision tree)에 활성 연결이 없을 때 Erlang 런타임을 종료하는 작업을 추가하는 방법에 대한 글.
- Rails 앱의 경우
dockerfile-rails생성기가 n초 비활성 후 종료되는 --max-idle 옵션을 제공합니다. - Building an In-Browser IDE the Hard Way에서 사용된 A Tired Proxy in Go. 더 최신 업데이트가 있는 커뮤니티 포크도 있습니다.
- TypeScript/Remix로 만든 최소 데모 앱: 코드 & 데모.
Fly Postgres도 zero로 스케일링을 지원합니다.
기본 설정
기본값은 fly launch로 생성한 새 앱과 autostop/autostart 설정이 전혀 없는 앱에서 다릅니다.
fly launch로 생성한 앱
fly launch 명령으로 새 앱을 만들면 fly.toml의 기본 설정은 다음과 같습니다:
...
[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = "stop"
auto_start_machines = true
min_machines_running = 0
...
autostop/autostart 설정이 없는 앱
fly.toml에 autostop/autostart 설정을 명시적으로 지정하지 않는 앱의 경우, Fly Proxy는 필요할 때 중지된 머신을 자동으로 시작하지만 자동으로 중지하거나 일시 중지하지는 않습니다.