谷口 雄作 - @yuusaku_tan
Efficient Reconciliation & Flow Control
for Anti-Entropy Protocolsをざっくり紹介
第9回 Cassandra勉強会 2010年7月,東京
http://d.hatena.ne.jp/yuusaku_tan/
Agenda
•Cassandra におけるGossipの利用
•論文紹介(本題)
•その他関連トピックス
谷口 雄作 - @yuusaku_tan
CassandraにおけるGossipの利用
主な目的
日々変化する情報(state)をクラスタ内で共有する
state
谷口 雄作 - @yuusaku_tan
Gossipを利用した機能
•ノード管理(membership)
•障害検出
•etc.
※参考文献 Cassandra - A Decentralized Structured Storage System Avinash Lakshman, Prashant Malik LADIS 2009
Efficient Reconciliation and Flow Control for Anti-Entropy Protocols
Robber van Renesse, Dan Dumitriu, Valient Gough Chris Thomas LADIS 2008
谷口 雄作 - @yuusaku_tan
本論文の概要
•Gossip の基礎
•Anti-Entropy Protocol を対象とした資源節約術
‣ Reconciliation に対する工夫
‣ Flow Control に対する工夫(今日は割愛します)
Gossipの基礎
論文紹介
谷口 雄作 - @yuusaku_tan
P2P型の情報共有
state
state
state
•stateは各ノード内で管理(1カ所で中央管理しない)
•各ノードは他のノードと定期的に情報交換を行い、自分が管理 するstateを更新
state
state
stateのデータ構造
共有する情報を辞書として表現
•
データが作成されたノード毎に分類•
他のノードのデータは情報交換を通してのみ更新可能 value 1 version 1 value 2 version 1 key 1key 2 node A
count up
value 1 version 1 key 1
node B
谷口 雄作 - @yuusaku_tan
Gossipの種類
•Anti-Entropy protocol
‣ push
‣ pull
‣ push-pull:本論文の焦点
•Rumor-mongering protocol
Push-pull 式の情報交換
1. 参加者の中から情報交換の相手を選択
B
C E
A
谷口 雄作 - @yuusaku_tan
Push-pull 式の情報交換
何か新しい情報 持ってたら下さい
node A
digest Anode B
2. 自分が管理しているstateの概要を相手に送信
Push-pull 式の情報交換
node A
sub-state B & order-sheet Anode B
あなたの持ってる情報 私のより新しいので
ついでに下さい
3. 相手から更新情報を受け取って自分のstateを更新
谷口 雄作 - @yuusaku_tan
Push-pull 式の情報交換
node A
sub-state Anode B
4. 相手が必要としている情報を送信
どうぞー
情報交換に使用するメッセージの基本構造
各更新情報をタプルとして表現
タプルのリストとしてメッセージを構成
node A key 1 value 1 version 1 node A key 2 value 2 version 1 node B key 1 value 1 version 1
...
谷口 雄作 - @yuusaku_tan
Gossipに基づく情報共有の課題
谷口 雄作 - @yuusaku_tan
資源の枯渇
•情報交換に利用可能な資源に限りがある
•Gossip経路が渋滞するにつれ、情報の伝搬が遅延
資源の節約
•情報交換に使用する各メッセージの最大サイズを規定
•各ノードのGossip率を制限
谷口 雄作 - @yuusaku_tan
Reconciliation
論文紹介
Reconciliation とは
•stateの不一致を解消する操作のこと
•情報交換を行いstateを更新する一連の流れ
state statenew
node B node A
statesub
node A
=
谷口 雄作 - @yuusaku_tan
更新情報の優先度
•資源節約のため、一度に交換できる更新情報の数が制限される
•各更新情報に対して優先度を付与、メッセージサイズの許す限り 優先度の高い情報を選び抜く処理が必要になる
パフォーマンスに影響する主なポイント
•更新情報の検出方法
•digest のデータ構造
•メッセージに格納する更新情報の優先基準
谷口 雄作 - @yuusaku_tan
本論文で紹介されているメカニズム
•precise(比較対象)
•scuttlebutt(提案手法)
Precise Reconciliation
論文紹介
谷口 雄作 - @yuusaku_tan
更新情報の検出方法
検証対象 各keyのversion番号
node A key 1 version 1 version 4 node A
key 2 version 1 version 1 node B key 1 version 2 version 1
state
m
state
p
new!
digest のデータ構造
node A key 1 version 1 node A key 2 version 1 node B key 1 version 1
...
送信データ ノード名・key・version番号
谷口 雄作 - @yuusaku_tan
メッセージに格納する更新情報の優先基準
2種類の基準を紹介
•precise-oldest
•precise-newest
precise-oldest
更新発生からより時間が経過している情報を優先
旧
新
...
node A key 1 val. 1 ver. 1 node B key 2 val. 2 ver. 1 node A key 2 val. 2 ver. 2
node B key 1 val. 1 ver. 7 node A key 3 val. 3 ver. 9
谷口 雄作 - @yuusaku_tan
precise-newest
更新発生から間もない情報を優先
node A key 1 val. 1 ver. 1 旧
新
...
node B key 2 val. 2 ver. 1 node A key 2 val. 2 ver. 2
node B key 1 val. 1 ver. 7 node A key 3 val. 3 ver. 9
Scuttlebutt Reconciliation
論文紹介
谷口 雄作 - @yuusaku_tan
state の管理
version番号が通し番号となるように制約を加える
value 1 version 1 value 2 version 2 key 1
key 2 node A
unique
value 1 version 1 key 1
node B
value 3 version 3 key 3
更新情報の検出方法
検証対象 各ノードの最大version番号
node A version 1 version 4 node B version 2 version 2
state
state
new!
更新情報の範囲 version 2∼4
谷口 雄作 - @yuusaku_tan
digest のデータ構造
node A version 2 node B version 1
...
送信データ ノード名・最大version番号
メッセージに格納する更新情報の優先基準
2種類の基準を提案
•scuttlebutt-breadth
•scuttlebutt-depth
谷口 雄作 - @yuusaku_tan
scuttlebutt-breadth
旧 新
多
少
node A node B
node C node D node E
メッセージに格納されるノード数を優先
scuttlebutt-depth
旧 新
多
少
node A node B
node C node D node E
取り残されているノードの更新情報を優先
谷口 雄作 - @yuusaku_tan
評価:Precise vs. Scuttlebutt
論文紹介
実験の概要
各 reconciliation メカニズムのパフォーマンスを比較
検証環境
•ノード数:128
•各stateで64個のkeyを共有
•各更新イベントで更新するkeyの数:1
•メッセージサイズの制限を検証開始15秒後から実施
谷口 雄作 - @yuusaku_tan
更新イベントの発生率
時間 [秒] 発生率 [イベント数/秒]
0 1 2 3
0 20 40 60 80 100 120 140
25
75
クラスタ全体におけるkeyの更新率
時間 [秒] 更新率 [key/秒]
0 128 256 384
0 20 40 60 80 100 120 140
25
75
谷口 雄作 - @yuusaku_tan
最大遅延時間の比較
時間 [秒] 最大遅延時間 [秒]
遅延数の比較
遅延数
時間 [秒]
谷口 雄作 - @yuusaku_tan
まとめ
scuttlebutt-depth
の結果が一番良かった
その他関連トピックス
谷口 雄作 - @yuusaku_tan
Cassandra 用語集の中で関連しそうな項目
•Merkle Tree
•Φ Accrual Failure Detector
•Snitch
※参考文献 Apache Cassandra Glossary's Japanese Translation
http://mocchira.posterous.com/apache-cassandra-glossarys-japanese-translati
Merkle Tree
•データ集合を小さな形式に要約した2分木構造
•暗号化や、ファイルや伝送データのベリファイに用いられる
•Cassandraでは、情報交換の際に使用される
‣ Column Family のhash値を計算
谷口 雄作 - @yuusaku_tan
Φ Accrual Failure Detector
•障害が発生したノードを検知するプロセス
•Cassandra では Φ Accrual Failure Detector に 更に手を加えたものを使用している
※参考文献 Φ Accrual Failure Detector Naohiro Hayashibara, Xavier Défago, Rami Yared, and Takuya Katayama In RR IS-RR-2004-010, JAIST, 2004
Snitch
•ノードとネットワークの物理的な位置を結びつける手法
•クラスタ内の相対的なノードの位置決定を支援する
‣ 新ノードの発見と効率的なRequest Routingの実現
谷口 雄作 - @yuusaku_tan