【区块链探索笔记十六】:TPS

谈到公链,大家总喜欢拿出TPS说事情,就跟手机专门有人比跑分一样。目前市面上的公链号称百万TPS的不在少数,那么作为投资公链的重要指标之一,TPS的概念是什么,有什么实际意义?下面就来谈谈TPS。

什么是TPS

TPS,通俗的定义,就是“系统的吞吐量”,专业一点的解释,就是“系统每秒钟能够处理的业务数量”。

举个大家耳熟能详的例子。在比特币中,TPS的定义具体解释为:“比特币网络每秒钟能够处理的交易数!”。在这个定义中,真正的原生概念只有“交易数”,而TPS,则是我们人为用一段时间的交易总数除以这段时间的总秒数,是一个“被平均”后的指标,不是真的每秒都在处理交易!

那么既然是“被平均”后的指标,“被平均”的时间的段是多少呢?一般来说,就是一个区块的打包间隔,现在为10分钟左右。注意,第二个原生概念出来了,就是出块儿时间“10分钟”!

如果我们取10分钟为一个标准时间段,然后每个打包块儿里包含4000条交易数据,那么TPS是多少呢?4000 / (10*60) = 6.67,没错这个大概就是比特币网络的TPS,平均每秒6条交易左右,而且每10分钟才处理一次!

到这里,大家可以看到,比特币业务模型中,TPS其实依赖的是三个底层概念:出块时间,每个块包含交易数,以及时间段。

一个极端的例子,如果截取1分钟看,我们会发现,十分之九的时间下,比特币网络的TPS是0,因为这段时间并没有出块儿,可如果我们仅仅截取第十个包含了出块时间点的1分钟看,我们的TPS又高达66.67(4000 / 60)尽管TPS的定义是“每秒”处理的交易数,然而在真实的世界中,无论是比特币还是绝大部分其它区块链网络,都不可能真正的秒级处理业务,除非它每秒钟都在出块儿!

为什么比特币的TPS无法提高

既然搞懂了影响比特币网络TPS的原生参数里有“一个块儿包含的交易数”和“出块时间”两个最重要的指标,那么我们为什么不通过增加交易数,或者减少出块儿时间,来提升TPS呢?

先说增加一个块儿里的交易数,影响这个数字的重要指标则又会引出另外一个重要的原生参数,就是“块大小”。比特币中,一个块儿被限制为1M大小,而一条交易数据的大小也是固定的,所以一个块儿里能容纳的交易数上限也就是固定的了。说到这里,大家可能就理解了为什么BCH要进行区块扩容。

那么减少出块儿时间可以吗?并不是这么简单,其实区块链的每一个块儿中所包含的数据,并不是仅有交易数据,还都包含格式数据,这些数据一般位于区块数据包的头部,用来做各种标识和安全验证。但如果我们爆块儿过快,很可能造成每个块儿数据都不满,甚至是空块儿,这些块儿的头部数据是一个字节都不少的,这样其实是一种系统浪费,IO压力也会过大。而且爆块儿过快,还会影响“共识机制”,会大大增加共识达成一致的难度,增加系统被攻破的风险性。

TPS真是越大越好吗

我们知道了表面的TPS定义后,直觉上会觉得TPS肯定是越大越好喽,这很符合逻辑,然而,事实并非如此!

区块链网络是一个典型的P2P广域网拓扑结构,一个数据包的确认,需要广域网上多方通讯。在这样的网络拓扑结构下,就算真的达到百万TPS,又有什么用呢?人眼可以接受40毫秒的延时,而广域网通讯稍微不靠谱一点就会大于这个延时,而且随着业务复杂和网络拓扑结构的复杂(比如电信和网通的通讯问题),延时甚至会以秒和分钟记,然而即便如此,比起区块链动辄以分钟,甚至是小时记的延时,还算是“丝滑般”的体验了。

算你运气非常好,确认块儿的几个节点离的非常近,也绝对不可能达到局域网的速度!从肉眼角度,你会看到,DAPP端的上链操作,从发出请求到界面响应,会远远超过40毫秒,所以依然会是“非常非常”卡顿!如果是一般的购买和转账行为,还能勉强用,但如果是实时性要求很强的操作,那就呵呵了。

要知道广域网分布式随机通讯是绝对不可能超过局域网服务器定点通讯效率的,要想满足我们现有DAPP的丝滑体验,我们需要的不是百万TPS,我们需要的是区块链重构,什么数据上链,什么数据不上链,要精心设计,安全和速度,我们需要取一个折中!丝滑般的体验是TPS、并发量、网络拓扑结构、安全性等综合优化的一个结果!

你可能感兴趣的:(【区块链探索笔记十六】:TPS)