このページの目次
Gossip プロトコル
ランダムなピアを選択し、最新情報を互いに交換する——gossip は「雑談」のような方式で、O(log N) ラウンド以内に情報をクラスター全体に伝播させる。リーダーも合意形成も単一障害点もない。その代償として、収束するまでクラスター状態が一時的に不整合になる。メンバーシップの伝播から整合性修復まで、gossip は分散型分散システムの情報ハイウェイである。
3種類のGossip
Gossip の核心は「各ノードが周期的にランダムなピアを選択して情報を交換する」ことにある。情報の流れに応じて3種類に分類される。
Push (Rumor Mongering)
ノードが更新を持つ → ランダムなピアに積極的にプッシュ → ピアがさらにプッシュ。
「ホット」な更新(直近で発生し、急速な伝播が必要な場合)に適している。更新が十分にプッシュされなかった場合(rumor が循環を停止した場合)、フォールバック(anti-entropy)が必要になる。
Pull
ノードがランダムなピアから最新情報を積極的にプルする。新規参加ノードや長時間同期が取れていないノードに適している——プルを1回実行するだけで追いつける。
Push-Pull
双方が要約を交換し → 各自が相手側で自分より新しい更新をプルする。最も効率的——双方が恩恵を受け、ネットワーク利用率が最大になる。
エピデミック・ブロードキャスト
エピデミックは確率的信頼性を保証する:O(log N) ラウンド後、すべてのノードがメッセージを受信する確率はほぼ 1 である。
収束分析
毎ラウンド: 各ノードがランダムな1つのピアを選択して push-pull を実行
Round 1: 1 ノード → 2 ノードが情報を取得
Round 2: 2 → 4
Round 3: 4 → 8
...
Round log₂(N): すべてのノードが情報を取得
これは完全な伝播を仮定している(無限の帯域幅、パケットロスなし)
実際には: ラウンドごとに fanout = O(log N) → 確率的なカバレッジ
信頼性ブロードキャストとの比較
- 信頼性ブロードキャスト(Raft の AppendEntries など): O(N) メッセージ、確定的な信頼性、リーダーが必要
- エピデミック・gossip: ノードあたり O(log N) メッセージ、確率的な信頼性、リーダー不要、ノード障害/ネットワーク分断を許容
Anti-Entropy + Merkle ツリー
Gossip はメッセージを失う可能性がある(確率的であるため)。Anti-entropy は完全な比較によって欠落を補填する。
Merkle ツリー: 各リーフノード = データブロックのハッシュ、各内部ノード = 子ノードのハッシュ。2つのノードがルートハッシュを比較 → 同一であればデータは整合している → 異なれば子ノードを再帰的に比較 → 具体的な不整合ブロックを特定 → これらのブロックのみを送信。
利点: 全データを転送しなくても不整合な部分を特定できる。BitTorrent、Cassandra、Dynamo はすべて anti-entropy に Merkle ツリーを使用している。
SWIM の Gossip レイヤー
SWIM の ping/ping-req レイヤーは障害検出を担当する。検出結果(suspected/confirmed dead)は gossip を介して伝播される。これは push gossip の1つの実装例である:suspected/dead といった稀なイベントのみが伝播される。
参考文献
- 論文: "Epidemic Algorithms for Replicated Database Maintenance" (Demers et al, 1987)
- 論文: "SWIM" (Das et al, 2002 — section 4: Dissemination)
キーワード: gossip, push-pull, エピデミック・ブロードキャスト, anti-entropy, Merkle ツリー, SWIM, 確率的信頼性