大規模サービス技術入門を読んだメモ。
大規模サービスの実態
- コスト感覚が大事。
- スケールアップ(富豪的)よりスケールアウト(コモディティ構成)。
- 安いハード並べたほうが柔軟だし、冗長性も確保しやすい。
ハードウェアの制約
- 「推測するな、計測せよ」
- 結局はメモリとディスクの速度差がボトルネック。
- メモリ:ナノ秒
- ディスク:ミリ秒
- この数万倍の差をどう埋めるかが勝負。
OSとアルゴリズムでどうにかする
- メモリに乗らないデータは遅い。
- OSのページキャッシュを活用する。
- 一度読んだらメモリに残るあれ。
- 逆に言うと、再起動直後はキャッシュ空っぽだから死ぬほど遅い(ウォームアップが必要)。
- データ自体を小さくする。
- 圧縮アルゴリズム (VBCodeとか)。差分だけ持って符号化。
- 局所性を活かす。
DBの負荷分散つらい
- APサーバはステートレスだからロードバランサで足すだけ。
- DBはステートフルだから同期問題がつきまとう。
- レプリケーションとかシャーディングとかあるけど、運用コスト高い。
疑問:SSDなら速いんじゃない?
- 本ではHDD前提だったけど、SSD時代でも本質は変わらなそう。
- ランダムアクセスは確かに速い(物理ヘッドないし)。
- でもメモリ(DRAM)に比べたらやっぱり圧倒的に遅い。
- 「極力メモリで済ませる」という鉄則は変わらないっぽい。
まとめ
- 「ハードやソフトが持っている性能以上の性能を出すことは不可能」
- 魔法はないから、仕組み(キャッシュとか)を理解して使い倒すしかない。