Interactive

待ち行列理論可視化

「平均は健全なのにp99だけが跳ね上がる」——この現象を数理で確認できます。利用率と応答時間タブでは、M/M/1のW = 1/(μ−λ) と、応答時間が指数分布になる性質から導かれる パーセンタイルの閉じた式を実際に計算します。テイル増幅タブでは、ファンアウト数を動かすと 個々のSLOが良好でも合成p99が崩れる様子を確認できます。

サービス率μ=100 req/s(=混雑がなければ処理は10.0ms)のM/M/1。利用率ρを動かすと、平均応答時間とパーセンタイルが実際にどう変わるかを計算します。

混雑倍率 1/(1−ρ)

5.0

平均応答時間 W

50.0ms

系内滞留数 L = λW

4.0

応答時間のパーセンタイル(M/M/1では応答時間が指数分布になるため閉じた式で厳密に出せる)

p50(中央値)34.7ms平均の0.69倍 / 素の処理の3.5
p90115.1ms平均の2.30倍 / 素の処理の11.5
p99230.3ms平均の4.61倍 / 素の処理の23.0
p99.9345.4ms平均の6.91倍 / 素の処理の34.5

1/(1−ρ) 曲線(縦は対数目盛、緑の線が現在のρ。破線はρ=0.5/0.8/0.9)

100倍1倍

ρを0.5から0.8へ動かしても倍率は2→5と緩やかですが、0.9→0.95では10→20と一気に跳ねます——これが「利用率を80%以下に保つ」という経験則の根拠です。 なおM/M/1ではp99 ÷ 平均は常にln(100)≒4.61倍で一定(ρに依存しない)で、 ρ上昇で暴れるのは絶対値のほうです——ρ=0.5でp99が92.1msなのに対し、ρ=0.95では921.0msまで伸びます。

すべてブラウザ内でLittle's Law・M/M/1の閉じた式を計算しています。パーセンタイルは乱択ではなく厳密解(応答時間が率μ−λの指数分布になる性質)で求めており、出荷前に離散事象シミュレーションと突き合わせて一致を確認済みです。

ここが分かる

  • 応答時間は利用率ρに対し1/(1−ρ)で発散する——ρ=0.5→0.8では倍率2→5と緩やかなのに、0.9→0.95では10→20と一気に跳ねる。「利用率を80%以下に」という経験則が曲線の膝の手前に留まれという意味だったことが数値で分かる。
  • M/M/1ではp99 ÷ 平均は常にln(100)≒4.61倍で一定(ρに依存しない)。つまりρ上昇で暴れるのは比率ではなく絶対値——同じ4.61倍でも、平均が10msなら46ms、平均が200msなら920msになる。
  • Little's Law L = λW分布に一切依存しない保存則——ρを動かすと系内滞留数Lが同時に計算され、スレッドプールやコネクションプールのサイズを逆算する土台になることが確認できる。
  • 各バックエンドのp99が良好でも、100個へファンアウトすると約63%のリクエストがどこか1つの遅延に引きずられる(0.99100≒36.6%)——個々のSLOを99.9%へ引き上げると影響が9.5%まで下がることも実測できる。