分散システム読書会 06章-同期(後編)5. 分散型相互排他アルゴリズムの分類
◦ トークンベース方式
概要:トークンという特殊なメッセージをパスし、トークンを受け
取ったときだけ共有リソースにアクセスが許される方式
利点:スターベイションやデッドロックを避けやすい
欠点:トークンを喪失したときの復旧が複雑
◦ パーミッションベース方式
概要:最初にアクセスしようとするプロセスが他のプロセスの許
可を要求する方式。
許可を得る方法に様々な方法があり、本節では、そのうちのいく
つかを紹介する
6. 概要
◦ 1つのプロセスがコーディネータとして選任される
◦ 共有リソースにアクセスしたいプロセスは、コーディネータに
その許可を求めるメッセージを送信する
他のプロセスがアクセスしていないならば、許可を与える返答を
返す。その返答を受け取ると要求したプロセスはアクセスできる
他のプロセスがアクセス中の場合、コーディネータは応答しない。
リソースが開放されたときに、許可を与える返答を行なう
特徴
◦ 利点:単純、容易、公平
◦ 欠点:コーディネータがSPOF、コーディネータがボトルネック
7. 概要
◦ 各リソースは 𝑛 重に複製されていることを仮定する
◦ 各レプリカは独自のコーディネータを持つ
◦ あるプロセスがリソースにアクセスするには、コーディネータの過半
数 𝑚 > 𝑛/2 の賛同を必要とする。(アクセスを許可しないときはそ
の旨を通知する)
◦ コーディネータは故障からの復旧時に、以前の状態を考慮する必
要がない(任意の時点でリセットすることができる)
特徴
◦ 投票の正しさを損なう確率は十分低い(計算は面倒なので省略)
◦ アクセスが拒否されたときランダム時間後に再試行するが、多くの
ノードがリソースにアクセスしようとすると、どのノードも十分な投票
を得られなくなり、利用率が急速に低下する
8. 概要
◦ イベントの全順序が保たれることを仮定する
◦ あるプロセスが共有リソースにアクセスしようとするとき、リ
ソースの名前、自分のプロセス番号、タイムスタンプ(現在の
論理時間)、を含むメッセージを作成し、すべてのプロセスに
送信する
◦ メッセージの送信は信頼できると仮定する
◦ あるプロセスが別のプロセスからの要求メッセージを受信し
たとき、受信者のリソースに対する状態に応じて動作する
受信者がアクセス中(またはアクセス予定)でなければOKを返す
受信者がアクセス中であれば、何も返答しない
受信者がアクセスしようとしていて、まだできていなければ、メッ
セージの論理時間を比較して、低いほうが勝つ。
10. 特徴
◦ 利点
デッドロックやスターベイションなしに相互排他ができる
故障単一箇所性(SPOF)が存在しない
◦ 欠点
故障n箇所性の問題が生じる: どれかのプロセスがクラッシュすると応答で
きなくなり、この無応答はアクセス許可の拒否と解釈され、すべての後続の
要求をブロックしてしまう
◦ 問題1:アルゴリズムの改良が必要
要求が入ると許可または許可拒否の返答を送信する
応答が帰らないと宛先がダウンしたと判断する
拒否が返答されると後続のOKメッセージを待つ
◦ 問題2:マルチキャストグループのメンバリスト維持が必要
◦ 問題3:すべての要求を扱わせるとボトルネックになる(要改良)
結論:「使い物になりません」
◦ 集中型に比べ、速度が遅く、複雑で、高コストで、ロバスト性も低い
11. 概要
◦ ネットワークを論理的にリング構成にして、各プロセスはリングにおけ
るある位置を割り当てることとする
◦ リング位置はネットワークアドレスまたはその他の手段の数値的順序
に配置される(順序は問題ない)
◦ 各プロセスは自分の後の次は誰かを知っている
◦ リングが初期化されるとプロセス 0 にトークンが与えられる
◦ トークンはプロセス k からプロセス k+1 へ、P2Pで送られる
◦ トークンを得たプロセスはリソースにアクセスできる。リソースの解放後
にはトークンを次のプロセスに渡す
特徴
◦ 問題: トークンが喪失したとき再作成されなければならないが、喪失
の検出は難しい(トークンが1時間現れなくても喪失とは限らない)
◦ 改善策:トークン受け取りの確認通知を行なうことで、次のプロセスの
ダウンを検出できるようにする(ダウンしたプロセスはスキップする)
12. 4つのアルゴリズムの比較
◦ 集中型が最も簡単で最も効率的
◦ 分散型はメッセージ数が多くなる(プロセス数が多い場合)
◦ アクセスまでの遅延時間は許可の応答を得るまでのメッセー
ジ数となるが、トークンリングでは0からn-1まである
◦ 非集中型以外はクラッシュの場合の問題を持っているが、非
集中型はスターベイションの恐れがある
アルゴリズム アクセスに要する
メッセージ数
アクセスまで
の遅延時間
問題
集中型 3 2 コーディネータのクラッシュ
非集中型 3mk, k=1,2... 2m スターベイション、低効率
分散型 2(n-1) 2(n-1) プロセスのどれかのクラッシュ
トークンリング 1から∞ 0からn-1 トークンの喪失、プロセスのクラッシュ
m=コーディネータ数、k=試行回数、n=プロセス数
15. 幾何オーバーレイ・ネットワーク
◦ 各ノードは𝑚次元幾何空間における位置を与えられる
◦ 最も単純な例は、ノード間の距離がノード間伝達遅れに対応する
場合である。2つのノード𝑃および𝑄が与えられたとき、あるメッセー
ジが𝑃から𝑄へ(あるいは逆方向に)伝達するのにどれくらい時間が
かかるかに、距離 𝑑(𝑃, 𝑄) が影響する
◦ サーバ 𝑂 のWebを複数のサーバ 𝑆1, 𝑆2,… , 𝑆 𝑘 に複製しているとし
て、クライアント 𝐶 の要求に対してサーバ 𝑂 は 𝐶 に最も近いサー
バに宛先を変更する
◦ 各レプリカの幾何的位置とクライアントの幾何的位置が既知ならば、
𝑂 は距離𝑑(𝐶, 𝑆𝑖)が最小になるサーバ 𝑆𝑖 を選択できる
◦ この選択はローカル処理のみで可能で、実際の伝達遅れについて
調べる必要はない
16. 位置ベースルーティング
◦ 位置情報のみを用いたメッセージの転送方法
例:宛先に最も近い隣にメッセージを転送させる
◦ ローカル情報のみを使用するので、通常のルーティングアルゴリズ
ムのように、ネットワーク中の全ノードにリンク情報を伝播させる必
要はない
◦ 𝑚次元幾何的空間のノード位置測位には、𝑚 + 1の距離測定値が
必要になる(計算方法などGPSで既出なので省略
◦ しかし、異なるノード間で測定された距離は必ずしも整合しない
17. 位置ベースルーティング
距離の不整合を完全に解決することは不可能。なぜなら、インター
ネットの伝達遅れの計測値は、「三角不等式」を満たしていない。す
なわち、𝑑 𝑃, 𝑅 ≤ 𝑑 𝑃, 𝑄 + 𝑑(𝑄, 𝑅) を常に満たすわけではない
この対策の一つとしては、ランドマークと知られている 𝐿 個の特別
なノード 𝑏1, 𝑏2, … , 𝑏 𝐿 を用いる。ランドマークは互いの間での伝送
遅れ 𝑑(𝑏𝑖, 𝑏𝑗) を計測しておく。
実質的に中心となるノードは各ランドマークの座標を計算し、次の
誤差累積関数を最小にすることを探索する
𝑑 𝑏𝑖, 𝑏𝑗 − 𝑑(𝑏𝑖, 𝑏𝑗)
𝑑(𝑏𝑖, 𝑏𝑗)
2𝐿
𝑗=𝑖+1
𝐿
𝑖=1
すなわち、、、
21. ブリーアルゴリズム(ガキ大将アルゴリズム)
◦ コーディネータが応答しないと気がついたあるプロセス 𝑃 は選任
(election)を起動する。
𝑃は自分より高い数値を持つすべてのプロセスに対して、𝐸𝐿𝐸𝐶𝑇𝐼𝑂𝑁
メッセージを送信する
だれからも応答がなければ、𝑃 はコーディネータになる
𝑃より高い数値のプロセスから応答があれば、交代して終了する
◦ 受信側の動作
いつでも低い数値の協力者から 𝐸𝐿𝐸𝐶𝑇𝐼𝑂𝑁 メッセージを受信する
受信者は自分が生きていて交代可能なら 𝑂𝐾 メッセージを返す
受信者はまだ選任を開催していなければ、開催する
◦ 勝利宣言
最終的に1つのプロセスだけが残り、新しいコーディネータとなる
新コーディネータは他のプロセスに 𝐶𝑂𝑂𝑅𝐷𝐼𝑁𝐴𝑇𝑂𝑅 メッセージを送る
23. リングアルゴリズム(トークンは利用しない)
◦ 各プロセスはリング状に順序付けされていると仮定する
◦ コーディネータが機能していないと気がついたプロセスは、自
分の番号を含む 𝐸𝐿𝐸𝐶𝑇𝐼𝑂𝑁 メッセージを、自分のサクセッ
サに送信する
◦ メッセージを受信したプロセスは、メッセージ中に自分のプロ
セス番号を追加して次のサクセッサに送信する
◦ サクセッサがダウンしている場合、送信者はそのサクセッサ
をスキップしてリングに沿った次のメンバに送信する
◦ メッセージは1周して選任を開始したプロセスに戻ってくるの
で、メッセージタイプを 𝐶𝑂𝑂𝑅𝐷𝐼𝑁𝐴𝑇𝑂𝑅 に変更して、もう一
度回覧される。この回では誰がコーディネータで誰が新しいリ
ングのメンバであるのかが知らされる
26. [Vasudevan et al., 2004] のアルゴリズム
◦ ネットワーク内の開催元(source)は、どのノードも近隣ノードに
𝐸𝐿𝐸𝐶𝑇𝐼𝑂𝑁 メッセージを送信して、選任プロセスを開催(initiate)
することができる
◦ ノードが最初に 𝐸𝐿𝐸𝐶𝑇𝐼𝑂𝑁 メッセージを受信すると、送信者を親と
認識し、次に親以外の直近のすべての近隣ノードに 𝐸𝐿𝐸𝐶𝑇𝐼𝑂𝑁
メッセージを送信する。肯定応答(acknowledge)を待つ
◦ ノードが親に肯定応答を返すとき、親にとって最もリーダーにふさ
わしいノードを示す情報(最善ノード)を含める
◦ ノードが親以外から 𝐸𝐿𝐸𝐶𝑇𝐼𝑂𝑁 メッセージを受信すると肯定応答
を返すだけである(最善ノード情報を含まない)
◦ 最善ノードを決めるため、各ノードは自身の「容量」を示す情報を持
つ(バッテリ残量やその他リソース量から算出しておく)
◦ 最終的に選任を開催したノードは、どのノードがリーダとして選択さ
れるのに相応しいかを知り、その情報をすべてのノードにブロード
キャストする
31. DHTベースシステムの場合
◦ 基本的考え方はスーパーピアのための識別子空間の部分を確保すること
◦ 各ノードはランダムで一様の 𝑚 ビットの識別子を受信する。最初の 𝑘 ビットで
スーパーピアを識別することにする
◦ 𝑁 個のスーパーピアを必要とするならば、どのキーも最初の log2 𝑁 ビット
がこれらのノードを識別するのに使用される
◦ 𝑚 = 8, 𝑘 = 3 の小規模Chordシステムを考える。特別のキー 𝑝 に対応する
ノードを探索するとき、そのパターンに対応するノードへ探索要求へのルートを
決定することができる
𝑝 𝐴𝑁𝐷 11100000
◦ これがスーパーピアとして扱われる。各ノードの識別子は次の探索を行い、
𝑖𝑑 𝐴𝑁𝐷 11100000
が自分自身にルートされているかで、スーパーピアかどうかチェックできる
_人人人人人人人人人人_
> よくわかりません! <
 ̄YYYYYYYYYY ̄
32. 𝑚 次元幾何空間におけるノード測位に基づく方法
◦ オーバーレイ上で 𝑁 個のスーパーピアを平等に配置するこ
とを仮定する
◦ 基本的な考え方: 総数 𝑁 個のトークンを 𝑁 個のランダムに
選ばれたノードに広げていく
どのノードも1つ以上のトークンを保持できない
各トークンは他のトークンを押し出す働きをする
すべてのトークンが同じ排斥力を発揮するならば、それらは互い
に押し出し合って、幾何空間に平等に広がっていく
◦ この方法はトークンを保持するノードは他のトークンについて
学習することを必要とする
35. まとめ1
◦ 同期とは、適切なことを適切な時間に行わせること
◦ 分散システムおよびコンピュータネットワークにおける問題は、グ
ローバルに共有できるクロックの表記法がないこと
◦ 分散システムでクロックを同期させる方法は、すべてクロック値を
交換することに基づいている。通信遅延の変動を扱う方法がクロッ
ク同期アルゴリズムの正確さを決めている
◦ 同期に関連してノード測位の問題がある。ノード間の伝達遅れの正
確な計測として幾何的距離が使用可能なように 𝑚 次元空間にお
いてノードの座標を割り付けることである。これはGPSにおける位
置と時間を決定する方法に類似している
◦ 多くの場合重要なのは絶対的な時間でなく、関連したイベントが正
しい順序で起きることである。Lamportの論理クロックやベクトルク
ロックが適用できる
36. まとめ2
◦ 同期アルゴリズムの重要なものの1つに、分散相互排他アル
ゴリズムがある
◦ 最大1つのプロセスのみが共有リソースにアクセスするよう、
アクセスが誰の番かを管理するコーディネータを使用する
◦ 完全に分散したアルゴリズムも存在するが、通信とプロセス
の故障に影響を受けやすいという欠点がある
◦ コーディネータを固定しない場合、複数のプロセスの誰が
コーディネータになるかを決定しなければならない。その決定
は選任アルゴリズムによってなされる
◦ 選任アルゴリズムはコーディネータがクラッシュした場合に主
に利用されるが、ピアツーピアネットワークにおけるスーパー
ピアの選択にも適用される