【#第一文档网# 导语】以下是®第一文档网的小编为您整理的《TPS 和区块链的关系以及解决方案的相关探索》,欢迎阅读!
TPS 和区块链的关系以及解决方案的相关探索
作者:张 翼
来源:《中国新通信》 2018年第22期
系统中系统的吞吐量决定了系统每单位时间成功传输数据的次数。但是人们往往把吞吐量和TPS 进行挂钩,其实这是对TPS 的一种曲解和混淆。系统吞吐量几个重要参数:TPS、并发数和响应时间。以下我会用公式进行表述:
TPS = 每分钟请求 / 事务数量
并发数= 系统在同一时间内处理的请求总和/ 事务数响应时间:一般取平均响应时间
在理解了上述三个元素的公式后,我们可以计算出它们之间的关系:
TPS = 并发数/ 平均响应时间
系统的吞吐量通常由两个重要因素决定: TPS 和并发。在很多用户同一时间访问系统的压力下,无论是哪一个指标达到系统的峰值,系统就会出现一定程度的阻塞。 系统的吞吐量就会下降,原因是系统超负荷工作,造成系统到达峰值无法正常进行原有的工作。
对于区块链这样的项目我们之所以没有杀手级的应用出现很大部分原因就是TPS 的问题。因为这里还有很多因素决定整套系统的性能,这里我再举例几个公式:
并发用户数的计算公式:
系统用户数:系统总量的用户数,例如一个APP,如果使用该APP 的用户总量为1000,那么这个总量就表示的是系统用户数。
同时在线用户数:在规定的一段时间内同时在线用户数的最大量。
同时在线用户= 每秒请求数+ 并发连接数/ 平均用户思维时间
平均并发用户数的计算:C=nL / T
注:C 为平均的并发用户数;n 为平均每天访问用户数(login session);L 是用户在一天内登录到退出的平均时间(登录会话的平均时间);T 是观察时间的长度(用户在一天内使用系统的时间长度)
并发用户数峰值计算:C^ 约等于C + 3* 根号C注:C^ 为并发用户峰值;C 为平均并发用户数;该公式遵循泊松分布理论。
3、吞吐量的计算公式
指系统在单位时间内处理的请求数。[1]
从业务角度看,吞吐量可以用:衡量请求数/ 秒,页数/ 秒,人数/ 天或交易次数/ 小时数[2]
从网络角度看,吞吐量可以用:字节/ 秒来衡量
对于交互式应用程序,吞吐量指标反映了服务器上的压力,可以考虑系统的负载容量。[3]
吞吐量的不同表达方式可以解决不同级别的问题,例如,以字节/ 秒为单位。表示编号在网络基础结构,服务器体系结构和应用程序服务器约束方面存在瓶颈[4];指示的请求/秒数主要是应用服务器和应用程序代码反映的瓶颈。
当性能不在考虑范围内,虚拟用户数量与吞吐量之间存在一定的关系,我们可以通过以下公式计算: F=VU * R /注:F 为吞吐量;VU 表示虚拟用户个数;R 表示每个虚拟用户发出的请求数;T 表示性能测试所用的时间。
用户思考时间的计算公式
Think Time,从业务角度来看,这个时间是指用户操作的时候用于停顿思考的时间,在业务上需要模拟这样的时间间隔,引入思考时间的概念以更逼真地模拟用户的操作。在吞吐量公式中,F = VU * R / T表示吞吐量F是VU数量,每个用户发出的请求数R 和时间T 的函数。 而其中的 R 又可以用时间 T 和用户思考时间 TS 来计算: R = T / TS以下是计算思考时间的一般步骤:
A、首先计算出系统的并发用户数
C=nL / T F=R×C
B、统计出系统平均的吞吐量
F=VU * R / T R×C = VU * R / T
C. 计算每个用户发送的平均请求数。
R=u*C*T/VU
D、根据公式计算出思考时间
TS=T/R
对于区块链系统,TPS 是每秒产生的记录事务。矿工将这段时间产生的区块打包提交到节点,每个区块链包含系统所规定数量的交易记录,这个“规定数量”就是并发数。 所以在区块链系统中我们也可以这样计算TPS:TPS =一个区块内包含的交易数量 / 区块产生时间例如,在比特币的情况下,区块大小为1mb,并且每个事务记录的平均大小为495 字节。那么每块的平均事务数=1*1024*1024 字节/495=2118,区块生成时间约为10 分钟, 那么 TPS=2118/(10*60)=3.53
对于以太坊,在以太坊的每个区块中记录的交易数量不固定,但由gas 限制确定。所以以太坊的TPS 没有方便表示的公式。我们可以粗略计算etherscan 每秒的ETH 平均交易量,每秒产生大约十几笔交易。
那么,区块是如何产生的呢节点运行共识: 节点实时监听系统,同时共识算法开始运行,比如PoW 共识算法是根据区块头和nonce 进行哈希运算。 广播并验证的时间:当一个节点完
成计算后,提交给网络中的peers,验证后加入到区块链上,继续广播,直到网络中的节点均达成共识。
x 个confirmation 之后被认为是安全的:为了防止区块链受到攻击,通常可以在几次甚至几十次确认之后使用转移的令牌,例如,一些交换需要12 次确认。这里,x 的数量,确认是来自包含目标事务的块的数量,并且有x 个块连续地链接到区块链。x 越大,区块链越长,攻破就越难。
这三步是有前后次序的,不能并发。实际上,区块生成的时间只是第一步和第二步。所以,TPS 的计算公式为:TPS = 一个区块内包含的交易数量 / 区块产生时间 = 一个区块内包含的交易数量 / (共识算法运行的时间 + 广播并验证的时间 )
这里提出一个解决TPS 的构想:
分片是数据库中的常用方法,即并行计算。区块链本质上是一种存储数据的方式,因此使用数据库优化是一个好主意。Internet 数据库的碎片意味着数据库(可以想象为excel表单)被切割成多个部分。每当您运行一些基本操作(如搜索)时,您都可以执行多个链并发执行,从而链接搜索。树查找中的时间复杂度从o(n)减少到o(logn)。
假设网络中有1000 个节点,则网络自动分为10 个分量片(每片100 个节点)。各分片能同时进行交易验证。如果单组件平板电脑可以在一定时间内验证100 笔交易,那么10组件平板电脑可以同时验证1000 笔交易。
分片只是分片(并行)的技术术语。但是,区块链中的Sharding 比普通数据库的架构困难得多。互联网数据库大多是无序的,区块链是高度有序的:新区块必须在旧区块之后生成。
以上就是整体对于区块链和TPS 的一些理解以及提出的一些解决方案。TPS 固然重要,但是也不能盲目提高TPS,这是一个循序渐进的过程。
本文来源:https://www.dy1993.cn/KW94.html