如何通俗的解釋兩階段提交?

張大胖想跟幾個朋友組個飯局一起喫飯。

這些人有幾個特點:

一是、只能兩兩之間互相溝通,不能拉到一個羣裏交流。

二是、大家溝通時候還時不時收不到對方的消息。

三是、每個人都可能會突然失憶,所以每個人都有一個小本本,答應某個事情,或做某個事情之前都會現在小本本里記錄一下。

四是、每個人對於答應過要做的是都會遵守約定。

五是、每個人都不會提供虛假信息。


Round1

張大胖準備協調大家定一個具體的時間,於是第一步,先挨個問問每個人:

張大胖:“喂,Bill,這週末晚上7點擼串你有空嗎?”

Bill:“好啊。”

張大胖繼續問第二個人。

張大胖:“喂,小強,這週末晚上7點擼串你有空嗎?”

小強:“不好意思啊,我有約了。”

張大胖只好在小本本上記錄下來:這週末晚上7點不能約飯了。

然後再挨個給大家打電話說這週末的飯局取消。

(存在任意參與者無法成功prepare,兩階段協議取消)


Round2

張大胖想了想覺得不甘心,又準備再試一次。於是他繼續拿起電話打給小強。

可是,這時候小強的電話一直處於通話中,後來索性直接顯示無人接聽了。

原來那一頭,小強正跟女朋友煲着電話粥呢,然後索性就一起出去約會去了,手機也沒帶在身上。

張大胖只好一遍遍的打着電話...

(有節點失效,兩階段協議阻塞)


Round3

終於,幾個小時後,電話通了。

張大胖:“小強,下週末中午12點喫火鍋你有空嗎?”

小強:“有啊。”

張大胖:“剛怎麼一直不接電話啊?”

小強:“這不是剛談了女朋友嘛”(做委屈狀~)。

張大胖:“那你可說好咯,約定了的事情不能變卦。”

小強:“那當然,那當然,咱哥幾個也好久沒見了…”

搞定小強後,張大胖繼續打電話問Bill:“Bill,下週末中午12點喫火鍋你有空嗎?”

Bill:“好啊。”

掛完電話,剛想通知大家就定在下週末中午12點了,結果張大胖失憶了。

(第一階段未持久化,代表第一階段未完成,此時協調者失效,協議阻塞)


Round4

等張大胖清醒過來,他先去小本本上查了一下,只看到寫了一句,“準備約大家在下週末中午12點”,其他什麼都沒有,只好把剛纔的經歷重來一遍,“喂,小強啊,...”、“喂,Bill啊,…”

此處省略500字…

等挨個確認了大家的時間之後,張大胖趕緊在小本本上寫了一句:已經和所有人確認過,下週末中午12點喫火鍋。

這時候,不巧張大胖又失憶了。

(第一階段已持久化,代表第一階段完成,此時協調者失效,協議雖然阻塞,但協調者恢復後,可以不再需要從第一階段開始)


一段小插曲

這一次張大胖清醒過來的時間比較久。

期間小強心怡的女生也來找他,問他下週末中午12點有沒有空。

碰巧小強也經歷了一次失憶,於是他查了查自己的小本本

“原來剛纔,我已經答應了張大胖”,小強雖然有點不願意,但也只好忍着痛,婉言拒絕了。“可是這小子怎麼還不通知我確認呢?”,小強嘀咕着,“萬一又改時間,害我白白失去了跟妹子約會的機會,我可饒不了他!”

(參與者第一階段完成後,此時協調者失效,協議阻塞,參與者只能等待)


Round5

張大胖終於清醒過來了,這一次他還是先去翻了翻自己的小本本,發現上面寫的那句:已經和所有人確認過,下週末中午12點喫火鍋。

這時候,他拿起電話,不再是挨個詢問了,而是直接通知:夥計們,剛纔你們都答應過啦,那就定下週末中午12點啦,不見不散哦。

(第一階段完成後,協調者恢復,通知各個參與者協議commit,協議完成)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章