システム設計の面接試験
大事なこと
- システム設計の面接試験は2人の同僚が共同で曖昧な問題に対して目標を満たすソリューションを考え出すという、現実世界における問題解決の疑似体験
1章
- Web層はステートレスに保つ
- 各階層で冗長性を確保する
- できる限りデータをキャッシュ する
- 複数のデータセンターへの対応
- 静的アセットをCDNでホスティング
- シャーディングによるデータ層の拡張
- 各サービスに階層を分離する
- システムの監視と自動化ツールの使用
2章(見積もり)
計算は基本的に忠実。正しい計算にはデータ量の単位を2のべき乗で把握するのが重要になる。
ASCII文字は1バイト(8ビット)のメモリを使用する。
面接では問題解決能力が見られている。
プログラマーが知っておくべきレイテンシの数値
WIP
4章 レートリミットの設計
- 種類
- クライアントサイドのレートリミット
- サーバーサイドのAPIレートリミット
- 異なる制限ルールのセットをサポートする柔軟性を持っている必要がある
- 分散環境で動作するのか
レートリミッターの置き場所
一般的にクライアントのリクエストは悪意のある行為者によって簡単に偽装される可能性があるため、クライアントはレート制限を実施するには信頼性の低い場所となる