APP

APP开发中

微信公众号
链网二维码 链网财经

曹锋博士:区块链TPS的前世今生,其发展进程将不断提升

链网 ·

2018-10-22 00:00:00

热度: 2002

强大的TPS,让大规模全球区块链应用成为可能。而我们所说的TPS通常需考虑到区块链网络构成与节点软、硬件配置的差异、测试用的事务集以及TPS是如何统计计算的。

1. 区块链的TPS缘起

TPS Transaction Per Second)并不是一个新的名词,在传统数据库中它代表了每秒钟可处理的事务(交易)数目。其计算方法,简单来说就是用单位时间内处理事务数量除以时间长度。TPS在传统数据库中已经有各种加速方法,并且根据事务的类型进行了细分,分为增加、删除、修改、查询。在区块链的世界里,所有的事务(交易)数据都被保存在区块链里,难以篡改,因而对区块链的事务处理主要是增加和查询两种。

某种角度而言,区块链是一种新型的分布式数据库系统。分布式系统的不可能三角,去中心化(节点数)、效率TPS和安全性,是区块链系统设计的核心问题。因而单纯谈区块链的TPS而不考虑去中心化和安全性是毫无意义的。某些项目号称解决了不可能三角,某种角度只是市场宣传而已,大家大可不必当真。所谓定理,不是那么轻易被打破的。 

在传统数据库中,事务数据被存储在各种数据表中,且表的行数通常没有限制。只要有更好的数据访问方法,例如各种索引Index,内存数据写入,就能较好的提升TPS。区块链系统中,事务(交易)被打包在区块里,一个块接着一个块被存储在链式结构中,且事务(交易)的有效性取决于区块链系统中大多数节点的共识。因而区块链的TPS受制于区块的大小(一个区块中所能打包的交易数目)和区块的出块时间。区块的出块时间由生成新区块的时间和区块取得共识所需要的时间两部分构成。

自比特币区块链2009年诞生以来,广被诟病的就是TPS不够高。尤其是POW共识算法似乎不够快。10分钟才出一个区块(事实上,10分钟出一个块并不是POW算法本身的限制,而是一个产生新比特币机制的巧妙设计)。然而,由于当时的用户并不多,大家对于大规模TPS的要求也并没有那么迫切。2013年以太坊提出基于区块链的智能合约,为区块链的大规模行业应用开启了新的想象空间。以太坊1.0依然基于改进的POW算法,15秒钟产生一个区块。在很长的一段时间里,TPS看起来也足够好了。甚至有观点认为,TPS对于区块链并不重要。

2. TPS不是区块链需要解决的核心问题?

这一切随着区块链技术打开的行业应用而改变。以太坊智能合约的提出和2015年区块链联盟链的兴起,为区块链的行业应用打开了大门。人们开始憧憬并尝试基于区块链技术的各种行业应用、金融、供应链、能源、医疗、教育、电子商务。然而,任何一项行业应用对TPS都是有要求的。例如,各种金融业务,买火车票,电子商务。阿里巴巴每年的双十一都会公布一个新的系统峰值交易处理数。我们刷手机在上买东西,谁也无法忍受点了半天网页打不开,点了半天手机没有反应。2016年联盟链的发展与行业应用的尝试,让很多区块链开发团队意识到了TPS的重要性

在区块链行业应用中,除了TPS吞吐率,系统响应时间RT(Response Time)也是一个重要指标,直接影响用户的体验。TPS吞吐率影响系统响应时间RT。当系统不是满负荷运载时,即单位出块时间内的所有事务(交易)都可以被打包在一个区块内时,系统响应时间等于区块的出块时间。但系统超负荷运载时,即单位出块时间内的所有事务(交易)无法被打包在同一个区块内时,系统响应时间就会随着所需要生成的新区块数量而成倍增长。

系统确认时间是另外一个相关指标,简单而言,就是等待交易确认的时间。以网上支付为例,系统响应时间往往是发起扣款交易所需要的时间。系统确认时间是扣款完成、交易确认所需要的时间。在POW系统中,交易需要等待6个区块才得到最终确认。有的交易系统为了提升用户体验,在小额交易时,允许2个区块的交易确认,也是在用户体验和交易最终性间取得平衡。

尽管TPS在联盟链应用中已经引起了行业从业人员的关注,然而影响面相对有限,并没有引发大范围的关注。2017年,ICO兴起,一个热门的项目,往往会吸引全球成千上万用户的关注。以2017Status众筹,引发了以太坊3天的拥堵。人们无法忍受交易迟迟无法确认的体验。区块链TPS瓶颈再度成为行业关注的热点。

 2018年,若干个公有链项目也应声出发,其重要目的之一就是提升TPS,让大规模区块链应用成为可能。转眼2018已过大半EOS横空出世,从开始号称的百万级TPS到实际落地的3000+TPS。TPS无用论再度抬头,论据之一是EOS的TPS基本处于闲置,平时用到的也就是几十,在当前大家找不到应用场景的情况下,TPS是一个伪需求。事实真是如此吗?其实恰恰相反,区块链应用创新层出不穷,如果没有强大的TPS做支持,任何大规模的全球应用都只能是梦想。TPS的瓶颈限制了区块链应用创新的步伐。正如我们永远需要一台更高性能的计算机一样,人类社会信息化和资产数字化的脚步永远无法停止下来。

3. 我们说的是同一个TPS吗?

TPS无用论相对应的是百万TPS的声明层出不穷。各个项目的粉丝也往往会拿着这个项目的TPS与那个项目的TPS进行比较。可是我们在说的TPS是同一个TPS吗?

首先,我们讲TPS不可以忽略区块链网络构成与节点软、硬件配置的差异。TPS的比较只能建立在相同网络和节点硬件环境因素之下。构成区块链的网络因素包括,系统中的节点数量是几十,几百,几千还是几万。这些网络节点中有多少参与系统共识,系统中不参与共识的节点无法对系统去中心化程度做出贡献。这些网络节点的地理分布如何?是在同一个地方的局域网内,还是分布在一个城市,在一个省,在一个国家,几个国家,是否跨洲,是否全球节点分布。区块链节点的软硬件配置如何,包括网络带宽,内存容量,磁盘是否是SSD,磁盘IO速度,磁盘容量,CPU频率,CPU内核数量,操作系统等。简单而言,在一个有限的局域网内所统计出来的高TPS,往往在全球的广域网下难以重现,因为网络延迟往往使得TPS会大打折扣甚至无法形成共识,稳定出块。 

其次,测试用的事务集(事务Tx的集合)是怎样的。是人工生成的数据集还是真实的交易集?事务集合是怎样的?包括Tx的数量,Tx的复杂程度,持续的时间(是几分钟,几小时,几天,几个月还是几年)。Tx的复杂程度,包括简单的转账,智能合约的调到,是否跨链调用,是否跨分片调用等。

最后,TPS是如何统计计算的。在相同的网络,软硬件与测试集环境下,TPS的统计方法不同也会导致不同的TPS测试结果。TPS的计算分类简单来说可以划分为如下几类:

1) 递增时间窗口N:随着测试进行,不断增加窗口的长度N。用当前系统处理的所有事务数量除以当前的窗口长度。TPS = Sum(Tx) / N

2) 分段窗口w:将时间轴按窗口长度为w进行分段。分段统计各个w窗口内所处理的事务数量,再除以w时间窗口。 TPS = Sum (Tx in window w) / w

3) 滑动窗口sw:将时间轴按窗口长度为w进行滑动。分段统计各个滑动的w窗口内所处理的事务数量,再除以w时间窗口。 TPS = Sum (Tx in sliding window w) / w

对于同一个时间窗口的设定,我们可以连续的获得各种不同的TPS,并可以在此基础上进一步统计出平均TPS与峰值TPS

曹锋博士:区块链TPS的前世今生,其发展进程将不断提升 

以上图为例,假设一个点代表100个事务Tx。

1) 递增时间窗口(以长度为8进行递增)的各个TPS观察值分别是

500/8=62.5900/16=56.251600/24=66.672400/32=75

在此基础上,可进一步得出,平均TPS(62.5+56.25+66.67+75)/4 = 65.105,峰值TPS75

2) 长度为8的分段窗口的各个TPS观察值分别是

500/8=62.5400/8=50700/8=87.5800/8=100

在此基础上,可进一步得出,平均TPS(62.5+50+87.5+100)/4 = 75,峰值TPS100

3) 长度为8的滑动窗口的各个TPS观察值分别是

(0-7): 500/8=62.5(1-8):500/8=62.5(2-9):500/8=62.5(3-10):500/8=62.5
(4-11):600/8=75(5-12):600/8=75(6-13):600/8=75(7-14):500/8=62.5
(8-15):400/8=50(9-16):300/8=37.5(10-17):300/8=37.5(11-18): 300/8=37.5
(12-19): 300/8=37.5(13-20): 400/8=50(14-21): 500/8=62.5(15-22): 600/8=75
(16-23): 700/8=87.5(17-24): 800/8=100(18-25): 800/8=100(19-26): 800/8=100
(20-27): 800/8=100(21-28): 800/8=100(22-29): 800/8=100(23-30): 800/8=100
(24-31): 800/8=100

在此基础上,可进一步得出,平均TPS(62.5+62.5+62.5+62.5+75+75+75+62.5+50+37.5+37.5+37.5+37.5+50+62.5+75+87.5+100+100+100+100+100+100+100+100)/25 = 72.5,峰值TPS100。

显然,不同类型的时间窗口统计出来的平均TPS与峰值TPS都不相同。

 平均TPS峰值TPS
递增窗口65.10575
分段窗口75100
滑动窗口72.5100

容易进一步推断,不同长度的时间窗口统计出来的TPS也会略有不同。

4. 提高TPS的方法

目前提升TPS成为各个公有链系统的当务之急,大家都在积极地研发各种算法来提升系统的TPS。常见的方法分为如下几类:

  •  增大区块。这是最简单而行之有效的方法。通过增大区块,更多的Tx被打包在同一区块内,在出块时间固定的前提下,更多的Tx被打包就意味着更高的TPS。例如,BCH对BTC的区块扩容。增大区块在单次共识过程中会增加节点间的通讯代价,因而也无法无限扩容。

  • 提升区块的出块频率。当单区块内被打包的Tx数量恒定后,提升区块的出块频率显然可以更好的提升TPS。例如从10分钟出一个块,提升到15秒出一个块。然而过多的提升出块频率,往往会牺牲系统的稳定性,尤其是在广域网时延较大的情况下。

  • 采用更高性能的计算机(节点),包括专用的矿机。通过硬件加速,将常用的耗时的软件计算硬件化,从而达到提升处理速度的目的,例如各种比特币矿机。

  • 侧链、链下与状态通道。侧链是一个相对于主链的概念。大家所针对的主链往往是比特币、以太坊等需要进一步提升性能,而短期内又难以改变的区块链系统。侧链与链下的基本思想是,另外建立一条相对高速或安全性相对较低的侧链,把小额的高频的交易放在侧链进行快速确认,待真正需要结算的时候再回到主链上进行最终确认。状态通道是闪电网络的发明,它为账户两两之间建立的独立的通道,从而达到快速交易的目的。并利用通道的传递性,构成了各个通道的网络,从而实现任意两个账户间的快速互转。

  •  分片。分片是一种典型的 “分而治之”计算处理方法。基本思想是将区块链网络中的节点动态分为若干个不同的分片。将系统单位时间内所接收到所有Tx分到不同的分片中。分片技术具体可细分为对token和对智能合约的分片。绝大多数的分片技术只能做到token级别。对于智能合约的分片,由于涉及到较为复杂的状态分片问题,目前没有特别好的解决方法,有部分项目提出了一些受限环境下的状态分片解决方案。

  • 原生多链。原生多链是一种典型的并行化方法。区别于传统的比特币和以太坊单链结构,多链系统的结构通常包含1个主链和若干条子链,多链可同时出块,从而使得区块计算并行化,达到极大提升TPS的目的。原生多链的思想虽然容易理解,在实际开发过程中需要核心解决主链与子链的可互操作性(Interoperability),否则主链极容易成为多链系统的瓶颈,从而影响多链系统的水平扩容能力。

  •  新的共识算法。从POWPOS方向转变。典型的POS算法包括DPOSBFT类的算法。例如EOS等都基于DPOS算法。新生代的区块链3.0系统,往往采用BFT类算法,例如AlgorandDefinityCOSMOS/TendermintPCHAIN等。传统的PBFT算法存在着通讯复杂度过高的问题,通常是N2因而往往只适用于联盟链场景。目前各个新BFT算法往往通过引入动态性或随机性来达到减少通讯代价的目的。PBFT的另一个问题在于内部的4次共识,虽然不用像传统的POW算法需要等到6个区块来达到最终性。PBFT虽然具备单块内即时共识的特质,但内部仍然需要4次共识。COSMOS/Tendermint创新的把PBFT算法的内部4次共识缩减到了2次共识。而PCHAINPDBFT则进一步将内部的4次共识缩减到了1次共识,从而极大地减少了节点间的通讯代价。

展望

区块链TPS技术的发展将伴随区块链重构整个人类社会各行各业的进程而不断提升。随着更快、更稳定的区块链3.0系统的出现,我们将迎来区块链价值互联网与地球村的新蓝图。


文章声明:本文为火星财经专栏作者作品,不代表火星财经观点,版权归作者所有,如需转载,请提前联系作者或注明出处。

免责声明:作为区块链信息平台,本站所提供的资讯信息不代表任何投资暗示,本站所发布文章仅代表个人观点,与链网官方立场无关。鉴于中国尚未出台数字资产相关政策及法规,请中国大陆用户谨慎进行数字货币投资。
关键字: