つくる 規模シート
5つの数字を1本の線でつなぐ
この章で5つのものを出しました。MAU、平均 QPS、ピーク QPS、保存量、転送量です。
今回は新しいことを覚えません。これまでの計算を順につなぐだけです。
つなぐ理由は、前の答えが次の入力になるからです。順番を間違えると、全部ずれます。
あります。台数はピーク QPS から出しますが、ピーク QPS は平均 QPS から出ます。
平均 QPS を出す前に台数を決めることはできません。計算には向きがあります。
0台という構成は無い
平均 QPS が0でも、サーバーは1台要ります。
利用者が1日500人なら平均は0 QPS ですが、0台では誰も予約できません。
Python
# 切り上げた結果が0台になっても、最低1台にする計算は正しく、答えが間違っています。
割り算が答えるのは「何台ぶんの負荷か」で、聞いているのは「何台用意するか」です。式が答えない部分は、こちらで決めます。
これは後の章でも何度も出てきます。数字は判断の材料で、判断そのものではありません。
値に名前を付けて計算をつなぐ
Python では = で右側の値を左側の名前に入れます。* は掛け算、/ は割り算です。前の行で付けた名前を、次の式に使えます。文房具の送料なら、次のように計算します。
Python
boxes = 4
items_per_box = 12
items = boxes * items_per_box
postage = items * 5
postage_per_box = postage / boxes演習では条件の取り出しと丸めを渡します。nearest_integer(value) は0.5以上の端数を切り上げる四捨五入、servers_needed(value) は端数を切り上げて最低1台、whole_part(value) は小数部分を落とす関数です。例えば nearest_integer(2.5) は3、servers_needed(0) は1、whole_part(4.9) は4です。関数は名前の後の括弧に値を渡して使います。
第11回と同じく 1MB は100万バイト、1Mbps は毎秒100万ビットです。本文の約561MBは概数で、この演習では小数部分を落として560MBにします。返す辞書の組み立ては完成しています。受講者が書くのは6つの計算式です。
演習
席の予約サービスの条件をまとめて受け取り、規模シートを1つの辞書で返します。
要件
- requests_per_day は dau × requests_per_user。average_qps は requests_per_day ÷ SECONDS_PER_DAY を nearest_integer で四捨五入した整数
- peak_qps は average_qps × peak_ratio。servers は peak_qps ÷ qps_per_server を servers_needed に渡す。端数を切り上げ、最低1台にする
- storage_mb は rows_per_day × bytes_per_row × days ÷ 1000000 を whole_part に渡す。1MB は100万バイトで小数部分を落とす
- peak_mbps は peak_qps × response_bytes × 8 ÷ 1000000 を whole_part に渡す。1Mbps は毎秒100万ビット
- 条件の数値は0以上、qps_per_server は正の数。SECONDS_PER_DAY は86400。出力の6項目はひな形がまとめる