リトルの法則とキャパシティプランニング

(引用: Systems Performance figure 2.18 Queueing Model)

リトルの法則とは、安定した系において、平均待ち行列{L}は、平均到着率{\lambda}と平均待ち時間{W}の積に等しい、という法則である。

{ \displaystyle
L = \lambda W
}

(Systems Performanceの原文ではaverage service timeになっていたが、正確にはaverage wait time)

例えば、平均到着率はスループット、平均待ち時間はレイテンシ、平均待ち行列数は、同時処理リクエスト数と捉えることができる。

計算機システムの場合、安定してサービスするためには、同時処理リクエスト数がシステムの上限を超えないことが重要。 同時処理リクエスト数の限界は、例えば単一のprefork型ウェブサーバだと、計算機資源が十分あると仮定すると、ワーカープロセス数で決まることが多い。 しかし、マルチスレッド型やイベント駆動型の場合、プロセスを共有する分だけprefork型よりもロック競合に陥りやすい。 したがって、同時処理リクエスト数の上限が不定であると言える。

そこで、リトルの法則を使うと、システムのキャパシティプランニングの参考になることもある。 事前にレイテンシが倍程度悪化するとわかっていれば、スループットが倍必要になる。1台あたりのスループットが限界近ければ、サーバの台数をちょうど倍増やす必要がある。

よくわからないけど何かでシステムが詰まってるということがよくあると思う。 詰まってからでは遅いので、スループットとレスポンスタイムを可視化して、同時処理リクエスト数が限界に来ていないかを意識するようにしている。 同時処理リクエスト数の上限は、あらかじめLBの重み調整で、同時処理リクエスト数が変化しなくなるまで、1台に負荷をかけてみるとわかる。

参考