分布式算法基础

分布式算法基础

前言

在研究区块链共识算法的时候,发现很多基础就是分布式算法。其中最经典的两个分布式算法——Paxos和Raft。Paxos号称比较难理解,Raft相对Paxos更加中心化(strong-leadership),同时更容易理解。在网上有实现Paxos和Raft的算法代码,拿来跑完一遍之后对一些原理还是半懂不懂的,于是对着论文一点点把架构看懂。

架构

分布式算法的架构,可以理解为分布式网络中的节点如何进行交互的。不同的分布式算法会给节点进行一个分类,或者对节点进行cosplay,每个节点可以扮演某一种角色,行使某一种功能。然后基于角色,进行算法的交互。分布式系统就是主机(节点)分布在不同的地方,但是相互配合起来像一个整体的系统,来向外提供某种特定的服务。而理解节点如何进行交互,最直观的就是一个交互过程图,这个交互过程可以是线性的分阶段的,也可以是图状,相互之间交互进行状态转换。

Paxos

Paxos告诉我们一个好的分布式算法需要保证两个条件。第一个条件是safety,即安全性。safety与security是不同的,前者包含失误,宕机等故障情况,而后者security更多包含恶意攻击,漏洞利用等情况。Paxos假设这样一个场景:在一系列共识过程中(在区块链背景下可以是验证区块、验证交易或者决定记账人),某一个值通过某种方法被提出来供确认节点进行确认,确认节点只会确认已经被提出的值(未提出的值不能被确认),这保证了分布式系统的正确性(correctness);确认节点只会确认一个值(而不是有两个小团体各确认一个值,如果各确认一个值在区块链网络中可能就是分叉),即保持分布式系统的一致性(consistency)。在确认之后,这个值要分发(广播)到全网所有节点,让所有节点进行同步更新值,而所有节点只有在这个值是真正被确认后才更新(就是所防止假确认又回滚的情况,在针对比特币网络有一次确认攻击),这一点也可以理解为是保持分布式系统的一致性,在区块链网络中也是防止双花的一个属性。
Paxos定义了一个分布式系统需要考虑的问题。基于Paxos所衍生的共识算法更适用于私有链或者联盟链这类以信任为前提的网络。公有链也可以使用这类算法,但是在这之前需要有一个增加信任度的方法(比如POS,用股权来增加信任),然后再采用类Paxos的共识算法来达成共识。

Raft

Raft相对来说更加中心化。Raft将“选出一个领导者”这个过程作为一个必选项,选出领导者后其他跟随者只要听领导的话就行了。具体表现就是节点达到某一个状态所要进行的操作命令集合(在这里成为log entries)需要通过leader节点进行分发。作为部分中心化的算法,需要避免中心化算法的问题(即中心出故障的情况),raft的解决方法就是通过领导节点与其他节点建立心跳连接(可以理解为隔一段时间ping一次,需要得到回应),如果隔一段时间不再接收到心跳就需要重新选举领导节点来掌控大局。而这个重新选举的过程被称为视图切换(view change)。
Raft是paxos的改良版本,它的目标和paxos一样,也是保持分布式系统的一致性,正确性,安全性。最大的特点是可用性,Raft对具体实施的过程进行了简化,使得Raft更容易被实现。
除此之外,Raft要保证safety还有一些场景需要考虑。比如考虑重新选举的情况:如果log文件分发不及时,某个节点的log不完整。而这个节点又正好在重新选举的时候上位,这个节点就会用自己不完整的log来重写其他节点的log,这就造成了分布式系统的不一致。raft通过一系列限制来解决这个问题,这里暂时不展开。

分布式算法与区块链共识算法的关系

初识区块链共识算法是拜占庭问题,拜占庭问题的假设与以上分布式算法的假设不同。以上分布式算法考虑分布式网络中节点会出现故障,时延,网络不畅的情况。而拜占庭考虑的是恶意节点问题,也就是节点故意破坏整个分布式网络的共识。换句话说,前者是客观因素,如自然灾害;后者是主观因素,如恶意攻击,中间人攻击,为了牟利而进行DDOS。
raft、paxos这类算法对信任的要求度更高,而拜占庭算法对信任的要求略微降低,这也就是为什么在拜占庭问题下经常出现容错率这个参数的原因。1-容错率其实就是信任度。容错率为33%的系统,它的信任率就是67%,需要有67个值得信任的节点,容许33个恶意,伪造身份的节点。
分布式算法最终所要达到的一致性和共识算法想要达到的共识其实是一个概念。区块链网络本质是一个分布式网络,所以说共识算法应该算是分布式算法中一个特殊的类,所以掌握必要的分布式算法对掌握区块链共识算法是很有帮助的。

参考:
Paxos Made Simple
Raft算法论文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值