首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

区块链与分布式系统的CAP定理

说起区块链,第一个想起的词可能就是“去中心化”。所谓“中心化”,就好比现在银行用的系统,即便网点遍布全国各地,却都连着同一个节点,以此来保证记账的准确。与此相对应的,也可以去中心化。数据存储在不同节点里,以此来提供灵活而高效的服务,这就是分布式系统。

对于分布式系统来说,有一个著名的CAP定理。其中,C是指一致性(Consistency),A是指可用性(Availability),而P则是指分区容忍性(Partition tolerance)。

相对“中心化”的系统而言,分布式系统的优点很多,但问题也不少,例如:一致性(C)问题对“中心化”的系统而言是显而易见的。但对于分布式系统来说,由于有多个节点的存在,保持各个节点内数据的一致就成了一个问题。分区容忍性(P)也是分布式系统特有的问题:这么多的节点,不可能所有节点都可用才能保证整个分布式系统的服务可用,否则的话分布式系统也就失去了意义。可用性(A)则很好理解,也就是能正确及时提供服务,这是“中心化”和“分布式”系统共同要面对的问题。

然而,正如国际贸易中的蒙代尔不可能三角一样。不幸的是,CAP也是一个不可能三角,三者不能兼得,这个在数学上有严格的证明,但也可以用简单直观的方法进行解释。

譬如说,要保证各个节点上数据的一致,必须使得各个节点间能够通信从而使得数据同步。如果这种通信由于某种原因缓慢甚至中断,那么同时在服务的各个节点间的数据必然会产生差别,这也就是保证了可用性(A)和分区容忍性(P)而牺牲了一致性。事实上,由于网络原因,一致性问题是始终存在的,只不过时延大小而已。在一致性问题上,分布式系统只能实现给定时延下的“最终一致”,而非时时刻刻都能一致。

我们再来看看区块链这个分布式系统,就以比特币为例。能不能牺牲一致性呢?当然不能,没有一致性的数据,大家对某个人到底有多少钱没有共识,那还搞什么货币?能不能牺牲分区容忍性呢?当然也不能。那么多人在用比特币,有一个人没有上线大家就都不能用,那不是开玩笑吗?

因此,事实上区块链选择的是牺牲可用性。简单地说,也就是对于交易记录的完整性和响应时间的快速不可兼得。如果选择了快,那么交易记录就不可能完整;如果选择了交易记录完整,那确认交易的时间就会越变越长。选择路径的不同,也就导致了比特币的“分叉”。目前看来,选择“快”已经成了不可避免的趋势。道理很简单,一笔交易如果需要几个小时乃至几天才能确认,这对于货币来说,完全是不可容忍的。具有讽刺意味的是,号称“去中心化”的比特币最后还是要靠“中心化”的存储来解决大量交易的存储问题。

一笔交易若干字节的增加就会导致如此境况,那些号称要靠区块链存储文件乃至图像的应用,如果不是内部小规模用用的话,当笑话听听就可以了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180417G1BQ4700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券