分享

区块链解读37-分布式系统的时间顺序

 昵称46341144 2017-09-13

解读区块链,分布式系统的时间顺序

区块链被认为是分布式的系统,分布式系统中由于多节点,通讯、物理位置等的问题,各节点间时间一致的问题随即也被提了出来,那么怎么处理分布式系统中的一致性问题,这里简单介绍下:分布式系统的时间顺序问题。如有解释错误或者不明,请及时提出指正。

分布式系统,最简单理解有多个服务节点,客户端发出请求,服务节点之间通讯,顺序记录更新服务器数据和日志。

 

那么用户1-2和服务器节点A-B-C的时间有可能都是不一样的,那么这个请求数据的记录是怎么排序和处理。Lamport(对!又是这位大神,2013图灵奖)1978年提出一个logical clock的概念。


 


 

分布式系统中的时间问题,如果简单去想,那么通过NTP时间同步,所有节点都通过去同步时间,然后根据进程发起的物理时间来排序,先不论时间同步中同步过程中的细微毫秒级差异,多个业务发起进程,在各个进程之间有关联关系,进程随着系统计算能力有差异,并且还有检查点的判断,一旦在顺序进程中出现了前物理时间某进程改变了检查点,那么在认为是同步处理的时候就会出现检查点状态改变导致业务逻辑的改变,这种情况理解下就是你在购物网站抢购的时候,货物剩余量在你发起交易的时候还有,但是确认过程由于网络和计算的延时,发现分布式系统中一边是交易已正常请求,但是实际货物记录中已下架。引入logical clock能较好的处理这种系统记录逻辑混乱的现象。

Logical clock称为lamport timestamps,这种概念里,先把分布式系统节点间交互分成三种类型:

1.分布式单个节点自己内部传递的事件。

2.分布式节点互相之间传递的事件。

3.分布式节点接收除自己之外的传递进来的事件。

同时再加一个逻辑时间顺序概念。

顺序叠加原则:这里整个系统顺序逻辑时间时间为T(),各个节点顺序为X()

1.初始发起节点为0.

2.节点内传递,X 1

3.节点间传递,T 1

4.节点接收除自己之外的传递(T and X) 1

 

 

那么如果再定义一个节点事件顺序,对节点A.B.C排序。假定发生顺序A<B<C,在上图中,事件发生顺序为:

C-1(T=1)  B-1(T=2)  B2(T=3)  A1(T=4)  A2(T=5)  B4(T=6)  B5(T=7)  C4(T=8)  C5(T=9)  A4(T=10)

B-3(T=4)  C-2(T=5)  C-3(T=6)  A-3(T=7)

 

问题来了T(4.5.6.7)发生了重复,那么就用之前说的A<B<C原则

B-4和C-3作比较:A<B<C,那么B-4就理解为发生在C-3之前。推导B-4-->C-3。B-4发生在C-3之前。这个前提是我们已知三个节点进程发生的关系顺序,在实际情况下这个也有可能是很难进行判断的。所以对于并发情况没有很好的一致性判断。

上述图中节点A.B.C也可理解为各个进程的顺序,在整个logiccal clock中有这么一个概念要明确,进程间没有因果关系,那就认为是并发,没有因果关系对于系统来说对事件的顺序前后就没有那么强烈的需求,前提是要确定确实没有因果关系,那么分布式系统中就认为是正确的。所以归纳下,分布式系统中没有因果顺序的并发时间就不关注先后顺序。

介绍到这里,会提出一个疑问,上面也提到了,那么系统中并发怎么处理,之前通过进程顺序来排序,但是这种不是真正好的为并发处理时间顺序,在这个问题上先提出Vector clock,这是在之前lamport时间戳的一种改进逻辑时钟。

vector clock中对每一个事件上加上前一事件的序号,那么可以看到每个事件记录是一组向量。比如:(A-2 B-4 C-1),(A-2 B-5 C-4)。

 

在这种方式中,还要引入分布式系统中读写的概念,不单单是事件的传递,设定N为节点数量,R为成功读的节点,W为成功写的节点。

W R>N,那么就可以保证一致。

说明流程:(w为写入进程,a,b,c,d为节点)

1.客户端写入数据,提交到服务端。

2.服务端创建一个顺序编号,例:(w-a-1)

3.客户端再请求写入数据,生成编号:(w-a-2)

4.多次请求生成,(w-a-2)(w-b-1),(w-a-2)(w-b-1),(w-a-2)(w-d-1)

5.多次请求后,再次读到(w-a-2),那么认为(w-b-1)(w-c-1)(w-d-1)存在冲突,最终通过一致性解决方案生成(w-a-3)(w-b-1)(w-b-1)(w-d-1)写入。

Vector clock用来发现数据的冲突,并配合其他的方式来解决冲突,现在常用的会用最后更新原则来做处理,保持一致性。

这里大致介绍了两种分布式系统的时间顺序处理,分布式系统因为其特殊性,需要各种机制来保证一致性和高效率执行。

笔者初学区块链,很多东西也是慢慢摸索,之所以写下这些基本概念一方面作为自己学习的整理,另一方面也希望更多交流学习的机会。如有兴趣可以直接给我留言或者加笔者微信。


 


 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多