自分の理解を深めるためにまとめてみました。22章の続きです。
23章 クリティカルな状態の管理
分散システムの協調障害
スプリットブレイン問題
マスタとスレーブ間での通信で障害が発生した場合に、フェイルオーバーがうまく行われず、両方がマスタとして稼働してしまう。ここで問題は、システムがリーダーの選択を単純なタイムアウトで行っていることである。
人間の介入を必要とするフェイルオーバー
人間が介入することでフェイルオーバーの信頼性は上がるかもしれないが、時間という観点で可用性は悪くなってしまう。また管理するサーバが増えるにつれて、人間では対応できなくなってしまう。
分散合意の動作
Paxosの概要
- プロポーザ(提案を行うプロセス)はシーケンス番号をアクセプタに送信する。各アクセプタは自分のそれ以上に大きいシーケンス番号を持つ提案を見ていない場合に限り、その提案を承認する。プロポーザはユニークなシーケンス番号を使わなければならない。
- 過半数のアクセプタから同意を得たら、プロポーザは値を付けてコミットメッセージを送信することで、その提案をコミットできる。
- Paxosが実現するのは、ある値を提案のナンバーに対して1回同意できるようにすることだけ。1つの値に同意しなければならないのはノードの過半数のみなので、任意のノードを取ってみれば、それは同意された値の集合の完全なビューを持っていないかもしれない。
分散合意のためのシステムアーキテクチャパターン
複数ステートマシン
複数ステートマシン(RSM)は同一の処理の集合を同一順序で複数のプロセスで実行するシステム。ピアプロセス間で状態を一致させるにはスライディングウィンドウプロトコルが利用できる。
信頼性を持つ分散キュー及びメッセージング
キューイングベースのシステムはワーカーに割当済みのタスクの処理が正常に実行されることを保証しなければならない。そのためにはキューをすぐに取り除くではなく、リースシステムを使うことが望ましい。アトミックなブロードキャストは信頼性を持ちながら全ての参加者が同じ順序でメッセージを受信する、分散システムのプリミティブ。queueing-as-work-distributionパターンはロードバランシングとしても使える。
(24章に続く)