Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

待ち行列理論とサーバサイジングのインピーダンスミスマッチ

待ち行列理論では、通常M/M/1待ち行列から始まってM/M/N待ち行列に進むわけだけど、どちらにしても到着間隔・サービス時間ともマルコフ過程に従うモデルになっている。

では一方で、Web APIを提供するアプリケーションサーバの非機能設計をすることを考える*1。このときに考えるパラメータや、結果として得たい値が、待ち行列理論のパラメータとミスマッチを起こしているのでは?と感じることがあったのでメモしておく。

  • 到着間隔

    • サーバサイジングを考える際は、単位時間あたりの最大同時利用ユーザ数をクリアできればよい。到着間隔は完全に一定でよい。マルコフ過程とした場合、到着間隔が最大同時利用ユーザ数を超えているウィンドウは、設計値をオーバーした高負荷状態と見做せるため、サイジング(ロードテスト)というより死に様試験(ストレステスト)の領域になる。
  • サービス時間分布

    • 「1秒以内に終わる参照系処理が70%、5秒以内に終わる更新系処理が残りの30%」のように、複数の平均サービス時間を持つ処理が混ざって実行される。そのため、1つの平均サービス時間ですべての処理を代表することが難しい。
    • 性能目標値は平均サービス時間でなく「95パーセンタイルの処理が性能目標値以内の時間で実行される」のような形で定義される(たとえばDBMSでも「n秒以内に完了しない場合はスロークエリとしてログを出力する」のような設定を行う)。そのため、各処理のサービス時間自体も、1つの平均値ではなく「95%は5秒、残り5%は10秒」のような形で表現することになる。
  • サービス数

    • そもそもCPU数が1つのサーバを使うケースがレアになっているし、CPU数が1つでもアプリケーションサーバの同時実行スレッド数が1つということはないはず。処理を時分割実行することは想定されていない。
  • 待ち時間

    • サイジングの際に知りたい情報は待ち時間だけではない。CPUの利用率は50%以下になるか? ロードバランサによる負荷分散が特定のサーバに集中して性能目標値を達成できなくなる事象がどの程度の確率で発生するか?といったことをシミュレーションなしに知りたいが、これを算出できるモデルは見当たらなかった。

*1:たとえばIPAの非機能要求グレード参照 https://www.ipa.go.jp/sec/softwareengineering/std/ent03-b.html