도구스개발

팬아웃 꼬리지연 계산기

요청 하나가 N갈래로 흩어지고 모두 돌아와야 응답할 때 전체 p99가 얼마나 나빠지는지 계산합니다. 하위 서비스에 필요한 백분위를 역산하고, 헤지 요청으로 꼬리를 자를 때의 효과와 추가 부하도 함께 냅니다.

모두 돌아와야 응답할 수 있는 갈래의 수입니다.

ms
ms
ms

이 시간 안에 답이 없으면 같은 요청을 하나 더 보냅니다. 0이면 쓰지 않습니다.

N = 100 일 때 전체 p99

396.4ms

하위 p99 100ms3.96배 · 요청의 63.4%가 하위 p99를 넘깁니다

하나라도 느리면 전체가 느리다

모두 하위 p99 안에 들어올 확률0.99^100 = 36.6%
하나라도 하위 p99를 넘길 확률63.4%
전체 p99를 만들려면 하위가 몇 분위여야 하나p99.99
하위 서비스가 서로 독립이라면 전체가 빠를 확률은 (1 − q)^N으로 줄어듭니다. q = 1%, N = 100이면 36.6%만 남으므로 요청의 63.4%가 하위 p99를 넘깁니다. 하위의 «백 번에 한 번»이 전체에서는 그만큼 흔한 일이 됩니다.
뒤집어 보면, 전체 p99를 맞추려면 하위는 p99.99가 되어야 합니다. 하위 서비스의 p99를 아무리 다듬어도 소용이 없고 그보다 훨씬 바깥 꼬리를 봐야 한다는 뜻입니다.

백분위별로

전체 백분위하위 하나N개 모두 기다림필요한 하위 분위
p5010ms114.4msp99.3092
p9035.6ms209.8msp99.8947
p9550.9ms257.9msp99.9487
p99100ms396.4msp99.99
p99.9213ms681.2msp99.999
하위 서비스의 지연이 로그정규분포를 따른다고 보고, 넣으신 p50과 p99 두 점으로 분포를 정했습니다. N개 가운데 가장 느린 것의 분포는 F(t)^N이므로 전체의 P 분위수가 F⁻¹(P^(1/N))이 됩니다.

N이 늘면 얼마나 나빠지나

N=1N=10N=100N=1000N=10000N=100000하위 p99 100ms↑ 전체 p99 (ms)
가로축이 하위 호출 수(로그), 세로축이 전체 p99입니다. 점선이 하위 하나의 p99이며, N이 커질수록 실선이 그 위로 계속 멀어집니다. 세로선이 지금 설정한 N입니다.

헤지 요청으로 꼬리 자르기

헤지 대기시간을 넣어 보십시오. 그 시간 안에 답이 안 오면 같은 요청을 하나 더 보내고 먼저 오는 쪽을 쓰는 기법으로, 꼬리를 크게 잘라 냅니다. 추가로 나가는 요청의 비율은 정확히 «대기시간을 넘길 확률»이므로 하위 p95쯤에 맞추면 부하가 5%만 늡니다.

이 계산의 한계

여기서는 N개의 하위 호출이 서로 독립이라고 봅니다. 실제로는 같은 네트워크, 같은 스위치, 같은 배포를 공유하므로 함께 느려질 때가 많습니다. 상관이 있으면 실제 꼬리가 이 계산보다 나을 수도 나쁠 수도 있으니, 이 값은 «독립일 때의 값»으로 읽으십시오. 하위 지연을 로그정규로 본 것도 가정이며, 재시도나 타임아웃이 만드는 봉우리가 둘인 분포에는 잘 맞지 않습니다.

사용 방법

  1. 1하위 호출 수 N을 넣습니다. 모두 돌아와야 응답할 수 있는 갈래의 수입니다.
  2. 2하위 서비스 하나의 p50과 p99를 넣으면 지연 분포가 정해집니다.
  3. 3전체 p99가 하위 p99의 몇 배가 되는지 확인합니다.
  4. 4«필요한 하위 분위» 칸을 보십시오. p99가 아니라 그보다 훨씬 바깥이어야 합니다.
  5. 5헤지 대기시간을 넣어 꼬리가 얼마나 잘리고 부하가 얼마나 느는지 견줍니다.

자주 묻는 질문

하나라도 느리면 전체가 느리기 때문입니다. 하위가 서로 독립이라면 전체가 빠를 확률이 (1 − q)^N으로 줄어듭니다. q = 1%, N = 100이면 0.99¹⁰⁰ = 36.6%만 남으므로 요청의 63%가 하위 p99를 넘깁니다. 하위의 «백 번에 한 번»이 전체에서는 «세 번에 두 번»이 되는 셈입니다.

전체 p99를 맞추려면 하위는 0.99^(1/N) 분위여야 합니다. N = 100이면 p99.99, N = 1000이면 p99.999입니다. 곧 하위의 p99를 다듬는 것으로는 부족하고 그보다 훨씬 바깥 꼬리를 봐야 합니다. 팬아웃이 큰 시스템에서 p99가 아니라 p99.9나 p99.99를 지표로 삼는 이유가 이것입니다.

지연 분포가 있어야 합니다. 이 계산기는 로그정규분포를 쓰며, 넣으신 p50과 p99 두 점으로 모수를 정합니다. 지연시간은 음수가 없고 오른쪽으로 길게 끌리는데 그 모양에 잘 맞기 때문입니다. N개 중 가장 느린 것의 분포는 F(t)^N이므로 전체의 P 분위수가 F⁻¹(P^(1/N))이 됩니다.

정해 둔 시간 안에 답이 오지 않으면 같은 요청을 하나 더 보내고 먼저 오는 쪽을 쓰는 방법입니다. 지연이 min(T₁, 대기시간 + T₂)가 되어 꼬리가 크게 잘립니다. 대가는 부하이며, 추가로 나가는 비율이 정확히 «대기시간을 넘길 확률»이므로 대기시간을 하위 p95에 맞추면 부하가 5%만 늡니다.

짧게 잡을수록 꼬리가 더 잘리지만 부하가 그만큼 늡니다. 하위 p95~p99 사이에 두면 부하는 1~5% 늘면서 꼬리는 눈에 띄게 줄어드는 것이 보통입니다. 이 계산기에서 대기시간을 바꿔 가며 «줄어든 비율»과 «늘어나는 부하»를 견줘 보십시오. 다만 부하가 늘면 하위 서비스가 더 느려질 수 있는데, 그 되먹임은 이 계산에 들어 있지 않습니다.

실제로는 같은 네트워크, 같은 스위치, 같은 전원, 같은 배포를 공유하므로 함께 느려질 때가 많습니다. 상관이 있으면 최댓값의 꼬리가 이 계산보다 얇아지지만, 공통 원인 자체가 자주 일어나면 전체가 통째로 느려집니다. 그래서 이 값은 «독립일 때의 값»으로 읽으시고, 실측과 견줘 보정하는 편이 좋습니다.

이 계산기는 «모두 돌아와야 응답할 수 있는» 경우입니다. 90%만 모이면 응답하는 설계라면 최댓값이 아니라 상위 순서통계량을 봐야 하므로 훨씬 나아집니다. 실제로 팬아웃이 큰 시스템이 부분 결과로 응답하는 이유가 이것입니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지며 입력한 값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 하위 호출이 서로 독립이라고 가정합니다. 함께 느려지는 공통 원인은 반영되지 않습니다.
  • 하위 지연을 로그정규분포로 봅니다. 재시도나 타임아웃 때문에 봉우리가 둘인 분포에는 잘 맞지 않습니다.
  • «모두 돌아와야 응답한다»는 경우입니다. 일부 결과로 응답하는 설계는 이보다 훨씬 나아집니다.
  • 헤지로 늘어난 부하가 하위 서비스를 더 느리게 만드는 되먹임은 계산에 들어 있지 않습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.