由于区块链就是一种分布式系统,所以这篇文章我就从这一概念开始讲起。为了让你更容易理解分布式系统,我们先来构建一个模型。在“浅说区块链共识机制”那篇文章中,我举了一个村庄举办相亲大会的例子,我们来回顾一下。大村子因为人口增长变成11个小村落分散在地图各地;村落之间的通信只能依靠信鸽;一只信鸽可能无法完全覆盖所有村落,需要有中继村落代为传输消息。相亲大会的举办权会为村子带来巨大收益,为了产生合理的举办者,人们约定了几条规则:大会举办权从A和B两个村子中产生,他们每一届都是候选村;投票时所有村落仅能投A或B;用投票的方式产生举办者,少数服从多数。所有村子会为了举办权都会使出浑身解数,比如延迟发送投票结果、篡改别人的投票结果、假装没有接收到通知等等。其实这是一个典型的分布式系统,可以看成是我们简化版的区块链网络环境,在“投票过程被大家所认可”这个语境下,“被大家所认可”表示某个村落投票的结果已经被记录,用于最后统计结果,而不是认可投给A或者投给B,这也是我在上述强调你要注意区分的一点。那我们这里所说的一致性到底体现在那里呢?主要体现在下面两种类型的问题上。非人为恶意的意外投票过程。非人为恶意篡改可归类为信鸽半路挂掉、信鸽迷路、信鸽送错目的地、信鸽送信途中下雨导致信件内容模糊、接收信件的人不在家、天气变化信鸽延迟送达等等。这些对应到分布式系统面临的问题就是:消息丢包、网络拥堵、消息延迟、消息内容校验失败、节点宕机等。人为恶意篡改投票过程。人为恶意篡改包括“精神分裂式投票”,中继篡改上一个村落的投票信息。对应到分布式系统面临的问题就是:消息被伪造、系统安全攻击等等。发生的人为恶意篡改的过程就可以称之为系统发生了拜占庭错误(ByzantineFault),如果系统可以容忍拜占庭错误而不至于崩溃,也就是在发生系统被恶意篡改的情况下仍然可以达成一致,我们将这样系统称作为做拜占庭容错系统。软件架构上也经历了基于ESB的模块化SOA模式,到无状态的微服务架构。从工程的角度来看,根据业务需求达到4个9、6个9就足够了,只是肯定比不了区块链近乎%的可用性。分区容忍性在企业内部极少出现,尤其是中心化的服务性应用,所以很少考虑。然而区块链的P2P网络环境十分复杂,所以必须要保证很高的分区容忍性。通过以上我们可以发现比特币、以太坊等公链是偏重高可用性、分区容忍性(AP),满足最终一致性(C)且TPS较低的分布式系统。所以如果有人号称他们的区块链能够达到媲美中心化系统上万的TPS,先别着急投资,你问问他们技术是不是知道CAP定理,再问问他们的去中心化程度如何。这点我们也可以从EOS等高性能的区块链身上佐证,EOS全球只有21个记账节点,而以太坊全球有上万个节点可以随时参与记账,所以越想去中心化,你的TPS就不可能高,这也就是为什么EOS的TPS高,而以太坊的TPS低。区块链中的共识算法目前具有工业成熟度的是PoW,另外两种比较成熟的是PoS和DPoS,其次还有一些变种和单一币种使用的共识算法,例如Ripple共识、PoC共识(概念性证明)、PoE共识(存在性证明)。在使用PoW共识算法的情况下,容错阈值是50%,而PBFT及其变种的容错阈值是33%左右,这里的百分比是指作弊节点占全网节点的比例。
转载请注明:
http://www.aideyishus.com/lkcf/6802.html