グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7...

18
1 同期 教科書5章後半 2 同期 プロセス間の同期 実際の時刻(actual time, absolute time)に基づく同期(physical clock synchronization) プロセス間の相対的な時刻(relative time)に基づく同期(logical clock synchronization) 分散システムのグローバル状態(global state)の概念の導入、および、 同期によるグローバル状態の記録手法 プロセスのグループから特定のプロセスをコーディネータとして選び出 す手法(leader election algorithm) 分散排他制御(distributed mutual exclusion) 分散トランザクション(distributed transaction) 3 グローバル状態 グローバル状態(global state) 分散システム全体が現在どのような状態にあるかを 表す 各プロセスのローカル状態の組、および、伝送中の (送信されたがまだ受信されていない)メッセージの集 合からなる グローバル状態を知ることが有用な理由 もし局所状態が全て停止中で、伝送中のメッセージも 無い場合、分散システムはデッドロックに陥ったこと (あるいは、分散計算の場合は計算が終了したこと) が分かる 4 分散スナップショット 分散スナップショット(distributed snapshot) [Chandy and Lamport 1985] グローバル状態を記録するアルゴリズム 一貫性のある グローバル状態を記録 あるプロセスPが別のプロセスQからあるメッセージを受信したと記録 しかし、QPに対してそのメッセージを送信したことが記録されていない Æ 一貫性が無い グローバル状態の概念: カット(cut) によって図示 5 分散スナップショットアルゴリズム 仮定:各プロセスは相互に11単方向FIFO通信チャネル(TCP)で結合 メッセージは必ず送信順に受信される P2 P1 P3 C12 C21 C13 C31 C23 C32 6 分散スナップショットアルゴリズム アルゴリズムを開始するプロセスP1(P1は任意)は、 まず自分の現在のローカル状態を記録 P2 P1 P3 1 2 1 P1の状態記録 C12 C21 C13 C31 C23 C32

Upload: others

Post on 10-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

1

1

同期

教科書5章後半

2

同期

プロセス間の同期実際の時刻(actual time, absolute time)に基づく同期(physical clock synchronization)プロセス間の相対的な時刻(relative time)に基づく同期(logical clock synchronization)分散システムのグローバル状態(global state)の概念の導入、および、同期によるグローバル状態の記録手法

プロセスのグループから特定のプロセスをコーディネータとして選び出す手法(leader election algorithm)分散排他制御(distributed mutual exclusion)分散トランザクション(distributed transaction)

3

グローバル状態

グローバル状態(global state)分散システム全体が現在どのような状態にあるかを表す

各プロセスのローカル状態の組、および、伝送中の(送信されたがまだ受信されていない)メッセージの集合からなる

グローバル状態を知ることが有用な理由もし局所状態が全て停止中で、伝送中のメッセージも無い場合、分散システムはデッドロックに陥ったこと(あるいは、分散計算の場合は計算が終了したこと)が分かる

4

分散スナップショット

分散スナップショット(distributed snapshot)[Chandy and Lamport 1985]

グローバル状態を記録するアルゴリズム

一貫性のあるグローバル状態を記録

あるプロセスPが別のプロセスQからあるメッセージを受信したと記録

しかし、QはPに対してそのメッセージを送信したことが記録されていない一貫性が無い

グローバル状態の概念: カット(cut)によって図示

5

分散スナップショットアルゴリズム

仮定:各プロセスは相互に1対1単方向FIFO通信チャネル(TCPなど)で結合

メッセージは必ず送信順に受信される

P2P1

P3

C12

C21

C13

C31C23

C32

6

分散スナップショットアルゴリズム

アルゴリズムを開始するプロセスP1(P1は任意)は、まず自分の現在のローカル状態を記録

P2P1

P3

1

2

1

P1の状態記録

C12

C21

C13

C31C23

C32

Page 2: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

2

7

分散スナップショットアルゴリズム

次に、マーカー(marker)を各出力チャネルに送信マーカーを受信するプロセスはスナップショットの記録に参加しなければならない

同時に、状態記録してから各チャネルから受信したメッセージ列を記録

P2P1

P3

1

2

1

P1の状態記録

3

C12

C21

C13

C31C23

C32

C31の状態記録

8

P1

分散スナップショットアルゴリズム

マーカーを受信したプロセスは(下図ではP2)まだローカル状態を記録していないならば、

ローカル状態を記録

マーカーを送信

P2

P3

1

32

P1の状態記録

1

4

2

C12

C21

C13

C31C23

C32

C21の状態記録

C31の状態記録

9

P1

分散スナップショットアルゴリズム

マーカーを受信したプロセスは(下図ではP2)まだローカル状態を記録していないならば、

ローカル状態を記録

マーカーを送信

P2

P3

2

5

4 21 1

P1の状態記録

P2の状態記録

1

3

21

C12

C21

C13

C31C23

C32

C21の状態記録

C31の状態記録

10

P1

分散スナップショットアルゴリズム

マーカーを受信したプロセスは(下図ではP2)まだローカル状態を記録していないならば、

ローカル状態を記録

マーカーを送信

P2

P3

2

54 2

1

1

P1の状態記録

P2の状態記録

1

3

21

C12

C21

C13

C31C23

C32

C21の状態記録

C31の状態記録

11

P2P1

分散スナップショットアルゴリズム

状態記録後に受信したメッセージ既にマーカーを受信したプロセスからのメッセージ 無視

まだマーカーを受信していないプロセスからのメッセージ 記録

P3

2

54 2

1

1

P1の状態記録

P2の状態記録

3

1

3

21

空C12

C21

C13

C31C23

C32

C21の状態記録

C31の状態記録

C12の状態記録

C32の状態記録

12

P2P1

分散スナップショットアルゴリズム

プロセスP3がマーカーを受信するとまだP3のローカル状態を記録していない 記録して、マーカーを送信

ローカル状態記録後に受信したメッセージを記録

P3

54 3

P1の状態記録

P2の状態記録

P3の状態記録

1

3

21

12 2

1

空C12

C21

C13

C31C23

C32

C21の状態記録

C31の状態記録

C12の状態記録

C32の状態記録

Page 3: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

3

13

P3

P2P1

分散スナップショットアルゴリズム

5

2

P1の状態記録

P2の状態記録

P3の状態記録

1

3

21

213

14

C12

C21

C13

C31C23

C32

C21の状態記録

C31の状態記録

C12の状態記録

C32の状態記録

C23の状態記録

C13の状態記録

プロセスP3がマーカーを受信するとまだP3のローカル状態を記録していない 記録して、マーカーを送信

ローカル状態記録後に受信したメッセージを記録

14

P3

P2P1

分散スナップショットアルゴリズム

全ての入力チャネルからマーカーを受信したプロセスはアルゴリズムを終了し、記録したプロセスの状態と各入力チャネルの状態をスナップショットとする

5

2

P1の状態記録

P2の状態記録

P3の状態記録

1

3

21

2 13

14

C12

C21

C13

C31C23

C32

C21の状態記録

C31の状態記録

C12の状態記録

C32の状態記録

C23の状態記録

C13の状態記録

15

(リーダー)選任アルゴリズム

多くの分散アルゴリズム:ある一つのプロセスを取りまとめ役(リーダー、コーディネーター)として選ぶ必要

どのプロセスでも構わないが1つ選ぶ必要がある

(リーダー)選任アルゴリズム(leader election algorithm): 複数プロセスからリーダー(コーディネーター)を選ぶアルゴリズム

仮定:各プロセスには一意の番号(ID)が割り振られている

任意のプロセスは他の全てのプロセスの番号を知っている

目標:全てのプロセスが、誰がコーディネーターになったかに関して合意

さまざまな選任アルゴリズムが提案されてきている[Fredrickson and Lynch 1987], [Garcia-Molina 1982], [Singh and Kurose 1994] 16

選任アルゴリズムの応用

セキュアなグループ通信のための暗号鍵配布B. DeCleene et al. Secure Group Communication for Wireless Networks. In Proc. of MILCOM 2001, VA, October 2001.

経路制御C. Perkins and E. Royer. Ad-hoc On-Demand Distance Vector Routing. In Proc. of the 2nd IEEE WMCSA, New Orleans, LA, February 1999, pp. 90-100.

センサネットワーク制御W. Heinzelman,A. Chandrakasan and H. Balakrishnan. Energy-Effcient Communication Protocol for Wireless Microsensor Networks. In Proc.of HICSS, 2000.

その他の制御K. Hatzis, G. Pentaris, P. Spirakis, V. Tampakas and R. Tan. Fundamental Control Algorithms in Mobile Networks. In Proc. of 11th ACM SPAA, pages 251-260, March 1999.N. Malpani, J. Welch and N. Vaidya. Leader Election Algorithms for Mobile Ad Hoc Networks. In Fourth International Workshop on Discrete Algorithms and Methods for Mobile Computing and Communications, Boston, MA, August 2000.

など

17

ブリーアルゴリズム

ブリーアルゴリズム(bully algorithm):[Garcia-Molina 1982]で提案された選任アルゴリズム

あるプロセスPが現在のコーディネータが反応しない(障害などで停止した)ことに気づいたときに、選任(election)を開始

以下の例では、プロセス7がクラッシュしたコーディネータで、プロセス4が選任を開始

選任を開始するプロセスP

クラッシュしたコーディネータ18

ブリーアルゴリズム

Pは次のように選任の作業を行う

PはELECTIONメッセージを、自分より上の番号の全てのプ

ロセスに対して送信

P

Page 4: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

4

19

ブリーアルゴリズム

もし誰も応答しなければ、Pは選挙に勝ったと見なし、自分がコーディネータとなる

誰か上位の番号のプロセスが応答すれば、(選挙に負けたと判断し)Pの仕事は終了

P

20

ブリーアルゴリズム

ELECTIONメッセージに応答したプロセスは、それぞれ自分が選任アルゴリズムを開始する

21

ブリーアルゴリズム

もし誰も応答しなければ、Pは選挙に勝ったと見なし、自分がコーディネータとなる

以下の例では、プロセス6が勝つ

22

ブリーアルゴリズム

任意のプロセスは自分より下位の番号のプロセスからELECTIONメッセージを受信する可能性がある

もし受信したならば,自分が生きていることを示すOKメッセージを返信

そして、今度は自分が(上記の)選任の仕事を実行

いつかは、1つを除いた全てのプロセスが選任の仕事を終え、ある1つのプロセスがコーディネータとなる

選挙に勝ったプロセスは、他の全てのプロセスに対して自分の勝利を通知

番号が上位のプロセスが常に勝利するので、 “bully(ガキ大将) algorithm”と呼ばれる

23

リングアルゴリズム

リングアルゴリズム(ring algorithm): リングを用いた選任アルゴ

リズム他のリングアルゴリズムとは異なり、トークンは使用しない

仮定:プロセス群は順序付けられており、各プロセスは自分の次の順番のプロセス(後続者、successor)を知っている

24

リングアルゴリズム

動作手順コーディネータが機能していないことに気づいたプロセスは、ELECTIONメッセージに自分のプロセス番号を付けて、後続者に送信

Page 5: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

5

25

リングアルゴリズム

もし後続者がダウンしていたら、一つとばした次のプロセスに送信(生きているプロセスが見つかるまで繰り返す)

26

リングアルゴリズム

ELECTIONメッセージを受信したメッセージは、自分が生きていることを示す返事を返すとともに、受信したELECTIONメッセージに自分のプロセス番号をリストに追加して、自分の後続者に転送

27

リングアルゴリズム

いつかは自分が送信したELECTIONメッセージが自分に返ってくる(リストに自分の番号があることにより認識) 今度はメッセージタイプをCOORDINATORに変更してもう一度回覧

今度は誰がコーディネータであるか(リストのうち最も大きな番号のプロセス)、および、リングを構成する新しいメンバーが誰であるかを知らせるため

COORDINATORメッセージの回覧が終了すると、それぞれが自分の仕事に戻る

28

リングアルゴリズム

複数のプロセスが同時にELECTIONメッセージの回覧を始めることがあ

 最終的に選ばれるコーディネータは一意なので実害は無い

メッセージが重複するがトラフィックに与える影響はわずか

29

拡散計算に基づく選任アルゴリズム

拡散計算(diffusing computation) [Dijkstraand Scholten 1980]

一つのノードから始まって、グラフの全ノードへと拡散させていく計算

E.W. Dijkstra and C.S. Scholten. Termination detection for diffusing computations. In Information Processing Letters, vol. 11, no. 1,pp. 1-4, August 1980.

30

拡散計算に基づく選任アルゴリズム

仮定:ネットワークトポロジが有向グラフで与えられる

近くのノード(neighbor)=直接リンクで接続されたノード

ノードとリンクは障害なし

各ノードは、コーディネータへの適性度をあらわす値(ノードの価値)を保持

この値が最も大きいノードが選任される

Page 6: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

6

31

拡散計算に基づく選任アルゴリズム

アルゴリズムの概要選任アルゴリズムを起動したノード(ソースノード)から、メッセージを拡散させていき、スパニングツリーを構成(成長相:growing phase)拡散させたメッセージの応答を集め、誰がコーディネータかを判断する情報をソースノードに集約(縮退相:shrinking phase)ソースノードは選出されたコーディネータ(リーダー)を全ノードにアナウンス

使用するメッセージ:3種類ElectionAckLeader 32

拡散計算に基づく選任アルゴリズム

(growing phase)ソースノードはElectionメッセージを近くのノードに送信

Election

Electionソースノード

33

拡散計算に基づく選任アルゴリズム

(growing phase)Electionを受信したノードは、最初にElectionを受信したノードを自分の親ノードとし、親ノード以外の近くのノードにElectionメッセージを送信

Election

Electionソースノード Election

Election

34

拡散計算に基づく選任アルゴリズム

(growing phase)親ノード以外からElectionを受信したノードは、Ackメッセージで応答

親ノードには、この時点では応答しない

Election

Electionソースノード Election

Election

Ack

35Ack

Election

拡散計算に基づく選任アルゴリズム

(growing phase)親ノード以外からElectionを受信したノードは、Ackメッセージで応答

親ノードには、この時点では応答しない

Election

Electionソースノード ElectionElection

36

拡散計算に基づく選任アルゴリズム

(shrinking phase)親ノード以外の全ての近くのノードからAckを受信したノードは、親ノードにAckメッセージを応答

このとき、選任に必要な情報(各ノードの価値のリスト)をメッセージに含める

3 7

2

45

Election

Electionソースノード Election

Election

Ack

Election

Ack([5])

Ack([2])

Page 7: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

7

37

拡散計算に基づく選任アルゴリズム

(shrinking phase)親ノード以外の全ての近くのノードからAckを受信したノードは、親ノードにAckメッセージを応答

このとき、選任に必要な情報(各ノードの価値のリスト)をメッセージに含める

3 7

2

45

Election

Electionソースノード Election

Election

Ack

Election

Ack([5])

Ack([5,4])

Ack([2])38

拡散計算に基づく選任アルゴリズム

(shrinking phase)親ノード以外の全ての近くのノードからAckを受信したノードは、親ノードにAckメッセージを応答

このとき、選任に必要な情報(各ノードの価値のリスト)をメッセージに含める

3 7

2

45

Election

Electionソースノード Election

Election

Ack

Election

Ack([5])

Ack([5,4])

Ack([2])

Ack([5,4,7])

39

拡散計算に基づく選任アルゴリズム

ソースノードが全ての子ノードからAckを受信 選任に必要な情報を全て収集

最も価値が高いノードをコーディネータに選出

誰がコーディネータに選任されたかを、全ノードにブロードキャスト

3 7

2

45

Leader(7)

Leader(7)ソースノード Leader(7)

Leader(7)

新しいコーディネータ

40

モバイルアドホックネットワークでの選任アルゴリズム

アドホックネットワーク(Ad-hoc Networks)各ノードが無線などの通信手段で近くのノードと通信リンクを自律的に構成するネットワーク

通信インフラストラクチャが不要 その場限りの(Ad-hoc)ネットワーク

モバイルアドホックネットワーク(Mobile Ad-hoc Networks, MANET)

各ノードの移動を許容するアドホックネットワーク

モバイルアドホックネットワークでの選任問題ネットワークの各強連結成分に対してコーディネータを選任する必要

コーディネータの選任中にネットワークトポロジの動的な変化を許す必要

選任されるコーディネータは以下の意味で最も優れたノードである必要

バッテリ残量が多い、計算能力が大きいなど

41

モバイルアドホックネットワークでの選任アルゴリズム

[Vasudevan, Kurose, Towsley 2004]の手法

Sudarshan Vasudevan, Jim Kurose, Don Towsley, Design and Analysis of a Leader Election Algorithm for Mobile Ad Hoc Networks, in Proc. of 12th IEEE Int. Conf. on Network Protocols, (ICNP'04) , pp. 350-360, 2004.

42

モバイルアドホックネットワークでの選任アルゴリズム

拡散計算に基づく選任アルゴリズムを拡張5種類のメッセージを使用

Election,Ack,Leader,Probe,Replyノードの移動によるスパニングツリーの変化を検出

各ノードはElectionを送信して、まだAckを受信していないノード群に対して、定期的にProbeメッセージを送信

Probeを受信したノードはReplyメッセージを応答

一定のタイムアウトでReplyを受信しない場合、そのリンクは切断と判断

検出したノードは適切な処理を行う

もしAck待ちのノードと切断したならば、そのノードからのAckを無視して、他の全てのAckがそろった段階で親ノードにAckを送信

もし親ノードと切断したならば、自分を親とするサブツリーの中でコーディネータを選任し、アナウンスを行う

Page 8: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

8

43

モバイルアドホックネットワークでの選任アルゴリズム

新たにリンクが生成され、2つのネットワークがマージされた場合

生成されたリンクの両側のノード(下図ノードA,U)はそれぞれのネットワーク内でコーディネータを持つ場合

ノードA,Uはそれぞれのコーディネータの情報を交換し、より優れている方(ノードC)を、新しいコーディネータに選任

新しいコーディネータを残りの全ノードにアナウンス

44

モバイルアドホックネットワークでの選任アルゴリズム

新たにリンクが生成され、2つのネットワークがマージされた場合

どちらかが属するネットワークがコーディネータを持たない(選出中の)場合

下図のノードA,B,Cはまだコーディネータを持たない

ノードAとUの間にリンク生成

ノードUは自分が属するネットワークのコーディネータ(W)をノードAに通知

ノードAは現在進行中の選任アルゴリズムを中断し、ノードB,Cに新しいコーディネータをアナウンス

45

排他制御

複数プロセスからなるシステム

クリティカルリージョン(critical region)を用いて容易にプログラム可能

共有データを読んだり更新したいとき、クリティカルリージョンに入り、その中では他のプロセスが共有データにアクセスできないこと(相互排他、mutual exclusion)を保証

単一プロセッサシステム

クリティカルリージョンはセマフォやモニターなどの機構により、他のプロセスからのアクセスから保護

分散システムにおけるクリティカルリージョンおよび排他制御の実現法を紹介

46

排他制御:集中アルゴリズム

単純なアプローチ:単一プロセッサでの排他制御をシミュレートあるプロセスをコーディネータに選出

クリティカルリージョンに入りたいプロセスはコーディネータにリクエストを送信し許可を求める

コーディネータは、既にクリティカルリージョンに入っているプロセスが無ければ許可のメッセージを返信

許可のメッセージを受信したプロセスはクリティカルリージョンに入る

47

排他制御:集中アルゴリズム

もし、既に他のプロセスがクリティカルリージョンに入っていたら、

返信をしない、または、拒否のメッセージを返信

リクエストを待ち行列に入れる

48

排他制御:集中アルゴリズム

プロセスがクリティカルリージョンから出ると、ロックを解放するメッセージをコーディネータに送信

ロックが解放されたら、コーディネータは待ち行列の先頭のリクエストを処理し,そのプロセスに次のアクセス許可を与える

欠点コーディネータがクラッシュすると機能しない

コーディネータに処理が集中 性能のボトルネックになる恐れ

Page 9: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

9

49

排他制御:分散アルゴリズム

Ricart and Agrawalaのアルゴリズム[Ricart and Agrawala 1981]

排他制御を実現する分散アルゴリズム

仮定:システムの全イベントに全順序が付いているLamportのタイムスタンプで実現可能

50

排他制御:分散アルゴリズム

動作手順

クリティカルリージョンに入りたいプロセスは、入りたいクリティカルリージョンの名前,自分のプロセス番号、および、現在時刻(Lamportのタイムスタンプ)を含むリクエストメッセージを全てのプロセス(自分自身を含む)に送信

通信にはエラーが無いと仮定

51

排他制御:分散アルゴリズム

リクエストメッセージを受信したプロセスは以下のいずれかの動作を行う

もし受信プロセスがクリティカルリージョンに入っておらず、これから入りたくも無ければ、OKメッセージを返信

52

排他制御:分散アルゴリズム

もし既にクリティカルリージョンに入っているならば、返信は行わず、メッセージをキューに入れる

もし自分もクリティカルリージョンに入りたいならば、受信メッセージと自分が送信したリクエストメッセージのタイムスタンプを比較

もし受信メッセージの方が早ければ、OKを返信(自分は負け)

さもなければ(自分が勝ちなので)、返信を行わずメッセージをキューに入れる

53

排他制御:分散アルゴリズム

もし既にクリティカルリージョンに入っているならば、返信は行わず、メッセージをキューに入れる

もし自分もクリティカルリージョンに入りたいならば、受信メッセージと自分が送信したリクエストメッセージのタイムスタンプを比較

もし受信メッセージの方が早ければ、OKを返信(自分は負け)

さもなければ(自分が勝ちなので)、返信を行わずメッセージをキューに入れる

プロセス2のリクエストをキューに格納

54

排他制御:分散アルゴリズム

他の全てのプロセスからOKメッセージを受信したらクリティ

カルリージョンに入る

Page 10: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

10

55

排他制御:分散アルゴリズム

クリティカルリージョンから出るとき、キューに入れた全てのメッセージの送信プロセスにOKを返信

56

排他制御:分散アルゴリズム

Ricart and Agrawalaのアルゴリズムは、(クリティカルリージョンが一つのみならば)デッドロックに陥らない

Ricart and Agrawalaのアルゴリズムは、飢餓状態(starvation)に陥らない、すなわち、クリティカルリージョンを要求したプロセスはいつか必ず入れる

タイムスタンプが全順序であることから示される

必要なメッセージ数:2(n-1) (nはプロセスの総数)

nプロセスのうち1つでもクラッシュすると機能しない

リクエストに対して返事がない リクエストを拒否されたのか、クラッシュしたのか区別不能

1つの改良:リクエストを拒否する場合も拒否メッセージで応答

集中アルゴリズムと比較して、利点は何も無い(効率面、耐障害性ともに劣る)

少なくとも分散アルゴリズムの存在を示す 将来の改善に期待

57

トークンリングアルゴリズム

トークンリングアルゴリズム(Token Ring Algorithm)

プロセス群を論理的なリング状に構成

ネットワークの物理トポロジとは無関係に構成可能各プロセスは自分の後が誰かを知っておけばよい

58

トークンリングアルゴリズム

トークン(token)をリングに沿って回し、トークンを持っているプロセスのみがクリティカルリージョンに入る権利を持つ

もしトークンを持っているプロセスがクリティカルリージョンに入りたければ、入って処理を行い、終了したらトークンを次のプロセスに回す

クリティカルリージョンに入りたくなければ、単に次のプロセスにトークンを回す

問題点:トークンが失われたら機能しない

失われたことの検出も困難(次のトークンが回ってくるまでの時間に上限がない タイムアウトでは検出不可)

59

3つのアルゴリズムの比較

集中アルゴリズム(クリティカルリージョンに1回入って出るのに)必要なメッセージ数=3(リクエスト、許可、解放)

分散アルゴリズム必要なメッセージ数=2(n-1) (リクエストと許可がそれぞれ(n-1)プロセス分)

トークンリングアルゴリズム必要なメッセージ数=1から∞ (不要なときもトークンを回し続ける必要があるので)

60

分散トランザクション

トランザクション(transaction)の概念:排他制御と強く関連

排他制御: 共有リソースに高々1つのプロセスしかアクセスしないことを保証

トランザクション: 同様に複数プロセスによる同時アクセスから共有リソース(特に、共有データ)を守る機構

排他制御より多くのことが可能一つのアトミックオペレーションで複数のデータを更新可能

もしトランザクションの途中で失敗したら、トランザクション実行前の時点まで状態を戻す

Page 11: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

11

61

トランザクションモデル

トランザクションの概念

商取引の世界がオリジナル

取引が成立するまでは、いつでも交渉を止めることが出来る

止めた場合、取引は最初から無かったことに

一旦取引が成立して契約書にサインすると、後戻りできない

62

トランザクションモデル

計算機の世界でも同様

あるプロセスが他のプロセスとともにトランザクションを始めたいことをアナウンス

プロセス間でさまざまな交渉や処理を行う

全てのプロセスが合意するとトランザクションは終了(=コミット:commit)合意が成立しなければトランザクション開始前の状態に戻る(=アボート:abort)

このようなall or nothingの性質が有用

63

トランザクションの歴史

計算機の世界におけるトランザクションの利用:1960年代に始まる

ファイルを磁気テープに記録していた時代

スーパーマーケットの在庫管理システム閉店後に2本の入力テープ(前日の在庫情報、本日の更新内容)から1本の出力テープ(本日の在庫情報)を生成

処理が失敗 入力テープは残るので、最初からやり直せばよい

実害は生じない all or nothingの性質を持つ

64

トランザクションの利用

トランザクションを利用したプログラミング

特殊なプリミティブが必要

トランザクションプリミティブの例

65

トランザクションの利用例

例:フライト予約システム

White Plains JFK Nairobi Malindiという乗り継ぎで予約したい

一つでも予約できないと全ての予約をキャンセル

66

トランザクションの性質

トランザクションを特徴付ける4つの性質(ACID property)

アトミック性(Atomic): 外界からは、トランザクションは不可分の動作として見える

一貫性(Consistent): トランザクションはシステムの一貫性を破壊しない

孤立性(Isolated): 並列に実行される複数のトランザクションは互いに干渉しない

耐久性(Durable): 一旦トランザクションがコミットされると、その変更は永久となる

Page 12: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

12

67

トランザクションの分類

トランザクションは以下の3種類に分類される

1. フラットトランザクション(flat transaction)2. 入れ子トランザクション(nested transaction)3. 分散トランザクション(distributed transaction)

68

フラットトランザクション

フラットトランザクション(flat transaction)処理の系列で、ACID propertyを満たすもの

最も単純なトランザクション

幾つかの制限:トランザクションの処理の一部のみをコミットできない

複数のフラットトランザクションに分割すると一貫性を保持できない

69

入れ子トランザクション

入れ子トランザクション(nested transaction)

幾つかの部分トランザクション(subtransaction)に分割し階層的に構成

トップレベルのトランザクション(top-level transaction)はサブトランザクションを並列実行

全てのサブトランザクションがコミットされると、トップレベルのトランザクションをコミットする

トップレベルトランザクションがアボートした場合、コミットしたサブトランザクションを元に戻せるようにしなければならない

ACID propertyはトップレベルトランザクションでのみ成立

サブトランザクションへの分割は論理的な分割

70

分散トランザクション

分散トランザクション(distributed transaction)物理的に分割された(論理的には同じ)データにアクセスするトランザクションを、物理的分割に従ってサブトランザクションに分割して構成

71

トランザクションの実装

トランザクションの実装手法を紹介

簡単のため、ファイルシステム上のトランザクションのみ考慮

72

プライベート作業空間

プライベート作業空間(private workspace)による実装

トランザクションの開始時に、自分専用の作業領域(private workspace)が与えられ,そこにアクセスするデータのコピーを置く

トランザクション処理中は、プライベート作業空間に対して読み書きを行う

トランザクションをコミットすると、作業空間のデータをファイルシステムに書き戻す(アボートした場合は、単に破棄)

Page 13: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

13

73

プライベート作業空間の効率化(1/4)

プライベート作業空間の問題点:大量のファイルをコピーするのはコストがかかる

解決法:読むだけのファイルは作業空間にコピーしない(親トランザクションの作業空間へのポインタ(インデックス)のみ保持)

トップレベルトランザクションの親の作業空間は実ファイルシステムに対応

実ファイルシステム

トップレベルトランザクション サブトランザクション

サブトランザクション

作業空間

作業空間

作業空間74

プライベート作業空間の効率化(2/4)

更新するファイルに関しても実体はワークスペースにコピーせず、インデックス(inode)のみを管理

1.読み込み時はインデックスを通じて実ファイルへアクセス

75

プライベート作業空間の効率化(3/4)

更新するファイルに関しても実体はワークスペースにコピーせず、インデックス(inode)のみを管理

2.最初の書き込み時に、(ディスク上の)実ファイルブロックをコピーし、そこへデータを書き込み、ワークスペース上のインデックスをそのブロック(シャドウブロック:shadow block)を指すように更新

76

プライベート作業空間の効率化(4/4)

更新するファイルに関しても実体はワークスペースにコピーせず、インデックス(inode)のみを管理

3.コミット後にはプライベート作業空間上のインデックスを、親の作業空間にコピー

77

先行書き込みログ

先行書き込みログ(writeahead log): もう一つのトランザクション実装法

ファイルは実際に更新される

ただし、何処をどのように変更したか(古い値と更新後の値の組)のログを残す

コミットしたら、コミットしたことを示す記録をログに残す

もしアボートしたら、ログの情報に基づいてトランザクション実行前の状態に戻す(ロールバック:rollback)

78

並行性制御

今までの話はアトミック性の実現手法

障害が起きうる状況でのアトミック性と耐久性の達成7章で扱う

一貫性と孤立性 並行トランザクションを適切に制御すること(並行性制御:concurrency control)で達成

Page 14: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

14

79

並行性制御の目標

並行性制御の目標

複数のトランザクションを並行に実行しても、データの一貫性を破壊しないようにする

トランザクションがデータにある特定の順序でアクセスする

ように制御し、トランザクションを逐次実行した場合と同じ最終結果が得られるようにすることで達成

80

並行性制御のアーキテクチャ(1/2)

3層に分けたマネージャで構成

最下層:データマネージャ実際のデータの読み書きを実行

中間層:スケジューラどのトランザクションがいつデータの読み書きを行うかを決定

最上層:トランザクションマネージャ

アトミック性を達成するための処理を担当

並行性制御はスケジューラが主に担当

81

並行性制御のアーキテクチャ(2/2)

分散トランザクションの場合の構成

全体のトランザクション管理は単一のトランザクションマネージャで行う

各マシンはローカルの一貫性を保つためのスケジューラとデータマネージャを持つ

各スケジューラは並行性制御のために、別のマシン上のデータマネージャとも通信

82

逐次化可能性

並行性制御の目的

複数トランザクションを、相互に干渉しないように並行に実行可能にする

最終結果は、逐次実行したときと同じになるように

並行実行されるトランザクションの各操作をどの順で実行すべきかの概念(逐次化可能性:serializability)が重要

83

逐次化可能性の例

3つの並行トランザクションのスケジュール例スケジュール1は本当に逐次的にした場合(逐次化可能)スケジュール2は逐次的ではないが、最終結果はスケジュール1と同じ(逐次化可能)スケジュール3は最終結果がスケジュール1と異なる(逐次化不能)

84

並行性制御の説明のための記法

スケジュールと並行性制御:計算される値自体は無関係

トランザクションを特定の変数に対するread,write操作の系列として表現

以下の3つのトランザクションTi (i=1,2,3)の例では

write(Ti,x); read(Ti,x); write(Ti,x)

Page 15: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

15

85

並行性制御の考え方

並行性制御: 競合するオペレーション(conflicting operations)を適切にスケジュールすること

競合するオペレーション: 同じ変数に対する複数の操作で、少なくとも一つがwrite操作

writeオペレーションが1つ 読み書き競合(read-write conflict)writeオペレーションが複数 書き書き競合(write-write conflict)readオペレーション同士は決して競合しない

86

並行性制御アルゴリズムの分類

read,writeオペレーションの同期方法による分類排他制御(mutual exclusion)タイムスタンプによる順序付け

悲観的か楽観的かによる分類悲観的(pessimistic)アプローチ

競合が起こりそうな場合、適切な同期処理で未然に防ぐ

楽観的( optimistic )アプローチ競合は滅多に起こらない前提で、単純に(read/writeオペレーションを)実行

トランザクションの最後で同期処理を実行

もし競合が起こっていたことが分かると、アボートさせる

87

2相ロッキング

ロッキング(locking): 最も古く、よく用いられている並行性制御アルゴリズム

変数xを読み書きしたいとき、その変数のロックをスケジューラに要求

読み書きが終了すると、ロックを解放

スケジューラの仕事逐次化可能なスケジュールでread/writeオペレーションが実行されるように、各プロセスに対してロックの許可・解放を行う

2相ロッキング(Two-Phase Locking:2PL): 上記を実現するアルゴリズムの一つ

88

2相ロッキングの動作原理

2相ロッキングの動作原理

スケジューラは、まずトランザクション実行に必要な全てのロックを与える(成長相:growing phase)トランザクション実行終了後、それらのロックを解放する(縮退相:shrinking phase)

89

2相ロッキングの動作詳細

スケジューラは以下のルールに従う[Bernstein et al. 1989]スケジューラがトランザクションマネージャからオペレーションoper(T,x)の実行を依頼されたとき、既にロックを与えた他のオペレーションと競合しているか否かを調査

もし競合していればその操作の実行は延期

さもなければ変数xのロックを与えてoper(T,x)の実行をデータマネージャに依頼

スケジューラはデータマネージャが変数xに対する処理を終了するまで決してxのロックを解放しない

一旦スケジューラがトランザクションTに関するロックを解放すると、それ以降、Tに対して決してロックを与えない(変数名と無関係に)

定理:全てのトランザクションが2相ロッキングを用いるならば、それによって形成される任意のスケジュールは逐次化可能である [Eswaran et al. 1976]

90

厳密2相ロッキング

厳密2相ロッキング(strict two-phase locking)トランザクション終了(コミットまたはアボート)後に縮退相を実行

2つの主な利点

任意のトランザクションは常に他のトランザクションがコミットした正式な値を使うことができる

正式でない値を用いて計算したことが理由で、トランザクションをアボートさせる必要が無い(連鎖アボート(cascaded abort)を防止)

任意のロック要求及び解放をシステム側で自動的に実行可能(必要時にロック要求、終了後に同時に解放)

Page 16: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

16

91

2相ロッキングの分散実装法(1/3)

2相ロッキングの分散システムへの実装法

仮定:データは複数マシンに分散しているとする

集中2PL(centralized 2PL)ある一つのマシン(Aとする)がロックの許可・解放に責任を持つ

各マシンのトランザクションマネージャは、マシンAのスケジュー

ラ(集中ロックマネージャ)に要求を出す

ロックマネージャがロックを許可すると、データマネージャに直接データの操作を依頼

データ項目の複製が複数マシンに存在していても良い

92

2相ロッキングの分散実装法(2/3)

プライマリ2PL(primary 2PL)各データ項目の幾つかの複製から一つを選びプライマリコピー(primary copy)とする

各データ項目のロックの許可・解放は、そのプライマリコピーが存在するマシンが責任を持つ

基本的には集中2PLと同様だが、ロックを行うマシンがデータ項目毎に異なるマシンに分散

93

2相ロッキングの分散実装法(3/3)

分散2PL(distributed 2PL)仮定:データは複数マシンに渡って複製されている

各マシンのスケジューラは、ロックの許可・解放に責任を持つことに加えて、実際の処理をローカルのデータマネージャにも依頼

データのある全てのマシン上で2PLを実行

94

悲観的なタイムスタンプ順序付け(1/2)

悲観的なタイムスタンプ順序付け(pessimistic timestamp ordering)

ロッキングとは全く異なる並行性制御アプローチ

トランザクションTに対して、開始した時刻のタイムスタンプts(T)を割り当て

[重要]Lamportの論理クロックを用いることにより、タイムスタンプの一意性は保証される

Tの全てのオペレーションにタイムスタンプts(T)を付加

全ての変数xに対して、読み取りタイムスタンプ tsRD(x)および書き込みタイムスタンプ tsWR(x)を付加

読み取りタイムスタンプ: xを最も最近読んだトランザクションTのタイムスタンプ ts(T)にセット

書き込みタイムスタンプも同様

95

悲観的なタイムスタンプ順序付け(2/2)

もし2つのオペレーションが競合したならば、タイムスタンプが最も早いものを先に処理

スケジューラがトランザクションTからread(T,x)の処理の依頼を受ける

もし、ts(T)< tsWR(x) ならば、Tの開始後に既に他のトランザクションによってxに値が書き込まれている Tをアボートさせる

ts(T)> tsWR(x) ならば、xの値を読み込んでもよいこのとき、tsRD(x)をmax{ts(T), tsRD(x)}に更新

writeの場合も同様

96

悲観的なタイムスタンプ順序付けの動作例(1/2)

トランザクション T1,T2,T3 T1は既にコミット済み(tsRD(x)= tsWR(x)=ts(T1)<ts(T2),ts(T3))T2とT3が並行に実行中(ts(T2)<ts(T3))

T2がxに書き込みたい場合T3がまだコミットしていない場合((a),(b))

ts(T2)> tsRD(x), tsWR(x)(=ts(T1))なのでT2はxへ書き込み可能

T3が既にxを読むか書き込むかしてコミットした場合( (c),(d))

T2はアボートされる(ただし、新しいタイムスタンプをもらってT2を再実行すればよい)

Page 17: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

17

97

悲観的なタイムスタンプ順序付けの動作例(2/2)

T2がxから読み取りたい場合競合が無い場合((e))、読み込みは直ちに行える

ts(T3)<ts(T2)であるようなT3がxに書き込んで、まだコミットしていない場合((f))、T3がコミットするのを待ってから読み込む

T3がxに書き込んで既にコミットしている場合((g))、T2はアボートされる

T3がxに書き込んでまだコミットしていない場合((h))、T2はアボートされる

98

タイムスタンプ方式とロック方式の比較

タイムスタンプ方式では、トランザクションが自分より大きな(時間的に後の)タイムスタンプに遭遇するとアボートするしかない

同じ状況で、ロック方式であれば、ロックを待つか、ロックを獲得して処理を進めるか、いずれかが可能

タイムスタンプ方式は決してデッドロックしない

ロック方式は一般にデッドロックの可能性がある

99

楽観的タイムスタンプ順序付け

楽観的並行性制御(optimistic concurrency control)[Kung and Robinson 1981]

基本方針:

とにかくやってみろ(他で何をやっているか気にするな)

何か問題が起きたらその時考えろ

多くの政治家はこのアルゴリズムを使用 ☺

競合が滅多に生じない場合、うまく動作する

100

楽観的タイムスタンプ順序付け

楽観的並行性制御(optimistic concurrency control)[Kung and Robinson 1981]

競合が生じる場合の処理:

どの変数がread/writeされたかを追跡管理

コミット時に、それらの変数が他のトランザクションによって変更されたか否かを調査

もし変更されていればアボート, さもなければコミット

利点:デッドロックフリー、並列度最大(どのプロセスにも待ちが生じることが無い)

欠点:時々失敗(アボート)して最初からやり直す必要がある

システムの負荷が高い場合、失敗の可能性が高くなり、効率が悪化

101

5章のまとめ

プロセスの同期:プロセス間通信と深く関連

分散システムにおける問題:大域的な時刻の概念が無い

分散システムにおける時刻同期手法

基本的に、時計の値をメッセージでやり取りし、メッセージの伝送遅延を考慮することで達成

多くの場合、絶対時刻を知る必要が無い

イベント間の相対的な順序が重要 Lamportは論理クロックの概念を導入し、イベントの順序を保証するメカニズムを提案

102

5章のまとめ(続き)

分散システムの現在状態を知ることは一般に困難

各プロセスが自分のローカル状態、および、伝送中のメッセージの情報を集めることで、システム全体のグローバル状態を知ることができる

分散スナップショットをとることにより、システムが稼動中にグローバル状態の情報を得ることが可能

プロセスの同期のためにコーディネータが必要な場合が多い

選任アルゴリズムによってコーディネータがクラッシュしても、代わりのコーディネータを選びなおすことが可能

排他制御アルゴリズム: 最も重要な同期アルゴリズム

共有リソースに同時に高々1つのプロセスしかアクセスしないことを保証

コーディネータを選ぶことにより容易に実現可能

完全な分散アルゴリズムは存在するが効率が悪い

トランザクション: 完全に実行するか、全く実行しないかいずれかであるような処理の単位

並行性制御によって、お互いに干渉しないように並列に複数のトランザクションを分散実行することが可能

Page 18: グローバル状態 分散スナップショットnakata/mobile-cp/chap-05j...2 7 分散スナップショットアルゴリズム 次に、マーカー(marker)を各出力チャネルに送信

18

103

演習問題

1. [Chandy and Lamport 1985]の分散スナップショットアルゴリズムが一貫性のあるグローバル状態を記録することを、本スライドで示した例で記録したグローバル状態に対応するカットを図示することにより確認せよ。

2. 2つのプロセスが同時にコーディネータのクラッシュを知り、ブリーアルゴリズムによって同時に選任を開始したら何が起こるか考察せよ。

3. 上記と同様の状況で、 [Dijkstra and Scholten 1980]の拡散

計算に基づくアルゴリズムによって複数プロセスが同時に選任を開始したら何が起こるか考察せよ。

4. 逐次化可能性の例(本スライド番号81、教科書図5-25(d))では3つのスケジュールが示されているが、これら以外の可能なスケジュールをすべて列挙し、それぞれ有効か無効かを示せ。