鱒身(Masu_mi)のブログ

知った事をメモする場所。

Zabの概要

ZooKeeperは同意アルゴリズムにPaxos派生のZabを用いている。 簡易資料は以下が良さそうなので後で読みます。

アンサンブルを構成する各ノードは以下に分類される。

Leader(L)
  • リーダーは、マスタデータを持つ
  • リーダー選出・変更投票に参加する(PARTICIPANTサーバ)
  • リーダーから外れたらフォロワーとなる
Follower(F)
  • フォロワーはリーダーの状態を持つ(Learner)
  • リーダー選出・変更投票に参加する(PARTICIPANTサーバ)
Observer(O)
  • オブザーバーはリーダーの状態を持つ(Learner)
  • リーダー選出・変更投票に参加しない

Zabでは過半数のアンサンブル(Quorum)に支持されているLeaderが存在している前提で動くらしい。 リーダーは多数決で行う。Zabでは、この状態で以下のように行う。

  1. L->F: PROPOSAL(トランザクションログを同期書き込み)
  2. F->L: ACK(書き込み成功したら返信を行う)
  3. L->F: COMMIT(変更操作を有効にする), L->O: INFOM(Observerに通知)

オブザーバは更新合意の投票に参加せずリーダーに選出されることもない。 これは更新のオーバヘッドを抑えつつ読み込みスケールさせるため。

トランザクションログ書き込みメモ

  • 事前に大きめなファイルを確保して、読み込みアクセスをシーケンシャルにする

  • 変更保証のために同期書き込みがクリティカルパス上で発生する
    • 専用デバイスにする事が推奨される