distributed systems chapter 5: synchronization

48
Distributed Systems Distributed Systems Chapter 5: Chapter 5: Synchronization Synchronization B4 B4 弘弘 弘 弘弘 弘

Upload: deron

Post on 30-Jan-2016

71 views

Category:

Documents


0 download

DESCRIPTION

Distributed Systems Chapter 5: Synchronization. B4 弘中 健. 全体の流れ. 分散システムの同期の基礎 Logical lock Distributed Snapshot Election Algorithm Mutual Exclusives Transaction. Distributed System. 複数のマシンのネットワーク これらのマシンは message passing によって通信する。 複数のプロセスを議論する時、それらはそれぞれ別々のマシンにあることを前提に話す。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Distributed Systems Chapter 5: Synchronization

Distributed SystemsDistributed SystemsChapter 5: Chapter 5:

SynchronizationSynchronization

B4 B4 弘中 健弘中 健

Page 2: Distributed Systems Chapter 5: Synchronization

全体の流れ全体の流れ

分散システムの同期の基礎分散システムの同期の基礎 Logical lockLogical lock Distributed SnapshotDistributed Snapshot Election AlgorithmElection Algorithm Mutual ExclusivesMutual Exclusives TransactionTransaction

Page 3: Distributed Systems Chapter 5: Synchronization

Distributed SystemDistributed System

複数のマシンのネットワーク複数のマシンのネットワーク これらのマシンはこれらのマシンは message passingmessage passing にによって通信する。よって通信する。

複数のプロセスを議論する時、それらは複数のプロセスを議論する時、それらはそれぞれ別々のマシンにあることを前提それぞれ別々のマシンにあることを前提に話す。に話す。

Page 4: Distributed Systems Chapter 5: Synchronization

分散システム分散システム (DS)(DS) のの ClockClock

それぞれのマシンは独自に時間を刻んでいそれぞれのマシンは独自に時間を刻んでいる。る。 時間は違うし、刻みも違う時間は違うし、刻みも違う (clock interval)(clock interval)。。 ローカルプロセスはローカルのローカルプロセスはローカルの clockclockでで

current timecurrent timeを決定している。を決定している。 複数のマシンで共同に仕事をする時に問題複数のマシンで共同に仕事をする時に問題

ex:ex:ファイルの更新ファイルの更新

Page 5: Distributed Systems Chapter 5: Synchronization

どうどう clockclock を同期するかを同期するか Time serverTime server を使うを使う

ある時間間隔ごとにある時間間隔ごとに time req.time req. をして合わせる。をして合わせる。 合わせても、すぐにまたズレる。合わせても、すぐにまたズレる。 RequestRequest に不確定な遅延がある。に不確定な遅延がある。

Time DaemonTime Daemon を使うを使う DaemonDaemon が全マシンから時間をが全マシンから時間を requestrequest DaemonDaemon が平均時間をが平均時間を BroadcastBroadcast する。する。 Time serverTime server の問題は解決されない。の問題は解決されない。

Page 6: Distributed Systems Chapter 5: Synchronization

結局。。。結局。。。

結局、きっちり時間を合わせることは不結局、きっちり時間を合わせることは不可能可能

でも、共同作業をする時は同期が大切でも、共同作業をする時は同期が大切 結局結局

絶対的な時間は問題じゃない絶対的な時間は問題じゃない 物事物事 (event)(event)の順序に合意できればいいの順序に合意できればいい →→Logical ClocksLogical Clocks

Page 7: Distributed Systems Chapter 5: Synchronization

イベントとはイベントとは

イベント:イベント: あるプロセスが実行する単一のあるプロセスが実行する単一の actionaction

Ex: send msg., receive msg., change sateEx: send msg., receive msg., change sate 一つのプロセスのイベントは全順序一つのプロセスのイベントは全順序

Page 8: Distributed Systems Chapter 5: Synchronization

Lamport’s Logical ClockLamport’s Logical Clock

DSDS のおける、イベントの順序のおける、イベントの順序 A “happens before” B ≡ A→BA “happens before” B ≡ A→B 同一プロセスで、同一プロセスで、 event eevent e がが event e’event e’ の前の起きるの前の起きる

とと e→e’e→e’

プロセス間でメッセージプロセス間でメッセージ mm を通信したらを通信したら Send(m)→Recv(m)Send(m)→Recv(m)

→→ はは transitivetransitive A→B & B→C ⇒ A→CA→B & B→C ⇒ A→C

→→ は半順序は半順序 順序づけられないイベントは順序づけられないイベントは A,BA,B は”は” concurrent” A || Bconcurrent” A || B

Page 9: Distributed Systems Chapter 5: Synchronization

Lamport’s Logical Clock AlgorithmLamport’s Logical Clock Algorithm

CiCi :各プロセスが持つ:各プロセスが持つ logical clocklogical clock A→B ⇒ Ci(A)<Ci(B)A→B ⇒ Ci(A)<Ci(B) CiCi は非減少は非減少 二つのプロセスで連携する時、二つのプロセスで連携する時、 Ci(x)=Cj(x)Ci(x)=Cj(x)

プロセス番号を小数点をつけて順序をわざとつける。プロセス番号を小数点をつけて順序をわざとつける。 Ex: P1,P2Ex: P1,P2 でで Ci(x)=4 → C1(x)=4.1 C2(x)=4.2Ci(x)=4 → C1(x)=4.1 C2(x)=4.2 とする。とする。

プロセスプロセス PiPi でイベントがある時でイベントがある時 Ci++Ci++

プロセスプロセス PiPi がが msgmsg をを sendsend する時する時 クロッククロック CiCi を添付するを添付する

プロセスプロセス PjPj がが PiPi からから msgmsg をを recvrecv する時する時 (Ci(Ci は添付されは添付されたものたもの )) Cj=max(Ci,Cj)+1Cj=max(Ci,Cj)+1

Page 10: Distributed Systems Chapter 5: Synchronization

Logical Clock ExampleLogical Clock Example a→b→c→d→f ⇒ C1(a)<C1(b)<C2(c)<C2(d)<C3a→b→c→d→f ⇒ C1(a)<C1(b)<C2(c)<C2(d)<C3

(f)(f) b||eb||e

C1(e)<C3(b)C1(e)<C3(b) は関係ないは関係ない A→B ⇒ C(A)<C(B)A→B ⇒ C(A)<C(B)    butbut    C(A)<C(B) C(A)<C(B) ⇏⇏ A→B A→B

p1

p2

p3

a b

c d

e f

m1

m2

Physicaltime

Figure10.5

0

0

0

1

1

2

3 4

5

Page 11: Distributed Systems Chapter 5: Synchronization

Vector TimeStampVector TimeStamp

Vector TimeStamp:VTVector TimeStamp:VT VTi : PiVTi : Pi が管理するプロセス数長の配列が管理するプロセス数長の配列 VTi[i]: PiVTi[i]: Pi で起きたで起きた locallocal イベントイベント

現在の現在の PiPi を影響したを影響した locallocal イベントイベント VTi[j] (i≠j) : VTi[j] (i≠j) : 現在の現在の PiPi を影響したを影響した PjPj のイのイ

ベントベント VTi≦VTj (for all i,j)VTi≦VTj (for all i,j)

For all k VTi[k]≦VTj[k]For all k VTi[k]≦VTj[k]

Page 12: Distributed Systems Chapter 5: Synchronization

Vector Stamp AlgorithmVector Stamp Algorithm

Init: VTi[j]=0 (j=1~N)Init: VTi[j]=0 (j=1~N) local event on Pi: VTi[i]++local event on Pi: VTi[i]++ Pi send msg. m to PjPi send msg. m to Pj

VTiVTi をを mm に添付に添付 (vt(vt とするとする )) Pj recv. msg. m from PiPj recv. msg. m from Pi

VTj[k]=max(VTVTj[k]=max(VT jj [k],vt[k])[k],vt[k]) VTj[j]++VTj[j]++ Recv. というローカルイベントの対するもの

Pj は以後受け取った m に影響されたことになる。当然、m 自信が過去に影響されたものに対しても、影響されるはず。

Page 13: Distributed Systems Chapter 5: Synchronization

Vector TimeStamp ExampleVector TimeStamp Example TimestampTimestamp によって、因果関係がしっかりする!によって、因果関係がしっかりする! VTi(A)<VTj(B) ⇔ A→BVTi(A)<VTj(B) ⇔ A→B

VT2(d)<VT3(f) ⇔ d→fVT2(d)<VT3(f) ⇔ d→f !VTi(A)<VTj(B) & ! VTj(B)<VTi(A) ⇔ A||B!VTi(A)<VTj(B) & ! VTj(B)<VTi(A) ⇔ A||B

!VT3(e)<VT1(b) & !VT1(b)<VT3(e)⇔b||e!VT3(e)<VT1(b) & !VT1(b)<VT3(e)⇔b||e 勿論、まだ半順序関係です勿論、まだ半順序関係です

p1

p2

p3

a b

c d

e f

m1

m2

Physicaltime

(0,0,0)

(0,0,0)

(0,0,0)

(1,0,0) (2,0,0)

(0,0,1)

(2,1,0) (2,2,0)

(2,2,2)

(2,0,0)

(2,2,0)

Page 14: Distributed Systems Chapter 5: Synchronization

Global StateGlobal State

Def:Def: 全てのプロセスの状態と、ネット全てのプロセスの状態と、ネットワーク中漂っているワーク中漂っている (( まだ届いてないまだ届いてない )ms)msgg 達達

Global stateGlobal state を知ることは意外と重要を知ることは意外と重要 Distributed GCDistributed GC Program terminationProgram termination Deadlock detectionDeadlock detection

Page 15: Distributed Systems Chapter 5: Synchronization

Distributed SnapshotDistributed Snapshot

Global stateGlobal state を表現する手法を表現する手法 いろいろあるが、いろいろあるが、 distributed snapshotdistributed snapshot

DD istributed Snapshotistributed Snapshot 各プロセスがあったであろう状態各プロセスがあったであろう状態 (( 各プロセ各プロセ

スのある時点でのイベント履歴スのある時点でのイベント履歴 )) の和の和 CutCut ともいうともいう

そのうち、”そのうち、” consistent”consistent” であるものであるもの プロセス同士のイベント履歴が矛盾ぜす、一貫しプロセス同士のイベント履歴が矛盾ぜす、一貫し

ているている

Page 16: Distributed Systems Chapter 5: Synchronization

CutsCuts

m1 m2

p1

p2Physical

time

e10

Consistent cutInconsistent cut

e11

e12

e13

e20

e 21

e 22

m1を受け取った

m1なんて送ってない !

Global Snapshot

Page 17: Distributed Systems Chapter 5: Synchronization

Global State Global State ImplementationImplementation

全てのプロセスは一方向通信チャネルを全てのプロセスは一方向通信チャネルをつかって繋がれている。つかって繋がれている。

P1P2

P3

Page 18: Distributed Systems Chapter 5: Synchronization

AlgorithmAlgorithm

1. G Snapshot1. G Snapshot を取りたいプロセスを取りたいプロセス 自分のプロセスを状態を保存する。自分のプロセスを状態を保存する。 マーカーマーカー M(PIDM(PID がついたがついた )) を、自分のすべてのチャを、自分のすべてのチャ

ネルから送る。ネルから送る。 2. M2. M を受け取ったらプロセスを受け取ったらプロセス

自分のプロセスの状態を保存していない時自分のプロセスの状態を保存していない時 自状態を保存し、自分の全てのチャネルから自状態を保存し、自分の全てのチャネルから MM を転送を転送 以後、送って来る以後、送って来る msgmsg 全てを保存。全てを保存。

自分のプロセスの状態を既に保存した時自分のプロセスの状態を既に保存した時 全てのプロセスから全てのプロセスから MM が来たら、が来たら、 msgmsg 保存を終了し、保存保存を終了し、保存

したものをしたものを snapshotsnapshot を取りはじめたプロセスに送る。を取りはじめたプロセスに送る。

Page 19: Distributed Systems Chapter 5: Synchronization

アルゴリズムの図アルゴリズムの図

M

M

M到着 msg を保存する区間 :ここで到着した msg は snapshot でネットワーク上漂っていた msg

状態保存

Page 20: Distributed Systems Chapter 5: Synchronization

Termination DetectionTermination Detection

PjPj はは PiPi からから snapshot markersnapshot marker を貰った ⇒ を貰った ⇒ PiPi はは PjPj の親の親Term_detect(){Term_detect(){

DONE=TRUE;DONE=TRUE;recv(M,Pi);//Pirecv(M,Pi);//Pi からから MM を貰った、を貰った、 PiPi が親になるが親になるSS=local_snapshot();//snapshotSS=local_snapshot();//snapshot のアルゴリズムに従う 子プロセスが決まるのアルゴリズムに従う 子プロセスが決まるif(!(local_work_done(SS)) || gotmsg(SS) ){if(!(local_work_done(SS)) || gotmsg(SS) ){

send(CONTINUE,Pi);send(CONTINUE,Pi);DONE=FALSE;DONE=FALSE;

}}for all child process: Pc{for all child process: Pc{

if(recv(Pc)==CONTINUE){if(recv(Pc)==CONTINUE){send(CONTINUE,Pi);send(CONTINUE,Pi);DONE=FALSE;DONE=FALSE;

}}}}if(DONE)if(DONE)

send(DONE,Pi);send(DONE,Pi);elseelse

send(CONTINUE,Pi);send(CONTINUE,Pi);}}

自分の処理が終っていなかったり、 msg が届いたりしたら終わりじゃない

子プロセスが一つでも終わりじゃないと、終わりじゃない

Page 21: Distributed Systems Chapter 5: Synchronization

Election AlgorithmsElection Algorithms

全プロセスで同期を取ったりするには全プロセスで同期を取ったりするにはcoordinatorcoordinator が必要な場面が多々ある。が必要な場面が多々ある。

CoordinatorCoordinator を選出する方法が必要を選出する方法が必要 仮定仮定 ::

選出中に誰も死なない選出中に誰も死なない 全てのプロセスには番号がついていて、他の全てのプロセスには番号がついていて、他のプロセス番号も全て知っているプロセス番号も全て知っている

誰が生きているかは分からない誰が生きているかは分からない

Page 22: Distributed Systems Chapter 5: Synchronization

Bully AlgorithmBully Algorithm

0.coordinator0.coordinator がいないこと、新しいプロセスががいないこと、新しいプロセスが登場したことに気づいたプロセスが始める登場したことに気づいたプロセスが始める 自分よりもプロセス番号が高いプロセスに自分よりもプロセス番号が高いプロセスに ELECTION ELECTION

msgmsg を送る。を送る。 1.ELECTION1.ELECTION メッセージを受け取った時メッセージを受け取った時

Ok msgOk msg で返事し、自分よりもプロセス番号が高いプで返事し、自分よりもプロセス番号が高いプロセスにロセスに ELECTION msgELECTION msg を送る。を送る。

2a.Ok msg2a.Ok msg が返って来た時が返って来た時 仕事終了仕事終了

2b.2b.誰からも返事がない時誰からも返事がない時 自分が自分が coordinatorcoordinator になったとになったと broadcastbroadcast する。する。

Page 23: Distributed Systems Chapter 5: Synchronization

The flowThe flow

P0

P1 P2

P3

P4P5

OK

ELECTIONOK

C:4

CC

ELECTION

!!

Page 24: Distributed Systems Chapter 5: Synchronization

Ring AlgorithmRing Algorithm

仮定仮定 :: 自分の自分の successorsuccessor プロセスはプロセスは Suc PID=(PID+1) mod PROCESS_NUMSuc PID=(PID+1) mod PROCESS_NUM

複数の人が同時に行っても複数の人が同時に行っても OK!OK! 0.Coordinator0.Coordinator が死んだことに気づいたプロセスが死んだことに気づいたプロセス

自分の自分の PIDPID と付けて、と付けて、 successorsuccessor にに ELECTION msgELECTION msg を送る。を送る。 1a.ELECTION msg1a.ELECTION msg を受け取ったらを受け取ったら

自分の自分の PIDPID を付け足して、を付け足して、 successorsuccessor にに ELECTION msgELECTION msg を転送すを転送する。る。

1b.Successor1b.Successor から返事がなかったらから返事がなかったら その次のプロセスに同じその次のプロセスに同じ msgmsg を送る。を送る。

2.2. 自分の自分の PIDPID を含むを含む ELECTION msgELECTION msg が届いたら終了が届いたら終了 一番一番 PIDPID が高いプロセスが新しいが高いプロセスが新しい coordinatorcoordinator

Page 25: Distributed Systems Chapter 5: Synchronization

The flow, yet againThe flow, yet again

P0

P1 P2

P3

P4P5

C

!!

!!

[1,]

[4,]

[1,2,][4,0,]

Page 26: Distributed Systems Chapter 5: Synchronization

Mutual ExclusivesMutual Exclusives

DSDS でも同期を取るとき、でも同期を取るとき、 locklock を定義すを定義する必要がある。る必要がある。

仮定:仮定: 全ての全ての msgmsg は届くは届く

Page 27: Distributed Systems Chapter 5: Synchronization

Centralized Lock AlgorithmCentralized Lock Algorithm

LOCKLOCK CoordinatorCoordinator にに REQUEST msgREQUEST msg を送る。を送る。 GRANT msgGRANT msg を受け取るまでを受け取るまで BLOCKBLOCKする。する。 CoordinatorCoordinator はは locklock がが freefree の時、の時、 GRANT msgGRANT msg を返信すを返信す

る。る。 LockLock がが freefree じゃない時、返信せず、じゃない時、返信せず、 waiting queuewaiting queue にに

プロセスを入れる。プロセスを入れる。 LockLock がが freefree になったらになったら coordinatorcoordinator はは queuequeue の先頭のの先頭の

プロセスにプロセスに GRANT msgGRANT msg を送るを送る UNLOCKUNLOCK

CoordinatorCoordinator にに RELEASE msgRELEASE msg を送る。を送る。 CoordinatorCoordinator が死ぬと破綻するが死ぬと破綻する

Page 28: Distributed Systems Chapter 5: Synchronization

Distributed Lock AlgorithmDistributed Lock Algorithm

Lamport logical clockLamport logical clock を使うを使う LOCKLOCK

REQ(PID,critical region name,TIMESTAMP)REQ(PID,critical region name,TIMESTAMP) をを broadcastbroadcast する。する。 REQREQを受け取ったプロセスはを受け取ったプロセスは

(i)(i)構わない時は構わない時は OK msgOK msg を送るを送る (ii)(ii) そのその critical regioncritical region に入っていると返事せずに、に入っていると返事せずに、 wait queuewait queue にに PIDPID を入を入

れる。れる。 (iii)(iii) 自分も自分も REQREQを出している時、自分が出したを出している時、自分が出した TIMESTAMPTIMESTAMP と今届いたと今届いた REQREQ

のの TIMESTAMPTIMESTAMP を比較する。自分の方が若かったらを比較する。自分の方が若かったら (i),(i), そうでなかったらそうでなかったら (ii)(ii) 単純に単純に TIMESTAMPTIMESTAMP の数値を比較する。の数値を比較する。

全てのプロセスから全てのプロセスから OKOKをを recvrecv するとすると LockLock を取得する。を取得する。 UNLOCKUNLOCK

RELEASE(PID, critical region name)RELEASE(PID, critical region name) をを broadcastbroadcast する。する。 N points of failure…N points of failure…

Page 29: Distributed Systems Chapter 5: Synchronization

Token Ring Lock AlgorithmToken Ring Lock Algorithm

初期化:プロセス初期化:プロセス 00 でトークンを作る。でトークンを作る。 トークンをプロセス間で回していく。トークンをプロセス間で回していく。

PiPi はトークンをリングの次のプロセスはトークンをリングの次のプロセス Pi+1Pi+1 に送る。に送る。 Pi+1Pi+1 トークンを受け取るとトークンを受け取ると OK msgOK msg を返信する。を返信する。 PiPi はは OK msgOK msg を返ってこないとその次のプロセスにを返ってこないとその次のプロセスに

トークンを送る。トークンを送る。 トークンを受け取ると、トークンを受け取ると、 critical regioncritical region に入るこに入るこ

とが出来る。処理を終えて出たら、トークンをとが出来る。処理を終えて出たら、トークンを次のプロセスに次のプロセスに sendsend する。する。

トークンが持っているプロセスが死ぬと破綻すトークンが持っているプロセスが死ぬと破綻する。る。

Page 30: Distributed Systems Chapter 5: Synchronization

TransactionTransaction

一連の処理を一連の処理を atomicallyatomically に実行する。に実行する。 成功したら結果を更新成功したら結果を更新 (commit)(commit)し、失敗したら行った仕事を捨てし、失敗したら行った仕事を捨てる。る。 作業中に担い手が死んでも、影響が出ないために大切。作業中に担い手が死んでも、影響が出ないために大切。

AtomicAtomic 処理の結果は成功されるまで処理の結果は成功されるまで commitcommitされない。されない。

ConsistentConsistent System invariablesSystem invariables は前後で不変でないといけない。は前後で不変でないといけない。 作業中はルールを破ることが許される。作業中はルールを破ることが許される。

例えば、銀行の例えば、銀行の transactiontransactionではお金の総和ではお金の総和 IsolatedIsolated

複数の複数の transactiontransaction が同時にあっても、ある逐次の順序で行われたとが同時にあっても、ある逐次の順序で行われたと同じ結果が最終的に同じ結果が最終的に commitcommitされる。される。

DurableDurable 一度一度 commitcommitした内容はもう戻せない。した内容はもう戻せない。

Page 31: Distributed Systems Chapter 5: Synchronization

Flat TransactionFlat Transaction

今まで説明した今まで説明した TransactionTransaction のことのこと バニラ味バニラ味

問題問題 All or nothing… All or nothing… もったいない。。。もったいない。。。 時間が掛かる時間が掛かる

例えば:あるメモリのアドレスが変更された時、例えば:あるメモリのアドレスが変更された時、全てのポインタを更新する。全てのポインタを更新する。

Page 32: Distributed Systems Chapter 5: Synchronization

Nested TransactionNested Transaction

TransactionTransaction は依存関係のない内容を子は依存関係のない内容を子 transactiontransaction にに小分けし、複数のプロセスに負荷を分散する。小分けし、複数のプロセスに負荷を分散する。 子子 transactiontransaction はさらに子はさらに子 transactiontransaction を作ってもいい。を作ってもいい。 木構造に仕事が分散される。木構造に仕事が分散される。

子子 transactiontransaction がが commitcommitする時、親する時、親 transactiontransaction ににcommitcommitする。する。

親親 transactiontransaction がが ABORTABORTすると子すると子 transactiontransaction ももABORTABORTする。する。

子子 transactiontransaction がが ABORTABORTすると、親すると、親 transactiontransaction は次は次に何をするか考える。に何をするか考える。 ABORT? retry?ABORT? retry?

Page 33: Distributed Systems Chapter 5: Synchronization

Distributed TransactionDistributed Transaction

Nested TransactionNested Transaction とほぼ同じとほぼ同じ ただ、分散される仕事は互いに依存関係ただ、分散される仕事は互いに依存関係がある。がある。

一つの一つの Flat TransactionFlat Transaction が複数のプロセが複数のプロセスで行われる。スで行われる。

データアクセスにはデータアクセスには lockinglocking などの同期などの同期が必要が必要

Page 34: Distributed Systems Chapter 5: Synchronization

AtomicityAtomicity のの implementationimplementation

Private Work SpacePrivate Work Space 触るデータを全てコピーし、作業はその上で行触るデータを全てコピーし、作業はその上で行

う。う。 CommitCommit する時に更新する。する時に更新する。 実際は全コピーはせず、ポインタのみをコピー。実際は全コピーはせず、ポインタのみをコピー。 WriteWrite した内容のみを保持し、後でした内容のみを保持し、後で write backwrite back

Writehead logWritehead log WriteWrite は実行される都度は実行される都度 originaloriginal を更新し、を更新し、 loglog

を取る。を取る。 AbortAbort する時はする時は loglog に従ってデータをに従ってデータを roll backroll back

する。する。

Page 35: Distributed Systems Chapter 5: Synchronization

Concurrency ControlConcurrency Control

Serially Equivalent Interleaving (SEI)Serially Equivalent Interleaving (SEI) 同時に複数の同時に複数の transactiontransaction がある時、全てのがある時、全ての tratra

nsactionnsaction がある逐次の順番に実行されたと同じがある逐次の順番に実行されたと同じ結果を残す。結果を残す。

だた、だた、 mutexmutex を使うだけでは実現出来ない。を使うだけでは実現出来ない。 状態の変化は不可分で出来るが、複数の状態の変化は不可分で出来るが、複数の TransaTransa

ctionction が自由な順序で変化を加えるので、が自由な順序で変化を加えるので、 isolatisolation, consistencyion, consistencyを維持出来ない。を維持出来ない。

Page 36: Distributed Systems Chapter 5: Synchronization

implementationimplementation

Data ManagerData Manager 指示された指示された read/writeread/writeをオブジェクトに実行する。をオブジェクトに実行する。

SchedulerScheduler SEISEIを実現するようにを実現するように read/writeread/writeをを scheduleschedule し、し、

data managerdata manager の指示を送る。の指示を送る。 Transaction ManagerTransaction Manager

一つの一つの transactiontransaction に付き一つに付き一つ Transaction primitiveTransaction primitive をを read/writeread/writeの命令に解釈の命令に解釈する。する。

Page 37: Distributed Systems Chapter 5: Synchronization

TransactionTransaction の構成の構成

Transaction Manager

Scheduler

Data Manager

SchedulerScheduler

Data Manager Data Manager

Machine 1 Machine 2 Machine 3

Page 38: Distributed Systems Chapter 5: Synchronization

Conflicting operation pairConflicting operation pair

同時に走っている同時に走っている transactiontransaction 間での衝間での衝突突

一つのオブジェクトに対する二つの命令一つのオブジェクトに対する二つの命令の順序によって最終結果が異なる。の順序によって最終結果が異なる。 Read-write operation pairRead-write operation pair Write-write operation pairWrite-write operation pair

Page 39: Distributed Systems Chapter 5: Synchronization

Example:Example:

Transaction 1:Transaction 1:

x=x-1 //x=4x=x-1 //x=4

y=y+1y=y+1

Transaction 2:Transaction 2: s=0s=0

s=s+x //s=4s=s+x //s=4 s=s+y //s=9s=s+y //s=9

終ると s=9…

x=y=5とする

Page 40: Distributed Systems Chapter 5: Synchronization

Solution to the problemSolution to the problem

2 transaction Ti,Tj2 transaction Ti,Tj 間の全ての間の全ての conflicting oconflicting operation pairperation pair において、において、 TiTi がが TjTj よりも前よりも前にオブジェクトへの処理を完全に済ませにオブジェクトへの処理を完全に済ませれば、れば、 SEISEI は守られる。は守られる。

Page 41: Distributed Systems Chapter 5: Synchronization

2 Phase Locking2 Phase Locking

今述べた条件が満たされるように今述べた条件が満たされるように locklock で同期を取る。で同期を取る。 1.Ti1.Ti の命令に対して、の命令に対して、 schedulerscheduler は既に発行したは既に発行した TjTj の同じオブジェの同じオブジェ

クトに対する命令と衝突しないかチェック。クトに対する命令と衝突しないかチェック。 問題なければ問題なければ locklock をロックして、をロックして、 TiTi の命令は進む。の命令は進む。 問題があれば、問題があれば、 TiTi はロックが貰えずブロックする。はロックが貰えずブロックする。

2.data manager2.data manager がそのオブジェクトへの更新はもうないとすると、がそのオブジェクトへの更新はもうないとすると、locklock を開放する。を開放する。

3.Ti3.Ti は一度一つのは一度一つの locklock を開放すると、もう二度とどのオブジェクを開放すると、もう二度とどのオブジェクトに対してもトに対しても locklock の要求が出来ない。の要求が出来ない。 複数取得したロックを開放して行く一方。複数取得したロックを開放して行く一方。

Lock phase, release phaseLock phase, release phase があることがミソがあることがミソ 二つのプロセス間が最初ロックを巡って競う。勝ったプロセスが、二つのプロセス間が最初ロックを巡って競う。勝ったプロセスが、

その後ロックを取得し続ける。つまり、勝ったプロセスが一方的その後ロックを取得し続ける。つまり、勝ったプロセスが一方的にに criticalcritical なオブジェクトを先にアクセスし続ける。なオブジェクトを先にアクセスし続ける。

Page 42: Distributed Systems Chapter 5: Synchronization

Recovery from abortsRecovery from aborts

Dirty ReadDirty Read TaTa がが objobj にに writewrite し、その後し、その後 TbTb がが objobj の値をの値を

使った。使った。 TaTa がが abortabort した時、した時、 TbTb が使った値がが使った値がroll backroll back されない。されない。

Premature WritePremature Write TaTa がが objobj にに writewrite し、その後、し、その後、 TbTb がが objobj にに writwrit

ee した。した。 TaTa がが abortabort した時、した時、 objobj の値がの値が roll baroll backck されてしまい、されてしまい、 TbTb が正しく更新したが正しく更新した objobj のの値が消えてしまう。値が消えてしまう。

Page 43: Distributed Systems Chapter 5: Synchronization

Dirty Read: ExampleDirty Read: Example

Transaction 1:Transaction 1: x=x+2 //x=7x=x+2 //x=7

ABORTABORT

Transaction 2:Transaction 2:

y=x //y=7y=x //y=7

X=5とする

・・・

x=5に roll backyの値に影響が出る。。。

Page 44: Distributed Systems Chapter 5: Synchronization

Strict 2 Phase LockingStrict 2 Phase Locking

2 phase locking2 phase locking と同じと同じ ただ、ただ、 transactiontransaction 中に中に unlockunlock を行うこを行うことはない。とはない。

transactiontransaction がが abort/commitabort/commit する時にする時に全ての全ての locklock をを unlockunlock する。する。

AbortAbort からのからの recoveryrecovery が出来る。が出来る。

Page 45: Distributed Systems Chapter 5: Synchronization

Solution:Strict ExecutionSolution:Strict Execution

objobjへのへの read/writeread/write は以前は以前 objobj にに writewrite ししたた transactiontransaction がが abort/commitabort/commit するまでするまで遅延する必要がある。遅延する必要がある。

Page 46: Distributed Systems Chapter 5: Synchronization

2 phase locking 2 phase locking の比較の比較

取得 lock数 取得 lock数

abort/commit

Locking Phase Unlocking Phase

2 Phase Locking Strict 2 Phase Locking

Unlock all at once

Page 47: Distributed Systems Chapter 5: Synchronization

Distributed 2 Phase LockingDistributed 2 Phase Locking

Centralized 2 Phase LockingCentralized 2 Phase Locking システムで一つのシステムで一つの Lock ManagerLock Managerを用意すれを用意すればいい。ばいい。

CoordinatorCoordinator とかとか TransactionTransaction の処理にはの処理には lock managerlock manager にに

locklockのの lock, unlocklock, unlockを要求する。を要求する。

Page 48: Distributed Systems Chapter 5: Synchronization

まとめまとめ

DSDS をいじるにあたっての基礎をいじるにあたっての基礎 Logical lockLogical lock Distributed SnapshotDistributed Snapshot Election AlgorithmElection Algorithm Mutual ExclusiveMutual Exclusive TransactionTransaction