本篇是《别骗人了!区块链的TPS超过十万?》系列的第(3)篇。后面有投票,看看你或者大家认为,落地可用的区块链TPS(单链)最高到多少?
先重复一下整个系列,我想分享的两个重要观点:
1、现阶段(一两年内),区块链TPS不可能超过10万TPS;
2、现阶段(一两年内),大部分DApp对于区块链TPS要求不高,成百上千就够用了;
微信公众号“乐生活与爱IT”曾发表了系列的前两篇:
别骗人了!区块链的TPS超过十万? (1)
别骗人了!区块链的TPS超过十万? (2)
本篇是系列的第(3)篇,重点讨论第2个观点:区块链TPS成百上千就够用了。分两大块来阐述,一是为何够用;二是揭示几个认识上的误区,或者说是需要注意的事项。
需要强调的是,我并不是否定区块链从业者提高TPS的积极意义,而是觉得至少在一两年内,不要把超高TPS做为第一要务,做为公司产品或服务中的亮点去宣传。非中心化的东西,与TPS紧密相关的如延时、带宽等基础设施的条件在没有质的飞跃和普及等前提下,区块链TPS注定好不到哪去。而且,性能和效率,本来就不是区块链解决问题中最擅长的。区块链当下的重心,有很多其他更亟待解决的,包括安全性、易用性、较大数据的存储等……。从场景上看,可以围绕着多中心、弱信任的环境,采用区块链进行改造,极大地降低信任成本,提高效率。
坦白说,如果现阶段,看到区块链项目方说单链能做到2万TPS以上,我会持有较大的疑虑。需要进一步了解,是公链还是联盟链?是单链还是多链?是实际落地还是测试环境? 如果是测试环境用的是什么配置? 实际部署时,多个节点能做到一致的高标准的硬件配置吗?……
比特币、区块链的出现,最大的意义是在于点对点、去中介、去信任(无需信任,或称零信任),实现了自证清白。这在人类发明的各项技术或者技术组合中,具有非常重要的意义。
因为,人和人之间最难就是建立、保持并增进信任,达成共识。想一想国家之间的战争、冲突;公司与公司之间的你争我夺;人与人之间的提防、猜疑、误解、纷争、甚至冲动导致的恶性或者灭绝人性的事件,你会发现相互信任达成共识,或许是世界上最艰难的事情。
区块链基于大家都认可的数学原理,以及在此基础之上衍生出来的算法、系统,相对更低成本更高效率的方式建立信任,达成共识。区块链的第一要务,就是打造可信互联网;包含高性能(如超高TPS)在内的效率,并不是区块链的第一要务,也不是区块链擅长的地方。
先来看一下常见项目的TPS值:
TPS |
备注 |
|
比特币 |
7 |
|
以太坊 |
15~30 |
|
加拿大interbank |
1.11 |
平均一天32000笔交易,以交易时间8小时算。即使100倍,也只是1110 |
日本央行 |
3.26 |
这是平均数,最高速度需求会比平均数高很多,即使100倍,也只是326 |
欧洲央行 |
13.51 |
这是平均数,最高速度需求会比平均数高很多,即使100倍,也只是1351 |
伦敦证券交易所 |
40.84 |
|
上海证券交易所 |
238.21 |
|
纽约证券交易所 |
261.12 |
|
纳斯达Nasdaq |
449.97 |
|
深圳证券交易所 |
592.94 |
|
eBay、PayPal |
600~1000 |
|
建设银行信用卡系统 |
1300 |
2015年 |
VISA |
1700 |
理论峰值为 56000 TPS |
银联 |
2000 |
2014年的数据 |
我们以中国银联执行副总裁柴洪峰在2014年8月《中国银联金融大数据探索与实践》第18页(如下图)为例,可以看到跨行交易的TPS经历了11年,才达到近2000笔,这已经是在持卡人数量超过9亿人的情况下。当然,几年过去,这个TPS相信有不少提升。
也许有人会提到,支付宝、微信等可以达到几万乃至二三十万的TPS。是的,例如2018双十一期间,承担在线支付中枢的网联,TPS高达9.2万。然而这在中国数千万家企业中,凤毛麟角!据报道,有一位银行从业者表示,目前国内股份制银行的TPS峰值只有1万左右;只有在压力测试时,会模拟2万左右的TPS数据。这还是中心化组织下的性能。
非中心化组织的基础设施(区块链)里,尤其是公链环境里,受限于带宽、延时,我觉得,相比中心化组织低1、2个数量级是正常的。前面的两篇文章已经根据工程实践的测试和实际案例,从存储的角度,揭示了性能可能的瓶颈。
现在从网络的角度来分析,从局域网到广域网。我们先来看一个机房内(中心化组织,局域网)的网络延迟大概是多少。如下图,我们可以看到在万兆的TCP/IP网络上,写延迟在数百微秒。
一个点对点(例如从服务器A到服务器B)的完整传输路径的总延时大约在1~2毫秒左右,开启巨帧一般也不超过7毫秒。然而,区块链公链运行在互联网(广域网)上,节点跨越城市、跨越国家是必不可免的,延时从100毫秒到1秒(如多跳)都有可能。在5G没有大幅普及,并行写入没有大幅优化的当下阶段,TPS相对要低1、2个,甚至3个数量级。
国内有不少个人或项目组织方,都想在TPS取得突破,为更多的DApp创建一个合适的土壤。但我个人认为,在公链上,将会直面全球高手的竞争,能够在财力、人力上持续投入,在长跑中脱颖而出,将会是百里挑一,非常艰难。近期内,和产业结合,赋能实体经济,或许才是国内大多数区块链从业者的生存之道。
根据上面这个表格,可以看出许多应用的TPS要求不高,更别提区块链的TPS了,成百上千够用了。相信95%以上的区块链项目,都用不到1万以上的TPS。
下面讨论一下和TPS相关的几个误区:
一、号称百万级TPS“伪区块链”
我说的就是EOS,以及号称联盟链,实则云计算的项目。区块链与中心化云计算或者中心化组织的局域网、内网的方案,最大的区别就是是不是由一个中心化的组织控制着这个网络。如果是,它就难以自证清白,难以取得更多人的共识。
蔡维德教授曾在《 “EOS 不是区块链”给我们的启示,中国需要区块链产业沙盒》https://mp.weixin.qq.com/s/JWSNp-yXyY3OY7nJ_3qPag提到:
1、“ConsenSys委托区块链测试公司 Whiteblock 对 EOS 进行基准测试后得出结论,EOS 不是区块链,EOS 代币(及其 RAM 市场)本质上是一种用于计算的云服务,并且建立在完全集中的前提下。EOS 是分布式同构数据库管理系统
2、EOS有诸多问题,除了“中心化设计”之外,还有:
EOS实际性能相比自称的性能(一秒 1 百万笔交易)差异非常大,不到预期的 0.5%。Whiteblock 实验结果从来没有超过一秒 250 笔交易(不到预期的 0.001%),即便是在“零延迟”最佳设置下也是如此。表示EOS 原来的预测和实际系统差距非常大,竟然能达到 4000 倍!
EOS的超级节点要求很高的配置,有十几个超级节点竟然使用包括微软、谷歌、阿里云等公司的云服务器。租用的费用,每年至少40万元,甚至80万元以上。
如此高昂的门槛,逐渐形成垄断效应。严重背离了区块链非中心化的初衷。
在知乎《现有区块链的tps》文章里直指ByteMaster (BM, 是EOS创始人) 是个大忽悠。BM曾花了大量篇幅来解释为什么bitshares的bts 2.0发布时,在测试网络(p2p网络)只测出了20tps,离号称的10万tps相差甚远的原因:“并不是我们处理交易的能力不行,而是p2p网络太慢了,要达到10万tps,需要千兆低延迟网络连接,并且需要有30MB的网络吞吐,而我们测试环境都只有一些低端的vps节点”。英文原文如下:
The performance of the test network is mostly hindered byexisting P2P protocol and not by the CPU load of processing transactions. Toreach 100,000 TPS would require high-endservers with Gigabit,low-latency, connections between them. At aminimum it would require 30 MB per second just to receive the stream of data inreal time. This is clearly beyond the reach of our humble testers using low-endVPS nodes.
难道BM不知道互联网带宽远远低于30MB/s(240Mb/s)吗?
不仅是EOS。实际上国内有些做联盟链的,也在不知疲倦地优化、测试、公布、竞争,想以较高的TPS吸引眼球,问题是这到底有多大的意义?IT应用的理论永远需要符合实际,并经过实践来检验。
这里,我们不讨论私有链,因为这个比例非常小,对区块链行业影响应该比较小。对于联盟链,各个成员节点隶属于不同企业或单位,很难要求大家采购一致的硬件配置,尤其是昂贵的高配置。而且,节点服务器大概率不在一个局域网里,因此网络带宽和延时的瓶颈,极有可能使得昂贵的硬件设备难以发挥它原本的性能优势。最终的落地案例,可能导致实际TPS远低于期望值或者测试值,有可能会让方案商或项目方失去联盟链各单位的信任。与其如此,不如围绕着业务的真正需求,脚踏实地,将目光聚焦在区块链的哪些优势(而非性能)上,能够解决用户痛点,或者带来哪些好处?
不过,EOS的出现和实践,也有着一定的意义。也许,非中心化的区块链就是要经历各种过渡形态,各种尝试,才能到达理想的彼岸。
二、单链和多链
谈到TPS的时候,还需要注意是指的多链加起来的总TPS,还是单链的TPS。打个比方,一条以太坊公链大约20个TPS,一百万条以太坊公链大约2000万个TPS,难道我们可以吹嘘以太坊就能达到千万级TPS吗?
虽然区块链可以类似数据库进行分库分表。但即使这样,首先要看业务应用是不是能够进行分拆,并行进行?
举个例子,Dell Fluid Cache最高到500万IOPS,VMware vSAN最高到700万IOPS,都是指多个性能压测的应用同时运行,IOPS总和才能达到这么高,如果只看一个性能压测应用,在4K大小,100%写的情况下,单节点不超过36万IOPS(采用的是NVMe SSD)。
即使业务能分拆,区块链也完美地实现了分拆,还要看链与链之间是否需要通信、协调,如果没有,这就和前面提到的一百万条毫不相关的以太坊公链凑成2000万TPS类似,没有太大的意义。如果需要通信、协调,还可能面临调度、负载均衡或者其他因素带来的额外消耗,或性能瓶颈。举个例子,并非真实的只是打个比方,十几亿人的身份证库,按照身份证号的头几位,也即行政区域,分成三十多个子库,常规的查询或者更新都比较简单,但是你无法避免联合查询和更新的情况,例如山东男子与湖南女子结婚,过几年后还生了个小孩,对应的数据库操作,跨表查询和更新导致的事务复杂度,IO压力增加不少。类似的,跨链操作也会带来复杂度和性能的剧增。换句话说,子链或者侧链的数量规模是有限的,再往上就无法取得随着链数,性能近乎线性增长的好处了。
创新工场的王嘉平老师在我的系列第(1)篇文章《别骗人了!区块链的TPS超过十万? (1)》里留言如下:
单链系统确实有这个约束,互联网部署的,撑死几千TPS
https://zhuanlan.zhihu.com/p/46766111
但是单链系统并不是区块链系统的全部,当有几千个分片的多链系统协同工作的时候,突破十万TPS完全没有压力,虽然我不觉得这个绝对数字有什么太大的意义。当然这个本身的设计也不是一个trivil的事情。有兴趣,可以看看我们今年NSDI的论文,https://www.usenix.org/conference/nsdi19/presentation/wangjiaping
让我们期待他的NSDI论文的公布。另外,王老师在《区块链公链如何才能快起来(下)》对于分片做了非常详细和全面的阐述,我从中受益匪浅。特别值得一提的是,他谈到了分片可能带来的弊病之一:
分片之后可信大多数被稀释,攻击成本将极大下降
总而言之,用分片提高TPS是一个可行的方案,但要注意它的局限性。
三、内存和缓存
在中心化组织的世界里,基于内存或缓存的数据库,TPS超百万、超千万也是有可能的。相关的软件有:Gemfire 、memcache、hazelcast、ignite、geode等。相关的硬件值得关注的有Intel Optane SSD,以及新兴初创公司MemVerge(非易失性内存的新一代分布式技术产品,将内存和存储融合在一起)。
但是,在非中心化组织的世界(也即区块链)里,我觉得采用类似的技术还为时尚早,好比正在蹒跚学步的婴儿,你却要拔苗助长,让他去学习如何驾驶飞机。需要提防的是,有些项目方或者公司拿着这一类明明是中心化的方案,说是区块链的TPS取得了重大突破!
四、DAG和TPS
DAG,有向无环图,是不同于主流区块链的一种分布式账本技术。
相信成熟的DAG会带来TPS的提升,但这个提升的幅度仍然会受限于底层的物理硬件。当下DAG的明星项目IOTA,TPS在1000左右。
五、此TPS和彼TPS
实际上在不同的人眼里,TPS是不同的。例如在数据库层面,对数据库的一次原子操作就是一个事务;在电商平台的开发者眼里,搜索商品、放入购物车、支付可能就是不同的事务了,但这三个事务,各自产生的数据库的原子操作可能是多个。
在区块链里,我想,站在用户的角度,发起一笔交易,到最终完成并确认这笔交易在全网中生效,才是一个完整的事务(Transaction)。
以比特币为例,一个转账的交易产生,达成共识由某个节点打包多个交易成区块,经过6个10分钟最终确认这笔交易(多数时候无需这么久形成最长链,可能2个10分钟即可)生效,经历的时间不短。只不过,一个时间段里,会有很多交易同时产生,多个区块进行打包,由此得出平均的TPS值。
采用DPOS或者其他共识机制,会比POW更快,甚至有秒级共识,但是后续更耗时的签名、验证、共识达成一致、数据同步、确认等等,也就是取得多数节点的信任和确认,这些瓶颈使得TPS难以到达一个很高的值。未来5G的普及,通过极大地增加网络带宽,提高交易并发度,提高区块大小,或许能让平均的TPS值得到一个质的飞跃。
六、测试方法的Trick
下面摘引《中国信通院:为让区块链信息披露可信,我们做了一套黑盒标准》的一段话:“市场当中不乏鱼目混珠的虚伪区块链。而即使公开源代码,性能测试结果也是有所迷惑。经过一系列的测试,魏凯指出,现在有很多技术方的测试是令人迷惑的。比如,其自身披露具有较高TPS水平的,有可能因为测试中做了许多剪裁,比如,如果是一个可信的环境,他可以简化共识算法,现在最浪费算力的是几个方面:交易的验证、共识在全网达成一致、数据同步。
‘这几个环节大家都可以做一定程度的优化来提高速度,但是它总是会有牺牲的。比如说,他们提高交易吞吐量有可能是因为它认为网络是个可信的,所以它会简化共识的过程。比如说,降低共识验证的频率。所以只披露TPS是没有意义的。’魏凯告诉雷锋网,这些信息披露至少应该告知公众,这是在什么场景下的TPS,以及交易的复杂程度——只是一个转账,没有任何的前期账户余额检查,一致性的保障,还是很复杂的交易?这些差别很大。”
因此测试标准很重要。中国信通院、天德科技沙盒测试都做出了有益的尝试。
索引:
https://mp.weixin.qq.com/s/hcQQ0uxultYQ5PAjaUYwYQ
《蔡维德:区块链在金融领域应用的可行性》
https://mp.weixin.qq.com/s/3rPnLZdt0Q6_qpDH6lh20A
《王嘉平:区块链公链如何才能快起来》
https://mp.weixin.qq.com/s/OBnx6r4Z4oXFj1XIc1GLnw
《王嘉平:区块链公链如何才能快起来(下)》
http://www.blockchainbrother.com/article/11722
《区块链的TPS性能》
http://www.cfc365.com/technology/cloudcomputing/2018-05-16/14700.shtml
《工商银行金融云如何助推工行“智慧银行”建设》,2018-5-6,“发现精彩”,上万TPS
http://kuaibao.qq.com/s/20181024A1O22T00?refer=spider
《银行架构转型者:推动静悄悄的革命》,2018-10-24,广发 6.5万TPS
http://dy.163.com/v2/article/detail/CQMI41JN0519E7JS.html
《依托金融科技,金融壹账通打造中小银行金融生态圈》,2017-7-31,单链最高并发量达到5000TPS
http://www.cnjxol.com/company/ccb/content/2015-03/05/content_3307473.htm
《新华网:以客户为中心 以市场为导向 打造龙卡品牌价值》,2015年03月05日,最高吞吐率为1300 TPS
https://news.bitcoin.com/no-visa-doesnt-handle-24000-tps-and-neither-does-your-pet-blockchain/
《No, Visa Doesn’t Handle 24,000TPS and Neither Does Your Pet Blockchain》,2018-4-20,VISA 1700 TPS
http://www.sohu.com/a/274904237_781574
《一秒9.2万笔,网联“双十一”经历了什么?》
http://www.07888.net/post-1155.html
https://www.reddit.com/r/Iota/comments/ac8dpc/is_this_article_on_iotas_transactions_per_second/
---完---
限于本人的学识,以及仓促所成,并非所有叙述都经过严谨的研究和论证,也许有些观点或者数据不一定完全正确,欢迎指出,微信私信联系,或者通过QQ(9269216)介绍您本人,加我为好友。
在撰写本文时,通过阅读、交谈,受到了蔡维德、王嘉平、洪蜀宁、徐家骏、翁书涵、以及我研究生时的一些同学,还有一些微信群里朋友的讨论的启发,无论观点异同,都有帮助。在这里一并致谢。