为了账号安全,请及时绑定邮箱和手机立即绑定

一致性模型中的数学

本文是《如何学习分布式系统》中,关于一致性模型的相关介绍。

在学习一致性模型的过程中,发现了很多相关的数学证明,因为水平有限,基本都没看懂。在这里罗列一下,并且附上原文,有兴趣的同学可以看看。

Linearizability的locality

《Linearizability: A Correctness Condition for Concurrent Objects》一文中指出,指定一个属性P,如果每个独立的object都满足P,那么这些object组合起来也能满足P,那么P就认为是local的。可以证明Linearizability是local的。

当且仅当对每个object x,H|x是linearizable时,H也是linearizable

Linearizability的locality的重要性在于,可以模块化的设计和构建分布式系统。

Linearizability的nonblocking

《Linearizability: A Correctness Condition for Concurrent Objects》一文中指出linearizability是nonblocking属性:一个pending的invocation不会要求去等待另一个pending的invocation去complete。

它提出如下定理:假设inv是一个total 操作的invocation,如果<x inv P>是linearizable history H中的一个pending invocation,那么存在着response <x res P>,使得H·<x res P>也是linearizable。

图片描述
在文中,作者指出,Serializability天然是blocking的。

Serializability is inherently a blocking property

Linearizability的验证

《Linearizability: A Correctness Condition for Concurrent Objects》一文给出了Linearizability实现的检验方法。一个实现可以认为是一系列的history,在这些history中,有两个object:

  1. 一个表现类型object REP——a representation (or rep) object REP of type REP
  2. 一个抽象类型object ABS——an abstract object ABS of type ABS

这两个对象上的事件按照以下方式交互:

  1. 子历史H|REPH|ABS都是well-formed
  2. 对于每个进程P,REP的操作被abstract操作所包含。

如果对于一个实现中所有的H来说,H|ABS是linearizable的,那么这个实现就是正确的。
图片描述
文章后面介绍了验证的具体算法,有兴趣的同学自己研究吧。

Linearizability和Sequential Consistency效率对比

Linearizability比Sequential Consistency要严格,但是实现起来效率差多少?《Sequential Consistency versus Linearizability》一文给出了证明。

文章中作者一共研究了三种不同类型的实现:FIFO队列,stack,读写对象。节点之间的消息传递延迟为[d-u,d],d是最坏情况下的延迟。u是最大的波动,本地处理时间为0。

在文中,作者对比了不同情况下的实现效率。

节点时间大致同步,消息延迟不确定

  1. 读写对象
    为了实现linearizability一致性,最差情况的读操作是至少u/4,最差情况的写操作是u/2
    为了实现sequential consistency一致性,存在一个算法保证瞬时的读操作和2d时间的写操作,而存在的另一个算法则正好相反
  2. FIFO队列
    为了实现linearizability一致性,最差情况的入队操作是至少u/2
    为了实现sequential consistency一致性,存在一个算法保证瞬时的入队操作和2d时间的出队操作
  3. stack
    stack的情况和FIFO队列的情况一致,弹栈操作和出队操作作用一致而入栈操作和入队操作作用一致

图片描述

节点时间精确同步,消息延迟不确定

  1. 读写对象
    为了实现sequential consistency一致性,最差情况下的读操作和写操作的时间之和至少为d
    为了实现linearizability一致性,存在一个算法能够瞬时的完成读操作,并且在d时间之内完成写操作,并且存在另一个相反的算法
  2. FIFO队列
    为了实现sequential consistency一致性,最差情况下出队操作时间至少为d
    为了实现linearizability一致性,有一个算法能够瞬时完成入队操作,在d时间内完成出队操作
  3. stack
    同样,stack的结果和FIFO队列是一致的。

图片描述

更多相关内容,请参考系列文章《如何学习分布式系统》

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消