天天看点

区块链的速度困境:“贵”在信任,“慢”得其所

区块链的速度困境:“贵”在信任,“慢”得其所

Posted on 2019-07-24 15:52 FISCO-BCOS 阅读(...) 评论(...) 编辑 收藏

区块链的速度困境:“贵”在信任,“慢”得其所

(本文原创作者:张开翔-FISCO BCOS首席架构师 )

区块链领域最受关注的一个方面是“性能”,或者说“TPS”,比起来有种“不服就跑个分”的感觉。跑分项包括TPS(每秒处理交易数)、并发能力(同时承担交易量)、交易响应时间等。然而,相比每秒能发送200万封电子邮件、支持数百万用户同时登录一个社交平台的互联网服务来说,区块链的速度简直是太!慢!了! 甚至有人调侃说“区块链,不就是最慢的分布式数据库吗”(这句话可以展开多方面解析,本篇先讨论慢的问题)

区块链技术前景无限美好,可如果没有高性能表现作为支撑,无法运行快速的、执行复杂的智能合约逻辑,快速的完成交易事务,那些令人振奋的前景就只能是摘不到的镜中花,捞不着的水中月。

#举个例子

数钱,比如数一个亿(是不是好刺激~)

1、如果一个人数,慢,但好在专注,全力以赴,在可见的时间内可以数完。这叫单线程密集计算。

2、如果N个人一起数,每人平分,分头同时数,最后汇总总数,所用时间基本上是第一种情况的1/N,参与的人越多,所需时间就越少,TPS就越高。这叫并行计算和MapReduce。

3、如果N个人一起数,但由于这N个人互相不信任,得彼此盯着,首先抽签选一个人,这个人捡出一叠钱(比如一万块一叠)数一遍,打上封条,签名盖章,然后给另外几个人一起同时重新数一遍,数好的人都签名盖章,这叠钱才算点好了。然后再抽签换个人检出下一叠来数,如此循环。因为一个人数钱时别人只是盯着,而且一个人数完且打上封条和签名的一叠钱,其他人要重复数一遍再签名确认,那么可想而知,这种方式肯定是最慢的。这就叫区块链。

但换个角度,方式1,一个人数有可能会数错,这个人有可能生病或休假,导致没有人干活,更坏的结果是,这个人可能调换假币或者私藏一部分钱,报一个错的总数。

方式2,N个人中会有一定比例数错,也可能其中一个人休假或者怠工,导致最终结果出不来,更可能因为人多手杂,出现部分人偷钱、换假钱、报假数……

方式3,很慢,但是很安全,因为所有人都会盯着全过程进行验算,所以肯定不会数错。如果其中有人掉线,可以换人捡出新的一叠钱继续数,工作不会中断。所有数过的钱上面都有封条和签名,不会被做手脚,万一出错了也可以找到责任人进行追责。这种情况下,资金安全是完全得到保障的,除非所有的参与者都串通一气了。该模式下,参与的人越多,资金安全性就越高。

所以,区块链方案致力追求的是,在缺乏互相信任的分布式网络环境下,实现交易的安全性、公允性,达成数据的高度一致性,防篡改、防作恶、可追溯,付出的代价之一就是性能。

最著名的比特币网络,平均每秒只能处理5~7笔交易,10分钟出1个块,达到交易的最终确定性需要6个块也就是1个小时,且出块过程相当损耗算力(POW挖矿)。

号称“全球计算机”的以太坊,每秒能处理的交易数也仅是2位数的量级,十几秒出1个块。以太坊目前也是采用损耗算力的共识机制POW挖矿,会逐步迁移到POS共识机制。

这两个网络在粉丝们爆炸性地进行交易时,可能会陷入拥堵状态,大量的交易发出后,一两天甚至更长的时间才会被打包确认。

但在资金安全就是命的场景下,有些事情是“必须”的,所以,即使慢,还是会考虑选择区块链。

#区块链为什么慢

分布式系统里有一个著名的理论叫CAP理论:2000年,Eric Brewer教授提出一个猜想:一致性、可用性和分区容错性三者,无法在分布式系统中被同时满足,并且最多只能满足其中两个。

CAP的大致解释

Consistency(一致性) :数据一致更新,所有数据变动都是同步的

Availability(可用性):好的响应性能

Partition tolerance(分区容错性): 可靠性

 这个理论虽然有一些争议,但从工程实践中看,和光速理论一样,可以无限逼近极致但是难以突破。

区块链系统能把一致性和可靠性做到极致,但是“好的响应性能”方面一直有点被人诟病。

我们面向的“联盟链”领域,因为在准入标准,系统架构、参与节点数、共识机制等方面都和公链不同,其性能表现远高于公有链,但是目前几个主流的区块链平台,在常规PC级服务器硬件上实测,TPS一般是在千级的样子,交易延迟一般在1秒到10秒这个级别。(听说TPS十几万级和百万级千万级区块链已经做出来了?好吧,期待)

笔者曾在大型互联网公司工作多年,在海量服务领域,面对C10K问题(concurrent 10000 connection,万级并发)已经有轻车熟路的解决方案,对一般的电商业务或内容浏览服务,普通pc级服务器单机达到几万TPS,且平均延时在500毫秒以内,飞一般的体验已经是常态,毕竟互联网产品卡一下说不定就会导致用户流失。对于快速增长的互联网项目,通过平行扩容、弹性扩容、立体扩容的方式,几乎能无底线、无上限地面对山呼海啸的海量流量。

相比而言,区块链的性能比互联网服务慢,而且难以扩容,根因还是在其“用计算换信任”的设计思路上。

具体哪里慢呢?

从“古典”区块链的系统内部来看