云计算之时钟和顺序以及推演的各种一致性


参考文献:

Lamport’s logical clock
强一致性、顺序一致性、弱一致性和共识

这章重点介绍了分布式系统下各种类型的时序,其实在分布式场景下并不需要确切的时间,我们只是需要时间来对事件进行排序ordering. 并且还聊到了哪种order顺序是正确correct的,这其实没有绝对的定论,而是要根据各种场景选择合适的顺序,重点在于不同的节点对于正确性correctness的定义需要一致。

Total order

all replicas process messages in same order, 对于多个replica节点来说,所有的replica节点都遵循相同的处理顺序,但是不一定服从real-time,也就是不一定和client发来的处理顺序一致。
请添加图片描述
与之相对应的是顺序一致性(Sequential Consistency)

Implementation of total order

Total-order是可以实现的,不过需要选出一个leader,并且每次分发消息的时候都需要一个时间戳。
请添加图片描述

Linearizability

total order + respect the real-time,在total order的情况下加上了real-time的要求,即和client发来的处理顺序一致,并且所有replicas都是相同的处理顺序。
请添加图片描述
linearizability是没法在distributed system分布式系统中实现的,这里有个CAP的理论,参考轻松理解CAP理论,简单来说就是在P的场景下,无法保证C和A同时成立,除非有特殊的场景设计,比如Google对P的场景进行了独特的设计。

但是linearizability却可以在parallel system并行系统中实现,因为这个系统是个同步的场景synchronous setting,并且parallel system就应当保证linearizability的唯一正确性。

与之相对应的一致性叫做 线性一致性(Linearizability),还可以叫强一致性(Strong Consistency)外,还叫做原子一致性(Atomic Consistency)、立即一致性(Immediate Consistency)或外部一致性(External Consistency)

FIFO order

different servers can get different orders as long as the order from the same client is preserved. 这里强调了多个client的要求,对于多个replica server来说,他们是可以按不同的顺序处理消息的,但是对于给他们发消息的每个client,每个服务器server需要按client发来的消息一样的顺序对消息进行处理。
请添加图片描述

Implementation of FIFO-order

同样可以在distributed system中实现,clients需要维护一个本地的计数器,server端需要为每一个client维护一个处理队列。
请添加图片描述

Happen-before ordering

可以通过逻辑表示出发送方和接收方的顺序关系。
请添加图片描述
这里我们重点关注如何在日志中记录这种前后关系,也就是采用了Lamport’s Logical Clock的方法如下:
请添加图片描述
简单理解来看,对于同一个process的先后事件,后一个事件为前一个LC++,对于不同process具有happen-before关系的事件,后一个事件也为前一个LC++,最终该事件的LC为这两个值中的max. 假设 P i P^i Pi P j P^j Pj发消息, L C j = m a x ( 1 + L C i , 1 + L C j ) LC^j=max(1+LC^i,1+LC^j) LCj=max(1+LCi,1+LCj)

但是这种记录方法有它的局限性,即当LC(x)<LC(y)的时候,我们不一定可以推出x一定先于y发生,也就是说x<y,也可能会出现x和y同时发生,如图中(f,1)和(i,2)可能会同时发生,但是x绝不会晚于y发生。这也表明logical clock只展现出事件之间的potential causality,不能完全tell causality。
在这里插入图片描述

Causal ordering

Causal ordering可以表示不同进程间的因果关系,下面这个例子很生动,如果我们只是维持FIFO order,那么分别保证了mother(client)的顺序和father(client)的顺序,但是它们两者综合起来看就会产生意想不到的后果。因此我们需要一种因果关系去表征不同process间的关系,这就是causal relationship。
请添加图片描述
在实现上,采取了vector clock这种时钟,VC不是一个值,而是一个有N个分量的向量,其中N是processors的个数。在进行更新的时候,和Logistic Clock一样是取最大值,不过是对每一个分量都要取当前的最大值;对于先后事件时间 V C VC VC的更新,假设 P i P^i Pi P j P^j Pj发消息,接受者 P j P^j Pj需要在 V C j VC^j VCj第j个分量上+1,即 V C j [ j ] + 1 VC^j[j]+1 VCj[j]+1,然后和发送者 P i P^i Pi原来在第j个分量上的值 V C i [ j ] VC^i[j] VCi[j]进行比较, V C j ← [ max ⁡ ( V C j [ 1 ] , V C i [ 1 ] ) , . . . , max ⁡ ( V C j [ j ] + 1 , V C i [ j ] ) , . . . , max ⁡ ( V C j [ n ] , V C i [ n ] ) ] V C^{j} \leftarrow \left[ \max(V C^j[1], V C^i[1]) ,...,\max(VC^j[j]+1,VC^i[j]),...,\max(V C^j[n], V C^i[n]) \right] VCj[max(VCj[1],VCi[1]),...,max(VCj[j]+1,VCi[j]),...,max(VCj[n],VCi[n])]

请添加图片描述
与之对应的是因果一致性(Causal Consistency),这是弱一致性中最终一致性的一种,参考 强一致性、顺序一致性、弱一致性和共识里面别的分类。

Summary

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网民工蒋大钊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值