@hihihiroroのLog

ダラダラと。本ブログは、個人の意見であり、所属会社とは関係がありません。

「分散システムのためのデザインパターン」を読んだ

大規模な処理をしたいと考えると、分散処理を考える必要が出てくることが多い。
タイミングよく見かけたので読んでみることにした。

目次は以下。

  • 第I部 Narratives
    • Chapter 1 分散システムの可能性とその課題
    • Chapter 2 パターンの概要
  • 第Ⅱ部 データレプリケーションのパターン
    • Chapter 3 書き込み先行ログ(Write-Ahead Log)
    • Chapter 4 セグメント化ログ(Segmented Log)
    • Chapter 5 低位ウォーターマーク(Low-Water Mark)
    • Chapter 6 リーダーとフォロワー(Leader and Followers)
    • Chapter 7 ハートビート(HeartBeat)
    • Chapter 8 多数決クォーラム(Majority Quorum)
    • Chapter 9 世代クロック(Generation Clock)
    • Chapter 10 ハイウォーターマーク(High-Water Mark)
    • Chapter 11 Paxos
    • Chapter 12 複製ログ(Replicated Log)
    • Chapter 13 単一更新待ち行列(Singular Update Queue)
    • Chapter 14 リクエスト待機リスト(Request Waiting List)
    • Chapter 15 べき等レシーバー(Idempotent Receiver)
    • Chapter 16 フォロワーによる読出し(Follower Reads)
    • Chapter 17 バージョン管理された値(Versioned Value)
    • Chapter 18 バージョンベクトル(Version Vector)
  • 第III部 データ分割と複製のためのパターン
    • Chapter 19 固定パーティション(Fixed Partitions)
    • Chapter 20 キーレンジの分割(Key-Range Partitions)
    • Chapter 21 2相コミット(Two-Phase Commit)
  • 第IV部 分割時刻に関するパターン
    • Chapter 22 Lamport クロック(Lamport Clock)
    • Chapter 23 ハイブリッドクロック(Hybrid Clock)
    • Chapter 24 クロックバウンド待機(Clock-Bound Wait)
  • 第V部 クラスタ管理のためのパターン
    • Chapter 25 一貫性コア(Consistent Core)
    • Chapter 26 リース(Lease)
    • Chapter 27 状態監視(State Watch)
    • Chapter 28 ゴシップ伝播(Gossip Dissemination)
    • Chapter 29 緊急時リーダー(Emergent Leader)
  • 第VI部 ノード間の通信に関するパターン
    • Chapter 30 単一ソケットチャンネル(Single-Socket Channel)
    • Chapter 31 リクエストバッチ(Request Batch)
    • Chapter 32 リクエストパイプライン(Request Pipeline)

Chapter 1、2 で分散システムについての話がされている。Chapter 2 で基本的な動きについて図が豊富に使われていて理解がすすんだ。ミドルウェアを使うことが多かった時に見かけた説明が多くてとても懐かしかった。あの当時に本書があれば理解がもう少し早くできたかもなと思った。

note.com

それぞれのパターンの中では、解決したい問題が定義され、解決策として疑似コードと図でパターンの説明がされている。そして、実装例として使われているミドルウェアが紹介されていたりする。いくつか自分が引っ掛かってしまっている問題に関して実装例に書かれているソフトウェアを参考に見にいくのが面白い。

それぞれのパターンの中で他のパターン名が頻繁に出てくることが読んでいくとわかる。どれかだけで解決できることは少ないのだろうから関わり合いが深いものなどを関係性も含めて覚えておきたないと思う。

まとめ

  • 理解が深まりやすく読みやすく書かれていた
  • それぞれのパターンの中で他のパターンが使われる説明がされており勉強になった
  • 関係性も含めて問題に対して適切なパターンを選べるようにしていきたい