System Design入門 設計判断を数字とコードで確かめる
つくる 要件シート
この回でやること
要件シートに並べた数字と制約の数字を突き合わせ、必要な台数と月額から両立しない組み合わせを出します。
- 読む 約 7 分
- 最後にクイズ 1 問
4つを1枚に並べる
この章で読んだ機能要件、非機能要件、制約、非目標を、要件シートにまとめます。今回は、別々に決めた条件が同時に成り立つかを確かめます。
席の予約サービスなら、何ができるかの隣に必要な性能と予算を置きます。落とした案の理由や次の版へ回した要望も残し、同じ議論を繰り返さずに済むようにします。
「ピーク時にも予約できる」と「月5万円まで」を並べると、その性能を予算内で用意できるかという確認が生まれます。1枚にする目的は、こうした条件の矛盾を見つけることです。
仮の性能でも計算を進める
必要な台数は、ピーク時の要求数を1台の処理能力で割り、端数を切り上げます。台数に1台の月額を掛ければ、台の費用を予算と比べられます。
仮なら仮と書き、計算の前提にします。性能を置けば、予算に届くかを見積もり、次に実際の予約処理で何を測るか決められます。
計算が合っていても、仮の性能を実測した保証にはなりません。使った数値を残しておけば、測った結果に置き換えて同じ計算をやり直せます。
予約サービスで解いてみる
DAU 3万人が1人6回要求を送ると、1日18万件です。1日の秒数86400で割ると約2.08 QPSなので、このコースでは平均を約2 QPSと丸めて扱います。
平均2 QPS にピーク係数50を掛けると100件/秒です。1台40件/秒、1台の月額1万円を仮に置き、次のシートを読みます。
| 分類 | 要件シートの内容 |
|---|---|
| 機能要件 | 利用者は空席を見て予約を確定できる |
| 非機能要件 | ピーク100件/秒を処理する |
| 制約 | 月5万円まで、公演初日まで8週間 |
| 非目標 | 初版では多言語対応をしない |
100を40で割ると2.5台分なので、切り上げて3台です。3台に月1万円を掛けると月3万円で、台の費用は予算内に収まります。
次に、発売開始の集中が強まり、ピークを200件/秒へ見直した場合を比べます。200を40で割ると5台、月額は5万円で、台の費用だけで予算を使い切ります。
| ピーク | 台数の計算 | 必要な台数 | 台の月額 |
|---|---|---|---|
| 200件/秒 | 200 ÷ 40 = 5 | 5台 | 5万円 |
| 210件/秒 | 210 ÷ 40 = 5.25 | 6台 | 6万円 |
5台の能力は200件/秒なので、210件/秒には10件/秒足りません。端数を捨てると、ピーク時の要求を処理しきれなくなります。
210件/秒の条件では月6万円となり、予算と両立しません。予算を増やすか性能の前提を見直すかを相談し、保存先など台以外の費用も加えて確かめます。