【虾说区块链】入门区块链,先学分布式系统!一文说明分布式系统与区块链的关系...

欢迎收听「虾说区块链」。现在区块链这个概念在互联网上相当火热,这里简单做一个普及,不涉及项目推广投资,单纯地对区块链相关基础知识概念作一个说明讲解。本人区块链技术爱好者,结合相关区块链资料总结整理了「虾说区块链」,也是自己一个学习笔记,涉及相关内容如理解有误,也请及时指正。

1

分布式系统概念

**分布式系统(distributed system)是建立在网络之上的软件系统,彼此节点之间通过消息传递进行通信和协调的系统。**随着现在互联网业务的发展,单纯的集中式系统无法满足高并发,海量数据的处理,故出现了分布式系统来集中计算和存储资源,统一对外提供服务。

简单从物理上来看待分布式系统,一群互相独立的计算机,通过内部的通讯机制,形成一个大型的计算存储设备对外提供服务。分布式的意义在于计算机不局限于单一一个物理位置,通过网络进行互联,在逻辑上形成一个统一体,集中这些计算机的计算资源、存储资源。分布式中加入的计算机越多,理论上能够处理的并发就会越大。

2

分布式理念

一直以来,“量变引起质变”的概念被普遍认知,大量个体的涌现,随着成员之间的互相作用,必然会出现新的群体动态特性。当个体形成群集后,一些不可抗拒的特性就会显现。群集是社会发展的趋势。我们在自然界中经常能接触到很多分布式群集的事物。大雁的飞行模式、蚂蚁搬家等。互联网的出现,实现了信息共享、互联网中每个接入的个体形成群体,虽然互联网上现在大部分应用还是通过中心化的架构来提供服务,但是互联网的本质是分布式的概念。在互联网上形成分布式的服务是一种必然的趋势。

传统的应用系统,按部就班,通过顺序控制的理念来构建一个系统。系统有序执行一系列的操作,整个系统结构部署简单严谨,计算和存储资源集中在中心服务器,客户端终端负责数据的输入和输出,所有操作在中心服务器中执行,反馈至客户端。

分布式系统是一种群集的概念,它对外提供的可能是单一的服务,但内部是一个个自治的主体,自治主体之间高度链接,通过共识机制达到一致性。形成一个动态的主体。

分布式的特点:(只是指分布式的特点,而不是分布式系统的特性)

  • 没有强制的集中节点控制。

  • 个体自治。

  • 网络互联。

  • 共识机制。

分布式的优点:

  • 弹性:分布式中节点的加入和撤离灵活,不影响整个动态的主体,在资源紧张或者资源充足时,动态调节。

  • 冗余:节点众多,和传统的集中式相比,在出现故障时,也就类似节点的撤离,不影响整个动态主体。

  • 无限:这个概念有点缥缈,良好的分布式的系统,理论上节点的扩展性不会受到拘束,相反节点越多,对事物的处理会有更多的可能性,形成一种资源的无限扩展,系统的无限可能性。

  • 不可控:分布式众多的节点,形成共识,不是单单控制几个节点就能控制整个动态的主体。(一个两面性的特点)

分布式的不可避免因素:任何事物都有两面性。

  • 浪费:和传统的集中化对比,由于冗余、动态调节,资源的利用率上会有一定程度的浪费。

  • 复杂:个体到群集,每个个体还有自治性,形成一个动态的主体,必然会增加其复杂度。

  • 不可控和不可预知:对比优点中的不可控,这个是一种两面性的特点,在分布式中出现故障,由于整体运行良好,故障不易发现,整个系统是一个动态的主体,随着量级的增加,必然会出现一些不可预知的现象。

3

分布式系统特点

分布式系统中各个节点之间通过网络来协调和通信,在计算机网络中节点不受物理空间的影响。在逻辑上形成一个整体。

分布式系统特点:

  • 计算机设备在空间上随意分布,没有主-备-从的概念,节点间平等。

  • 资源共享,分布式系统中整个资源(计算资源、存储资源)共享。

  • 和传统的大型主机对比,分布式可用性价比更好的计算机设备。

  • 在分布式系统到一定的量级,在处理能力上优于传统中心主机。

  • 系统冗余性,保证系统的可靠性。

  • 计算能力的扩展,在分布式中可根据需求加入新节点提高整体性能。

分布式系统的缺点:

上述分布式系统的特点都应该从两方面来看待。

  • 节点众多和资源的共享,考虑信息的隐私性。

  • 设备节点众多,考虑通信的可靠机制。

  • 分布式处理能力的提高和系统冗余性的特点,也可能造成一定的浪费。

  • 计算能力的扩展,众多节点的加入,不排除恶意节点的入侵。

4

分布式系统的时间问题

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

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

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

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

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

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

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

初始发起节点为0.

节点内传递,X+1

节点间传递,T+1

节点接收除自己之外的传递(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为节点)

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

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

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

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

多次请求后,再次读到(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用来发现数据的冲突,并配合其他的方式来解决冲突,现在常用的会用最后更新原则来做处理,保持一致性。

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

音频内容作者:“投河自尽的鱼”

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

点击“阅读原文”进入直播室听专栏音频。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值