4.1 技术的边界
人们在设计一款新产品时,都必须了解当下技术的边界:哪些技术已经可以完全使用了,哪些技术还要等待一段时间。对于需要等待的技术,人们不得不在之后再进行考虑。当然,科学和技术有一些不同,科学研究可以给出理论上的极限边界,而从工程设计的角度更多考虑的是如何在大概率情况会出现的大致边界内,整体上做到最好。这类似于一种优化问题,需要知道给定的约束条件,才能正确地求解。
就共识机制而言,前人的研究已经给出了两个重要的边界:
● Fischer-Lynch-Paterson定理:它证明了在一个多进程的异步系统中,只要有一个进程不可靠,那么就不存在一个协议,此协议能保证有限时间内使所有进程达成一致;
● CAP原理:分布式计算系统不可能同时确保一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance),设计中往往需要弱化对某个特性的保证。
其中一致性是指系统中服务节点对于处理结果达成的一致;可用性是指在有限时间内,任何非失败节点都能应答请求;分区容忍性是指网络可能发生分区,使得节点之间的通信得不到保障。
科学家认为在分布式场景下达成完全一致性是不可能的,但是工程上的许多问题的解决,都在于如何进行合理地取舍,可以牺牲一部分代价来换取分布式场景的一致性。目前,基于区块链设计的各种共识机制的不同主要来源于以下两个方面:
第一、算法假设的条件不同。如Paxos、Raft等算法假设节点不会故意发送错误的消息,这是一个比较强的条件。在比特币使用的PoW共识机制的前提条件是并不预先知道系统内有多少记账的节点,而联盟链里常使用的PBFT等协议则假设节点需要许可。
第二、付出一些代价以换取一定程度的一致性。例如根据CAP原理,弱化可用性,在系统故障时拒绝服务,Paxos、Raft等算法就是弱化了可用性来保证结果的一致性。再如比特币牺牲了一部分容错性(有可能出现分叉),但是保证了整个区块链系统在一定时限后的一致性。
算法当然不是万能的,它的边界决定了必须要引入一些其他的激励和约束机制来使得整个系统正常工作。在基于PoS(Proof of Stake,权益证明)的区块链项目中,创建新的区块并不需要消耗算力,而节点作恶也并没有什么惩罚;对于一个节点来说,利益最大化的选择是在多条链上同时挖矿,这会造成严重的分叉现象,一般需要针对这些情况引入额外的规则,如加入惩罚的协议等。