Distributed Algorithm 輪講 13 章 米澤研究室修士2年 小林 義徳 Why Fault-tolerant Algorithm? 単一プロセッサシステム+逐次アルゴリズム fault-tolerant にできることが限られている。 分散システム ~ partial-failure property 故障が起こっても、一部のみ影響を受ける 全体の故障より、段階的な悪化が望まれる。 故障したコンピュータの仕事を、残りの部分が代 わりにやることが必要になる。 Fault tolerance Robust Algorithm 部分的、半永久的故障に耐性 Stabilizing Algorithm 全体的、一時的故障に耐性 Robust Algorithm 実行の途中で 故障があっても、全体として ずっと正しい振る舞いをしつづける。 以下、プロセスのみが故障し、通信路は常 に正常であるとする。 しかし、failure 数の上限がある Failure model が正確に分かるべし この本でのFailure Model(p.429) Initially dead processes 1 step も local アルゴリズムを実行しない Process の crash 有限 step 正しく実行し、その後のステップを実 行しない Byzantine behavior Local algorithm とは違う、デタラメなステップを 実行 Byzantine process は、デタラメなメッセージを send する The hierarchy of fault models 1. Initially dead processes 2. Process の crash 3. Omission Failure Fault tolerance 易 プロセスが、アルゴリズムの途中を抜かして実 行を続けてしまう。 4. Byzantine behavior 難 Failure について、 1.⊆2.⊆3.⊆4. 例: omission は、Byzantine の特別な場合 例: Byzantine-robust なアルゴリズムは、omission-robust Decision Problems Decision に対する 3 つの要求 Termination 正しいプロセスは、必ず結果を output する。 Consistency 全てのプロセスの output 間で、一貫性がとれて いること(後述) Non-triviality 他のプロセスと通信せず、固定された出力をする アルゴリズムは考えない Decision Problems - Consistency 例 Consensus problem では、全ての正しいプロ セスの出力が一致 Election problem では、一つのプロセスのみ 出力 “1”、他のプロセスの出力 “0” Stabilizing Algorithm どんな Failure がどれだけの数起こっても OK しかし、正しい振る舞いに戻るのにいくらか 時間がかかる。 Robust v.s. Stabilizing Stabilizing 例えば、宇宙船に大量の宇宙線がきて、 global configuration が一時的に駄目になっ ても、立ち直れる。 Robust 一部の限られた要素が永久に故障 一時的なサービスの停止が許されない場合に 使われる。 この本に載っていないこと Refinement of synchrony assumptions Determination of solvable tasks Complexity of fault tolerance Dynamic systems and group membership Communication using shared variables Wait-free synchronization Overview of Chapter 14 - 16 14 章: Asynchronous system での Robustness について。 15 章: Synchronous system,Robustness Synchronous system では、確実な Failure Detection ができ、より高いレベルの robustness が達成可能。 16 章: Failure Detection Distributed Algorithm 輪講 14 章 米澤研究室修士2年 小林 義徳 予備知識 Consensus Problem 全てのプロセスの決定が一致 Election Problem プロセスの中から、リーダーを一つ選出 14 章の流れ 14.1 Impossibility of Consensus 非同期、決定的 1-crash-robust consensus protocol ない。 いくらか条件を緩めることにより、 解ける問題もある。 14.2 ,14.3 14.2 Fault を Initially dead process に 制限することにより、consensus と election ができるようになる。 14.3 consensus よりプロセス間の連携 が弱い問題で、crash model でも解けるも のがある。 例: renaming 14.4 ,14.5 14.4 Probabilistic algorithm を用いるこ とで、Byzantine failure の存在下でも OK なように、termination requirement を弱 められる。 14.5 与えられたプロセスが正しい場合、 Termination を要求することで、 Byzantine-robust も可能になる t-robust protocol における fork γ T 1-valent T 0-valent T : 多くとも t 個のプロセス t 個までは、 fault が起こっても大丈夫 There is no reachable fork. Bivalent configuration for A プロセス p のみ異なる δ ・・・・・・・ γ γ・・・・・・δ 0 0 1 1 p が動かない場合 1-crash-robust なので、 γとγは同じ 0 1 0-decided 1-decided No 1-crash-robust, deterministic consensus algorithm 何かイベントの列があったとき、 bivalent なまま もう 1ステップ実行できる いつまでも決定を下さない、 fair execution が作れてしまう。 1-crash-robust, deterministic consensus algorithm は、ない。 14.2 Initially Dead Process Fault を Initially Dead に限ると、 consensus , election ができる。 Resilience は、(N-1)/2 (端数は切り捨て) Election の流れ 各プロセスが、生きているプロセスの集合を Algorithm 14.1 によって取得し、その中で最大 の ID を持つものをリーダーとして選出 以下、L = (N + 1)/2 (N が奇数) N/2 + 1 (N が偶数) とする。 少なくとも L 個のプロセスが生きている場合、 Algorithm 14.1 1. 各プロセスは、自分の存在を broadcast 2. 他のプロセスが 1. で発したメッセージを L個受け取り、自分のsuccessor に加える。 P の successor (L 個) p q1 q2 Algorithm 14.1 3. 生きているプロセス同士、互いに自分のsuccessor を教えあう。 4. 3.の情報をもとに、グラフ G を構築。 2L > N なので、グラフ G には、knot がただ一つ 存在する(これを K とする)。 Knot : 二個以上のnode からなり、 外への edge を含まない 強連結な component knot Election,consensus K の中から例えば、ID の一番大きいもの を リーダーに選ぶようにすれば、 election が完成。 全体の決定をリーダーに任せるようにすれ ば、consensus もできる。 Consensus under Crash Model Crash Model では、全体の決定をリーダー に任せるようにしても、リーダーが落ちる可 能性があるので、ダメ。 さらに言うと、 Crash Model では、Election 自体も不可能。 14.3 Deterministically Achievable Cases よりプロセス間の連携が弱い問題では、 Deterministic に解けるものもある。 この章では、その中の、Renaming アルゴ リズムを解説する。 Renaming : Algorithm 14.2 問題 : 各プロセスの古い名前を新しい名 前に付け替える 古い名前(namespace 無制限) 新しい名前(namespace が限られている) ただし、古い名前、新しい名前とも、全プロセスで互い に異なる。 プロセス p の入力 : 古い名前 出力 : 新しい名前 メッセージの複雑さは、O(N3) アルゴリズム概要 初期設定 Vp = {xp},cp = 0 アルゴリズム 無限に V をreceive receive した V に応じて、 Vp,cp を更新 shout <set,Vp> アルゴリズムの動作例 {x1},c1 = 0 {x3},c3 = 0 {x2}, c2 = 0 アルゴリズムの動作例 {x1},c1 = 0 {x2}, c2 = 0 {x1},c1+= 1(c1 = 1) {x1,x2}, c2 := 0 {x1} {x1} {x1} {x3}, c3 = 0 {x3,x1},c3 := 0 アルゴリズムの動作例 {x1},c1 = 1 {x1,x2},c1 := 1 {x1,x2} {x1,x2}, c2 = 0 {x1,x2}, c2 += 1 (c2 = 1) {x1,x2} {x1,x2} {x3,x1},c3 = 0 壊れた、または、非常に遅い。 未処理タスク: shout <set,{x1,x3}> アルゴリズムの動作例 {x1,x2},c1 = 1 {x1,x2} , c2 = 1 {x1,x2},c1 += 1(c1 = 2) {x1,x2} , c2 += 1 (c2 = 2) {x1,x2} 決定! {x1,x2} 決定! {x1,x2} {x3},c3 = 0 注. 決定したプロセスも、そのまま停止せず、 実行を続ける。 非常に遅いプロセスがある場合もあるので、 必要 Algorithm 14.2 を見る限り、各プロセスが t をどうやって知るのかは謎。 アルゴリズムの動作例 {x1,x2},c1 = 2 {x1,x2} , c2 =2 {x3},c3 = 0 ここで、プロセス 3 が続きを実行し始めた場合も、 1,2 は c1 := 0,c2 := 0 からやり直し、 また別の stable set に到達。
© Copyright 2024 ExpyDoc