分布式系统的时间顺序

news/2024/7/8 1:09:50

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

在这里插入图片描述
分布式系统的时间顺序

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

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

分布式系统中的时间问题,如果简单去想,那么通过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)。

1

在这种方式中,还要引入分布式系统中读写的概念,不单单是事件的传递,设定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用来发现数据的冲突,并配合其他的方式来解决冲突,现在常用的会用最后更新原则来做处理,保持一致性。

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


http://lihuaxi.xjx100.cn/news/237175.html

相关文章

helm部署仓库中没有的包_Kubernetes的Helm软件包管理器简介

helm部署仓库中没有的包Before we dive into the Helm package manager, Im going to explain some key concepts to deploying any application anywhere. Ill also give you a brief introduction to Kubernetes terminology.在深入研究Helm软件包管理器之前 &#xff0c;我将…

Bootstrap4 更新笔记

在bootstrap4里&#xff0c; 1. 旧版本bootstrap well变成了什么&#xff1f; well原本是‘’淡灰墙‘’样式。 Bootstrap 4 Beta card-block is now card-body, and bg-faded is now bg-light: <div class"card card-body bg-light"> Well </div>ref&am…

如何搭建以太坊私有链

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 如何搭建以太坊私有链1 今天讲一下如何搭建以太坊私有连&#xff0c;当然了在你阅读这篇文章的时候&#xff0c;最好是有一定基础&#xff0c;比如…

云服务器代金券

最近腾讯云与阿里云的促销活动都很好&#xff0c;有需要云服务器的可以领取代金券购买 https://www.art-china.club/ 至于配置调试的问题&#xff0c;可以问我&#xff0c;友情帮忙。转载于:https://blog.51cto.com/dnuser/2167896

快排递归非递归python_Python递归神经网络终极指南

快排递归非递归pythonRecurrent neural networks are deep learning models that are typically used to solve time series problems. They are used in self-driving cars, high-frequency trading algorithms, and other real-world applications.循环神经网络是深度学习模型…

仿美团外卖的全栈项目(vue+node+mongodb)带支付-大三求实习

关于 2019届大三学生&#xff0c;前段时间一直想一个人单独开发一个较为完整的项目&#xff0c;在众多应用中&#xff0c;考虑之后选择了美团外卖来模仿&#xff0c;这段时间就利用课余时间进行开发&#xff0c;前端用vuevuexvue-routeraxios&#xff0c;因为需要用到定位和支付…

以太坊智能合约开发第二篇:理解以太坊相关概念

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 很多人都说比特币是区块链1.0&#xff0c;以太坊是区块链2.0。在以太坊平台上&#xff0c;可以开发各种各样的去中心化应用&#xff0c;这些应用构成…

head和tail命令详解

基础命令学习目录首页 原文链接&#xff1a;https://www.cnblogs.com/amosli/p/3496027.html 当要查看上千行的大文件时&#xff0c;我们可不会用cat命令把整个文件内容给打印出来&#xff0c;相反&#xff0c;我们可能只需要看文件的一小部分地内容&#xff08;例如文件的前十…