(埃里克·布鲁尔,CAP理论提出者。图片来源于网络)
本篇看点:互联网系统是怎样受到分布式一致性问题的困扰的?比特币又在这一点上有何进步呢?
前情回顾:
正文:
为了支撑千万量级规模的用户访问,互联网系统在架构上采取了分层和分片的思路,以实现所谓的“水平扩展”(scale-out),也就是“容量不够、数量来凑”。来更多用户?加更多机器就好。由于已经选择了中心化的路线,所以在考虑设计这些架构时,可以完全不担心拜占庭错误和异步性问题,这就已经大大降低了问题的复杂性。[公众号:刘教链]
互联网服务归根结底是一个大数据服务。而正是在数据存储这一层,在数据库这一点上,互联网工程师们遇到了分布式扩展的难题。机器加上去容易,数据同步和保持一致性却很难。为了提高系统的可用性,我们需要把数据多机备份,自动fail-over(故障切换),但这就会遇到因网络延迟而无法保持一致性的问题。互联网讲的一致性问题,就是区块链讲的共识问题。同一个概念,不同的表达。分布式系统因为需要多个节点协同工作,虽然通过中心化管理和控制已经大大简化了问题,但依然是大规模互联网系统所面临的最大挑战之一。[公众号:刘教链]
1998年秋,美国加州伯克利大学计算机教授埃里克·布鲁尔(Eric Brewer)首次提出了一个理论,该理论在当时还是一个未被证明的假设。1999年到2000年期间,布鲁尔教授公开发表并在学术会议上介绍了这个假设。直到2002年,这个假设才由美国MIT教授塞思·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)——对,就是那个FLP不可能定理三杰之一的林奇老太太——成功证明,自此,该假设正式成为了定理,这就是互联网领域人尽皆知的所谓“CAP定理”(CAP Theorem)[1]。那么这个CAP定理告诉了我们一个什么样的道理呢?[公众号:刘教链]
CAP定理告诉我们,一个分布式数据系统,不可能同时做到以下三点:第一点,一致性(consistency),即每次读取系统,无论读哪个节点,都会读到最新的数据;第二点,可用性(availability),即任何时候访问系统,都能得到成功的回应;第三点,分区容忍性(partition tolerance),即在节点间出现通信故障或延迟时,系统仍能继续工作。[2][公众号:刘教链]
《分布式计算8大谬误》[3]告诉我们,网络是不可靠的,网络总会有延迟的,带宽是有限的。所以所谓分区容忍,是一定要容忍的,那么其实权衡只发生在可用性和一致性两者之间。为了提高可用性,让用户随时访问都有结果,就势必要牺牲一致性,不能保证访问不同节点的用户得到的结果是一致的、及时的、正确的。而要确保强一致性,让用户无论访问哪个节点,总会得到一样的结果,那么就势必无法保证系统的高可用性,会出现系统无法响应用户、无法服务用户的情况。[公众号:刘教链]
互联网技术路线的务实选择是,确保高可用性,弱化一致性要求,从“强一致性”弱化成“最终一致性”(eventual consistency)。也就是,虽然不能保证此时此刻各节点数据是一致的,但是可以确定的是,一段时间之后终归会达成一致。在这一思想的指导下,互联网系统的规模有了突飞猛进的发展,彻底解放了生产力。到今天,互联网分布式集群可以轻松服务十几亿用户,存储海量的数据,提供极致的访问速度和用户体验。海量的用户、海量的流量和海量的数据,也给互联网公司带来了丰厚的商业回报。即使是从桌面互联网跨越到了移动互联网,用户端一侧又从浏览器变回了App,但是服务端的超大规模分布式集群技术及其架构思想,一直都没有变过。[公众号:刘教链]
当我们去看比特币的共识机制的时候,会发现中本聪把一致性问题又向前推进了一小步,从确定性的“最终一致性”进一步弱化成了非确定性的“概率一致性”(Probabilistic consistency)。这一步弱化的程度非常小,可以说是一个无穷小,因为随着时间的推移、区块链的延长,共识确定、不可逆转的概率以指数级增长的速度快速逼近于1。正如0.999…等于1那样,随着时间的流逝,中本聪的概率性共识快速逼近其极限,即确定性共识。而这一小步改进,使得比特币系统得以在互联网规模上跨越从中心化到去中心化的鸿沟,从而在实质上迈出了历史性的一大步。[公众号:刘教链]
【未完待续】(公众号:刘教链)