構造化オーバーレイネットワークに適した 分散双方向連結リストDDLL

Slides:



Advertisements
Similar presentations
演習3 米澤研究室 発表2 山崎孝裕. 主な内容  分散動的サーバモデル(復習)  掲示板システムの問題点と仮定  掲示板システムの大まかな動き(細かい エラー処理は考慮しない)
Advertisements

アルゴリズムとデータ構造 第8回 ソート(3).
第11回 整列 ~ シェルソート,クイックソート ~
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
アプリケーションレベル マルチキャスト Emma の 性能向上に関する検討
仮想ブロードキャストリンクを利用した 片方向通信路の透過的経路制御 藤枝 俊輔(慶應義塾大学)
IPv6 エニーキャスト ルーティングプロトコル PIA-SM の設計および実装
On the Enumeration of Colored Trees
スケールフリーネットワークにおける 経路制御のためのフラッディング手法の提案と評価
神奈川大学大学院工学研究科 電気電子情報工学専攻
TCP (Transmission Control Protocol)
Handel-Cによる       エアホッケー.
情報工学概論 (アルゴリズムとデータ構造)
第6章 トランザクション管理 6.1 トランザクションの概念 6.2 同時実行制御 6.3 障害回復.
オペレーティングシステムJ/K 2004年11月4日
リンクパワーオフによる光ネットワークの省電力化
センサノード 時刻同期と位置測定 浅川 和久 2008/11/16 センサノード 時刻同期と位置測定.
輪講: 詳解TCP/IP ACE B3 suzuk.
新規配信先リスト登録 配信実行及び経過確認 配信状況確認 メルマガ関連(オプション)
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
Web上で管理・利用できる 面接予約データベースシステムの構築
予備親探索機能を有した アプリケーションレベルマルチキャスト
10.通信路符号化手法2 (誤り検出と誤り訂正符号)
モバイルP2Pを用いた携帯電話 動画配信手法の提案 第3回
大規模アドホックネットワークにおける 階層的な名前解決法
サーバ負荷分散におけるOpenFlowを用いた省電力法
Occam言語による マルチプリエンプティブシステムの 実装と検証
IPv6 ネットワークにおける エニーキャスト通信実現のための プロトコル設計と実装
大阪大学 大学院情報科学研究科 博士前期課程2年 宮原研究室 土居 聡
第11章 UDPユーザ・データグラム・プロトコル
TCP/UDP プロセス間の通信のためのプロトコル TCP:信頼性高、処理時間大 UDP:信頼性低、処理時間小 ftp SMTP HTTP
第9章 Error and Control Messages (ICMP)
マルチスレッド処理 マルチプロセス処理について
Ibaraki Univ. Dept of Electrical & Electronic Eng.
アルゴリズムとデータ構造1 2005年7月15日
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造勉強会 第6回 スレッド木
私の立場 OSカーネルを手がけるエンジニア 大阪市立大学 創造都市研究科の学生
第9回 優先度つき待ち行列,ヒープ,二分探索木
並行プログラミング concurrent programming
モバイルエージェントネットワークの拡張とシミュレーション
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
離散数学 07. 木 五島.
Cプログラミング演習 第10回 二分探索木.
アルゴリズムとデータ構造1 2005年7月5日
IP over DVB-RCSの設計と実装
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
計算機工学III オペレーティングシステム #4 並行プロセス:排他制御基礎 2006/04/28 津邑 公暁
片方向通信路を含む ネットワークアーキテクチャに於ける 動的な仮想リンク制御機構の設計と実装
プログラミング 4 木構造とヒープ.
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
P2P ネットワーク上で 実時間ストリーミングを実現するための 分散制御プロトコルの提案
Peer-to-Peerシステムにおける動的な木構造の生成による検索の高速化
アルゴリズムとデータ構造1 2006年7月11日
コンピュータアーキテクチャ 第 4 回.
ISO23950による分散検索の課題と その解決案に関する検討
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造 2011年6月16日
オペレーティングシステムJ/K (管理のためのデータ構造)
アルゴリズムとデータ構造1 2006年6月23日
情報工学概論 (アルゴリズムとデータ構造)
アドホックルーティングにおける 省電力フラッディング手法の提案
第11回放送授業.
強制パススルー機構を用いた VMの安全な帯域外リモート管理
異種セグメント端末による 分散型仮想LAN構築機構の設計と実装
アルゴリズムとデータ構造 2013年6月20日
Q q 情報セキュリティ 第8回:2004年5月28日(金) の補足 q q.
Q q 情報セキュリティ 第7回:2005年5月27日(金) q q.
インセンティブにより自律ユーザに 高品質なオーバーレイマルチキャスト木を 構築させるプロトコルの提案
第8章 データベースシステムの発展 8.1 オブジェクトリレーショナルデータベース 8.2 分散データベース 8.3 インターネットとデータベース.
Presentation transcript:

構造化オーバーレイネットワークに適した 分散双方向連結リストDDLL 安倍 広多 (大阪市立大学) 吉田 幹 (BBR) 2010.09.17 DPS144

分散双方向連結リストとは ネットワークで接続された複数のノードが 双方向連結リストを構成 各ノードは右ノードと左ノードへのポインタ (IPアドレスなど)を保持 各ノードが保持するキーによってソートされている 循環リストを想定 2010.09.17 DPS144

分散双方向連結リストの応用例 自律分散的に動作する分散双方向連結リストが必要 構造化オーバーレイ(P2P)ネットワークでよく用いられる Chord, Chord#, Symphony, Skip graph, SkipNet, etc. 自律分散的に動作する分散双方向連結リストが必要 Skip Graph James Aspnes and Gauri Shah "Skip Graphs", ACM Trans. on Algorithm, 2007 2010.09.17 DPS144

分散双方向連結リストの難しいところ ノードは勝手なタイミングで挿入・削除 ノードは削除手続きを実行せずに(勝手に)離脱・故障 複数ノードが並行して挿入・削除するかも ノードは削除手続きを実行せずに(勝手に)離脱・故障 これらを考慮したアルゴリズムが必要 ノード挿入 ノード削除 リンク修復 2010.09.17 DPS144

従来の手法 楽観的アプローチ (Chordなど) 排他制御アプローチ 周囲のノードを気にせずに挿入・削除 連結リストを理想的な状態に戻すために定期的に修復 利点: リンク修復が容易 欠点: (理想的な状態ではない間)到達できないノードが存在 排他制御アプローチ 分散排他制御を用いて厳密に挿入・削除 利点: 挿入されているノードに必ず到達できる 欠点: 障害からの回復が困難(ノードが故障した場合,ロックされたままに) 挿入されているノードに必ず到達可能で,かつ 障害からの回復が容易なアルゴリズムが欲しい 2010.09.17 DPS144

DDLLアルゴリズム (障害を考慮しないバージョン) 2010.09.17 DPS144

前提 ノードの実行速度は任意 ノード間の通信路: 全てのキーはユニーク(重複しない) 送信したメッセージはいずれ到着 伝送時間の上限はない FIFOでなくてもよい 全てのキーはユニーク(重複しない) キーの後ろに十分なビット数の乱数を 付け加えれば良い 2010.09.17 DPS144

DDLLでの挿入・削除の基本的な流れ 挿入・削除のどちらの場合でも まず,左ノードの右リンクを書き換える(右リンク更新処理) 次に,右ノードの左リンクを書き換える(左リンク更新処理) 挿入 削除 SetRメッセージ 右リンク更新要求 SetRAckメッセージ 確認応答 SetLメッセージ 左リンク更新要求 2010.09.17 DPS144

右リンク更新処理 | 提案手法 分散排他制御を用いずに安全に右リンクを更新 a-b間にノードuを挿入する場合: uは左リンクをaに,右リンクをbに張る uはSetRメッセージで新リンク先(u)とaの現在の右リンク先(b)をaに送信 aは,aが削除中ではなく,かつ右リンク先が等しい場合に限り 右リンクを更新し,SetRAckを返す 複数ノードが同時にa-b間に挿入しようとしても,SetRに成功するのは1つ → 分散排他制御不要 aの右リンクがuになったとき,uの右リンクはbになっている → 右リンクは途切れない(一瞬たりとも) 2010.09.17 DPS144

右リンク更新処理 | 例 複数ノードが同時にa-b間に挿入しようとしても,SetRに成功するのは1つ → 分散排他制御不要 aの右リンクがuになったとき,uの右リンクはbになっている → 右リンクは途切れない(一瞬たりとも) 2010.09.17 DPS144

? 左リンク更新処理 | 問題1 右リンクの更新に成功したら左リンクを更新 SetLメッセージの到着順序はSetRの順番通りとは限らない! → SetRAckを受け取ったらSetLメッセージを送信 SetLメッセージの到着順序はSetRの順番通りとは限らない! ? 2010.09.17 DPS144

左リンク更新処理 | 問題1の解決法 SetLメッセージにシーケンス番号を付与 各ノードに右リンク番号と左リンク番号を割り当てる SetLメッセージを送信する時点で同一ノードを宛先とする SetLメッセージのシーケンス番号を決定できる → SetLメッセージを受信順序に関係なく処理可能 各ノードに右リンク番号と左リンク番号を割り当てる 左リンク番号: 今までに受信したSetLメッセージの最大シーケンス番号 挿入直後は 0 右リンク番号: 右ノードの左リンク番号 基本的に左右のリンク番号は等しい(過渡的な状態を除けば) 2010.09.17 DPS144

左リンク更新処理 | リンク番号の更新方法 ノードが受信するSetLメッセージに, 送信時点でシーケンス番号を付与できる 挿入 削除 2010.09.17 DPS144

SetLの到着順序が入れ替わっても問題ない! 左リンク更新処理 | 同時挿入の例 Dの右リンク 番号=6 Bの右リンク 番号=4 Cの右リンク 番号=5 SetLの到着順序が入れ替わっても問題ない! 2010.09.17 DPS144

左リンク更新処理 | 問題2 左リンクを常に使えるようにするために... このままだと左リンクが削除済みノードを指す場合がある 2010.09.17 DPS144

左リンク更新処理 | 問題2の解決法 参照カウンタ(ref)の導入 左リンクによって参照されている数をカウント SetRメッセージを受信 → 1加算 UnrefLメッセージを受信 → 1減算 SetLを受信したノードは変更前の左ノードにUnrefLメッセージを送信し,参照されなくなったことを通知 ノードは ref = 0 になれば停止可能 2010.09.17 DPS144

検索処理 DDLLでは これを考慮してリストをトラバースする 必要がある 右リンクは常に正しいノードを指す 左リンクは常に正しいとは限らない 左リンクを使うときは注意が必要 詳細は省略 2010.09.17 DPS144

DDLLアルゴリズム (障害を考慮するバージョン) 2010.09.17 DPS144

リンク修復 故障したノードをバイパスして連結リストを修復 各ノードは左側のリンクを修復 前提: 修復して接続するノードは求められる 左リンク番号を単調に増加させるため 各ノードは,定期的に左ノードをチェック 前提: 修復して接続するノードは求められる 左側のk個のノードを保持しておくなど 2010.09.17 DPS144

修復時のリンク番号の問題 単純に左リンク番号を+1すると困る例 Bの故障直前にXが挿入したが,Cはそのことを知らずに修復開始 Cを右リンクとするノードが2つ存在し(A, X),右リンク番号も同一! X-C間に新たなノードYが挿入されると,Cの左リンクはYを指してしまう 2010.09.17 DPS144

解決策(リンク番号の拡張) リンク番号を(g, s)形式に拡張 gが大きい方が優先 リンク修復前の状態には戻らない 2010.09.17 DPS144

各ノードが保持する変数 ノードの状態 キー 右リンク(右ノードへのポインタとキー) 左リンク(左ノードへのポインタとキー) 右リンク番号 out リストから外れている ins 挿入するために左ノードにSetR送信中 inswait insでSetRNakを受信し,リトライ待ち in 少なくとも右方向は挿入済み del 削除するために左ノードにSetR送信中 delwait delでSetRNakを受信し,リトライ待ち grace 削除時に,refが0になるのを待機中 キー 右リンク(右ノードへのポインタとキー) 左リンク(左ノードへのポインタとキー) 右リンク番号 左リンク番号 参照カウンタ (ref) 2010.09.17 DPS144

詳細な アルゴリズム 2010.09.17 DPS144

本発表で割愛した点 検索アルゴリズム 修復時の参照カウンタの取り扱い ノード故障誤検出からの修復 挿入・削除時のノード故障の取り扱い 生きているノードを(誤って)故障していると判断した場合でも回復できる 挿入・削除時のノード故障の取り扱い ノードの再挿入の取り扱い 2010.09.17 DPS144

まとめ 分散双方向連結リストを構築・維持する自律分散アルゴリズムDDLLを提案 DDLLの特徴 複数のノードが並行して挿入・削除する場合でも, 連結リストの構造は常に維持 挿入されたノードには必ず到達できる(ネットワーク分断が発生しない限り) 分散排他制御を用いない ⇒ ノード故障時に容易に修復可能 アルゴリズムは単純で容易に実装可能 構造化オーバーレイネットワークにDDLLを適用した場合, 信頼性の向上 リンク修復処理の簡略化 今後の課題 DDLLを用いた構造化オーバーレイネットワークの実装と評価 2010.09.17 DPS144

2010.09.17 DPS144

予備スライド 2010.09.17 DPS144

検索アルゴリズム 前提: 挿入しようとするノードuは何らかの方法で挿入済みのノードqを知っている n:=qとする.q < uならば p:=q.l,そうでなければ p:=q.r ord(n, u, n.r) = true ∧ n.s ≠ grace → n と n.r がそれぞれ u の左ノード,右ノードの候補 ord(n,u,p) = true ∧ n.s ≠ grace → p := n; n := n.r とし,2に戻る p := n; n := n.l とし,2 に戻る 2010.09.17 DPS144

楽観的アプローチの例 | Chord A-D間にBとCを並行挿入した場合 定期的にスタビライズ処理を行って正常にする 到達できないノードが存在! u.join() left = nil; right = b; u.stabilize() x = right.left; if (x ∈ (u, right)) right = x; right.notify(u); u.notify(n') if (left = nil or n' ∈ (left, u)) left = n' 2010.09.17 DPS144

排他制御アプローチとその問題点 例: a-b間にuを挿入する場合,aで排他制御するパターン 問題点1: 障害に弱い 問題点2: 性能上の問題 aはロックされていなければロックし,uにロック完了通知を送信 応答を受信したuはaの右リンクとbの左リンクを変更 uはaにロック解放要求を送信 問題点1: 障害に弱い step 4の前にuが故障したらロックが解放されない タイムアウトでロック解放する方法は危険 問題点2: 性能上の問題 ロックしている間,aの右側に他のノードは挿入できない ロックしている間,bは削除できない 2010.09.17 DPS144

SetLの到着順序が入れ替わっても問題ない BとCが同時にAとDの間に挿入 同時挿入の例 右リンク ミスマッチ SetLの到着順序が入れ替わっても問題ない 2010.09.17 DPS144

リンク不整合から の回復 EがCを故障していると誤って判定した場合からの回復 2010.09.17 DPS144