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 2026 ExpyDoc