【汇编】区块链的TPS性能...

一,联盟链

二,公有链

2018-04-24 知乎 | 链圈码农 老污 | 现有区块链的TPS

最近在做一个区块链系统的底层设计,有一个绕不开的问题是,就是我的系统能提供多少个tps。为此,我收集了一些现有区块链(当然也包括DAG等分布式账本技术)的tps数据。

1.ripple:

号称转账神器的ripple,转账快速,并且手续费也很低,所以我本人经常用它来做不同交易所之间的转账。从ripple官网的数据看,大概有1500tps:

【汇编】区块链的TPS性能..._第1张图片
图1:xrp的tps数据,来自ripple官网

2.eth:

以最高的日期算,当日的tps是1349890/24/60/60.0=15.616666666666667。

【汇编】区块链的TPS性能..._第2张图片
图2:eth的tps数据,来自etherscan.io

3.steemit:

来自2018年4月的数据,在最高点是180万左右,算下来tps是20.8。

【汇编】区块链的TPS性能..._第3张图片
图3:steemit的tps,来自Steemit Statistics - 2018.04.21​steemit.com

4. bitshares:

bitshares这个就比较有趣了,因为它在15年时候就号称自己10万tps了,而btc/eth等还在10附近玩耍,查着四个数量级呢,那么它这10万tps是如何得来的呢?先看一篇文章:

参考:https://bitshares.org/blog/2015/06/08/measuring-performance/

【汇编】区块链的TPS性能..._第4张图片
图4-1:bts做tps压测的方式

大意是,

  • 我们创建了20万个账户,各执行5此次操作,加起来就是100万次操作
  • 没有任何签名的情况下,我们每秒钟能处理18万次操作,用了更好的cpu之后,能再提高25%,因为我们认为10万tps是妥妥的。
  • 还有啊,现实环境中的nasdaq也才6万tps啊,他们的目标也才10万tps。而我们已经轻松的达到了10万tps。
  • 另外,我们在有签名的情况下,也能每秒轻松的达到2000 tps(您是不是有疑惑,为何瞬间从10万降到2000了?)。
  • 而在当前发布的版本中,我们人为的限制到了1000tps

我们就会有疑惑了,2000tps是如何测试得到的呢?是否考虑到了p2p网络的延迟呢?看样子,似乎并没有考虑这一点,可能仅仅是内网几台witness(或者说记账节点吧)之间的延迟呢?

我又找到另一篇文章:

参考:https://bitshares.org/blog/2015/09/11/BitShares-2.0-Launching-on-October-13th/

【汇编】区块链的TPS性能..._第5张图片
图4-2:bts的testnet如何获得了20tps的“超高性能”

这篇文章有一部分介绍了bts 2.0发布时,在测试网络(p2p网络) 测出了20 tps的"超高性能",并花了大量篇幅来解释为什么离号称的10万tps相差甚远。

并不是我们处理交易的能力不行,而是p2p网络太慢了,要达到10万tps,需要千兆低延迟网络连接,并且需要有30MB的网络吞吐,而我们测试环境都只有一些低端的vps节点。

看到才发现,bm这个人真是大忽悠啊。bts一方面采用dpos(从而是中心化的),只有少数节点拥有记账权,在一个节点记账的时候,需要其他节点对它生产的块进行签名,这必然是要走p2p网络的,于是bts开发者大胆假设网络是可以优化的,毕竟想要成为记账节点,怎么也得下点血本来优化一下网络吧。而btc和eth则要分散的多,并且有众多的小节点,区块扩散要慢得多。

号称百万tps的eos,最终又能到多少tps呢?

看到数据的时候,还是要多看看多想想,数据是如何得来的,测试的方式是否科学。

5.使用DAG技术的iota

参考:http://www.tangleblog.com/2017/04/22/april-report-3/

这里引用的一条tweet,说iota在250个节点的网络中能到100tps这个数量级,并且可以发起1000tps的测试(iota应该是节点越多、交易越多反而tps越大):

【汇编】区块链的TPS性能..._第6张图片
图5:IOTA性能

6. btc/bts/steemit/eth统一比较:

【汇编】区块链的TPS性能..._第7张图片
图6-1
【汇编】区块链的TPS性能..._第8张图片
图6-2

整个市场在2018年1月达到最高,从上面的eth图也可以看出,在1月份之后,每日交易量下跌非常明显,说明市场非常低迷。

包括bm本人也承认

  • steemit的每日交易量不到2million,也就是tps不到25,而实际上,峰值的tps也不到20,而是只有惊人的18.3个。
  • 而号称tps很高的bts,也只有13个tps而已,连测试网络的20个都没有达到。

7.总结

目前区块链系统(不考虑xrp这种中心化的分布式账本和采用DAG的iota),每天的交易量最高的都不超过180万,tps最高也就20附近。我看到微信钱包在最高峰时候能处理20万tps,支付宝在双11的时候时为12万tps,而bts或者说eos之类的分布式p2p系统就号称10万、百万tps,确实有点故意吸引人眼球的意思。

我们以steemit为例,他每天处理了180万笔交易,这个量级对于一个互联网应用而言是很少的,但是却也依然运行良好,原因可能就在于,tps其实指代的都是写入操作,对于steemit而已,很多请求都是读取操作,如果仅仅是读取区块链,那么任何一个全节点都可以读取,这个做sharding就非常方便了。

我们还要想一个问题,公链是否真的那么有价值?

现在很多区块链应用都是在eth或者eos之类的公链上开发的,导致eth和eos价格都炒得非常高。但是公链本身性能都不太好的情况下,区块链应用又如何能够跑起来呢?加上一点点攻击就能把整个网络堵死,可用性就太差了。

作者补充 :

从 btc 分叉出 bch ,到 eth 现在搞基于 casper 的 pos ,目标都是提高 tps 啊,君不见粉尘攻击和 bch 矿霸蓄意创建空块时的 btc 网络、 CryptoKitties 盛行时的 eth 网络堵城什么样子。

btc 作为虚拟黄金, eth 作为承载 dapp 的第二代公链,都有非常巨大的交易需求,当 tps 无法支撑时,便会出现区块链拥堵。

另外,今天早上看报道号称百万 tps 的 eos 被 eosseoul 测出来在局域网内不到500。[1][2]

(Max sustainable(not peak) TPS is under 500 with multiple nodeos daemons on single or multiple machines)。

个人认为p2p网络天然的延迟造成了tps上不去,而公链天然要被共用, 要么用侧链要么各个dapp自己用自己的链,我觉得这种隔离反而对开发者更有利。

  • Our TPS experiments by Sungmin Ma, Lead System Engineer at EOSeoul.
    • Max sustainable(not peak) TPS is under 500 with multiple nodeos daemons on single
      or multiple machines.
    • Detailed report (PDF)
      • https://github.com/eoseoul/docs/blob/master/reports/eoseoul_tps_benchmark_20180423.pdf
    • scripts : http://testnet01.eoseoul.io/script/bmt_client.tar.gz
    • usage
      • ./bmt.sh prepare
      • ./bmt.sh run_job

[1] https://steemit.com/en/@eoseoul/bmt-eosio-tps-results-by-eoseoul BMT | EOSIO TPS results by EOSeoul
[2] https://github.com/eoseoul/docs/blob/master/reports/eoseoul_tps_benchmark_20180423.pdf

你可能感兴趣的:(【汇编】区块链的TPS性能...)