如何通俗的解释两阶段提交?

2020-05-16  本文已影响0人  elon_wen

张大胖想跟几个朋友组个饭局一起吃饭。

这些人有几个特点:

一是、只能两两之间互相沟通,不能拉到一个群里交流。

二是、大家沟通时候还时不时收不到对方的消息。

三是、每个人都可能会突然失忆,所以每个人都有一个小本本,答应某个事情,或做某个事情之前都会现在小本本里记录一下。

四是、每个人对于答应过要做的是都会遵守约定。

五是、每个人都不会提供虚假信息。


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,协议完成)

上一篇下一篇

猜你喜欢

热点阅读