今日のゴール
- Gossipプロトコルの仕組みを理解する
- メンバーシップ管理を学ぶ
- ノードの動的な参加・離脱を理解する
Gossipプロトコル
噂話(Gossip)のように情報が伝播:
少数のノードに伝え、それが拡散していく。
Gossip設定
let config = GossipConfig(
intervalMs: 1000, # 1秒ごとにGossip
fanout: 3, # 各ラウンドで3ノードに送信
suspectTimeout: 5000, # 5秒応答なしでsuspect
deadTimeout: 30000 # 30秒応答なしでdead
)
let node = newClusterNode("node-1", "0.0.0.0", 9000, config)
メンバーシップ管理
proc membershipExample() {.async.} =
let node = newClusterNode("node-1", "0.0.0.0", 9000)
# ピアを追加
node.addPeer("node-2", "192.168.1.2", 9000)
node.addPeer("node-3", "192.168.1.3", 9000)
await node.start()
# クラスタ統計
let (tuples, peers, alive) = node.stats()
echo "Tuples: ", tuples
echo "Peers: ", peers
echo "Alive: ", alive
# ピアを削除
node.removePeer("node-3")
node.stop()
waitFor membershipExample()
ノードステータス遷移
まとめ
今日はクラスタ構成を学びました:
- Gossip: 分散的な情報伝播
- メンバーシップ: ノードの状態管理
- 障害検出: タイムアウトベースの検出