1台構成の限界
1台が捌ける数は計算できる
サーバーが1秒に何件捌けるかは、1件にかかる時間から出ます。
1件に25ミリ秒かかるなら、1本の処理の流れで1秒に40件です。1000 ÷ 25 で40になります。
Python
# 1000ミリ秒 ÷ 25ミリ秒 = 40件1本ぶんの数字です。実際は同時に何本も動きます。
4本動くなら 40 × 4 で160件です。速さは1件の時間、量は同時に動く本数で決まります。
詰まる所は1つではない
処理の流れの本数を増やせば、いくらでも捌けるわけではありません。
本数を増やすとメモリが足りなくなり、データベースへの接続も足りなくなります。
数えません。まず1件の時間を短くします。
25ミリ秒を10ミリ秒にすれば、同じ4本で400件になります。本数を増やすより効きます。
この章ではまず、いまの1台で足りるかどうかを出せるようにします。
先に詰まるのはデータベース
アプリの本数を4本から8本にすると、データベースへの接続も倍になります。
アプリより先にデータベースが詰まることがよくあります。
接続の数には上限があり、超えた要求は待たされます。待った時間はそのまま1件の処理時間に乗るので、上限がさらに下がります。
増やせますが、増やした数がそのまま速さになるわけではありません。
同じディスクを取り合うので、ある本数を超えると全体が遅くなります。増やす前に、1件が本当に必要な読み書きだけをしているかを見ます。
演習
1件の処理時間と同時に動く本数、そしてピーク QPS から、1台で足りるかを判定します。
要件
- qps は 1000 ÷ ms_per_request の整数部分 × workers
- enough は peak_qps が qps 以下なら True、超えていたら False
- shortfall は足りない件数。足りているときは 0 にする
ヒント
編集 ゆめさく編集部