KafkaやKubernetes、Cassandraといった分散システムを日常的に使っているのに、内部でどうやって一貫性やフォールトトレランスを実現しているのかと聞かれると、説明があやふやになる。「クォーラム」や「リーダー選出」といった言葉は知っていても、それらがどう組み合わさって一つのシステムとして動いているのかまでは追いきれていない。『分散システムのためのデザインパターン』は、その内部実装を個別のパターンに分解して、一つずつ手で動かしながら理解させてくれる本だった。
データレプリケーションのパターンを積み木のように積み上げる
本書はまずWrite-Ahead LogやSegmented Log、Leader and Followers、HeartBeat、Majority Quorumといった基礎的なパターンから始まり、それらを組み合わせてPaxosやReplicated Logといったより複雑な仕組みへとつながっていく構成になっている。個々のパターンが独立した知識としてではなく、積み木のように積み上がっていく感覚で読み進められた。
データ分割とクロックのパターンで一貫性の仕組みが見える
後半のデータ分割と複製のパターンでは、Two-Phase CommitやLamport Clock、Hybrid Clockといった、分散環境で時刻や順序をどう扱うかという難所が扱われている。ここを読んでから、普段使っているミドルウェアのドキュメントに出てくる「一貫性モデル」の記述が、急に具体的な実装として頭に入ってくるようになった。
読んでよかったポイント
- Leader and FollowersとHeartBeatのパターンを読んでから、普段運用しているKafkaのリーダー選出やフェイルオーバーの挙動を仕組みから説明できるようになった
- Write-Ahead Logのパターンが、データベースのトランザクションログの意味を根本から理解する助けになった
- Two-Phase Commitの章を読んで、なぜ分散トランザクションが避けられがちなのか、コストの正体が具体的に分かった
- 各パターンが独立した章として整理されているので、自社で使っているミドルウェアに関連する章だけをピンポイントで参照する読み方もできた
- パターンごとに実装コードの断片が示されていて、抽象論で終わらず手を動かしながら理解を確かめられた
まとめ
分散システムのミドルウェアを「使えるけど説明できない」状態のままにしておくのはもったいない。まずは自分が普段触れているミドルウェアに近いパターンの章から読んでみて、その内部実装を自分の言葉で説明できるようにしてみてほしい。