동시성 설정 가이드라인
Fly.io 앱의 동시성(concurrency) 설정이 어떻게 동작하는지, 그리고 Fly Proxy가 이를 어떻게 처리하는지 알려드릴게요. 동시성 설정은 머신의 로드 밸런싱과 autostop/autostart 같은 중요한 작업에 Fly Proxy가 사용합니다. 어떤 지표를 쓸지, 한도는 어떻게 잡을지 함께 살펴보아요.
출처: 문서
본문
동시성 설정은 Fly Proxy가 로드 밸런싱과 Machines의 autostop/autostart 같은 중요한 작업에 사용합니다.
다음 동시성 설정은 앱의 각 머신(Machine)과 각 서비스에 적용됩니다:
type: 앱 로드 동시성의 지표로 connections 또는 requests를 사용합니다.
hard_limit: 이 숫자 이상이 되면 해당 머신으로 새 트래픽이 전달되지 않습니다.
soft_limit: 이 숫자 이상이 되면 해당 머신으로 가는 트래픽의 우선순위가 낮아집니다. 모든 머신이 soft limit에 도달한 경우에만 트래픽이 그 머신으로 라우팅됩니다.
Fly Launch 앱의 경우 fly.toml 파일의 \[http\_service.concurrency\] 또는 \[services.concurrency\] 하위 섹션에서 동시성 설정을 구성합니다. Machines API를 사용한다면 동시성 설정은 the config object에서 service별로 적용됩니다.
기본 설정
지정하지 않은 경우의 기본 동시성 설정은 soft_limit 20이며 hard_limit는 없습니다. 많은 앱이 수백 개 이상의 동시 연결을 처리할 수 있어요. 다양한 동시성 설정을 시도해 보고 성능과 로드 밸런싱에 어떤 영향을 주는지 확인할 수 있습니다.
connections가 기본 동시성 타입입니다.
Fly Proxy가 동시성을 처리하는 방식
Fly Proxy는 정확한 동시 연결 수나 요청 수를 고려하지 않습니다. 프록시의 관점에서 머신은 0과 soft limit 사이, soft limit과 hard limit 사이, 또는 hard limit 상태 중 하나로 처리됩니다. 이 정보와 지역(region)을 함께 사용해 프록시가 어떤 머신에 트래픽을 보낼지 결정합니다.
soft limit과 hard limit 사이의 간격이 작거나, 앱의 동시 연결 또는 요청이 그 사이에서 자주 오가면 프록시의 머신 로드 관점이 영향을 받습니다. 그런 경우 프록시는 설정에 따라 라우팅하지만, 임계값이 너무 빨리 바뀌어 요청이나 연결이 다시 라우팅되는 일이 발생할 수 있어요.
일반적인 주의사항:
- 한도가 너무 높으면 머신이 그만큼을 동시에 처리하지 못해 앱이 크래시할 수 있습니다.
- 한도가 너무 낮으면 프록시가 앱이 처리할 수 있는 양을 인위적으로 제한하게 됩니다.
- soft limit과 hard limit이 너무 가까우면 프록시가 로드 밸런싱을 결정할 "시간"이 충분하지 않아 여러 번 재시도가 발생할 수 있습니다.
Connections 또는 requests
동시성에 connections를 쓸지 requests를 쓸지는 앱의 유형과 부하에 따라 달라집니다.
requests는 HTTP 요청이며 웹 서비스에 권장되는 동시성 타입입니다. 동시성에 requests를 사용하면 앱에 너무 많은 연결이 맺어지는 것을 방지하고 지연 시간을 줄일 수 있어요. 프록시는 연결을 일시적으로 풀링하고 재사용할 수 있습니다.
connections는 TCP 연결입니다. 하나의 연결을 통해 여러 요청을 보낼 수 있으므로 앱이 이를 어떻게 처리하는지 고려해야 해요. 웹 서비스에 connections를 사용하면 프록시가 각 HTTP 요청마다 새 연결을 열기 때문에, HTTP 앱에는 requests가 더 나은 설정입니다.
동시성 한도 튜닝 팁
동시성을 튜닝할 때는 hard_limit를 상대적으로 높게 설정하거나, 설정하지 않고 두어 hard limit이 없게 하는 것을 시도해 보세요. 로드 밸런싱을 더 잘 제어하려고 hard_limit를 설정하고 싶다면, 먼저 초기 벤치마크를 통해 앱이 처리할 수 있는 최대 동시 연결 또는 요청 수를 추정해야 할 수 있습니다. 그런 다음 soft_limit을 튜닝하고 머신을 더 추가해서 autostop/autostart와 로드 밸런싱을 최적화하세요. 앱이 실제 트래픽을 받기 시작하면 계속 모니터링하면서 워크로드에 맞게 soft_limit을 더 조정할 수 있습니다.
동시성 한도에 대한 더 자세한 가이드를 원하시나요? 이 블루프린트를 확인해 보세요: Setting Hard and Soft Concurrency Limits on Fly.io.