• 区块链资讯
  • 注册购买指导
  • 币种简介
  • 市场解析
  • 创业分享
  • 币圈百科
  • 金融财经

分类

  • 创业分享
  • 区块链资讯
  • 币圈百科
  • 币种简介
  • 市场解析
  • 注册购买指导
  • 金融财经

最新文章

  • 波卡币发行价格(2023年09月30日07时波卡币价格行情)
  • fil币价格今日行情最新-2023年09月30日07时fil币价格今日行情走势图
  • 波场币最新消息-2023年09月30日07时波场币钱包下载
  • 币安币发行量-2023年09月30日07时币安币发行价
  • 泰达币usdt官网-2023年09月30日07时泰达币交易平台哪个最安全最可靠
  • 币安币发行价-2023年09月30日07时币安币最高价格多少
  • shib币实时行情-2023年09月30日07时柴犬币最新价格
  • etc以太经典官网(2023年09月30日07时以太经典价格行情)
  • OKB今日最新行情动向(2023年09月30日07时OK币价格行情)
  • eos币实时行情(2023年09月30日07时柚子价格行情)

热门标签

ada艾达币 eos价格今日行情 eth价格今日行情 shib币价格今日行情 xrp瑞波币最新消息 什么是艾达币 今日 代币 以太坊 以太坊价格 以太坊价格今日行情 以太坊价格最新行情 以太坊价格行情 以太坊币最新价格 以太坊最新价格 以太坊经典最新行情 价格 加密货币 区块链 柚子币今日行情走势 比特币 比特币价格今日行情 波场币价格 瑞波币交易平台 瑞波币今日行情 瑞波币涨幅 瑞波币现在怎么交易 空投 艾达币今日最新价格 艾达币今日行情 艾达币价格 艾达币价格今日行情 艾达币值得投资吗 艾达币发行量 艾达币和瑞波币哪个潜力大 艾达币官网 艾达币最新价格 艾达币走势 莱特币交易平台 莱特币价格 莱特币价格今日行情 莱特币行情 行进 钱包 预言
区块链资讯

区块链性能测试与优化-上篇

                   
by 未蓝网 6月 10, 2023 No Comments
architecture.png



大纲

本篇文章目的是通过具体示例(cosmos-sdk SimApp),介绍完整的性能项目过程,具体内容介绍区块链性能测试中使用的:

1.基本概念

2.常用工具

3.性能调优的常见情况

这3块内容涵盖的内容非常多,每一个内容都有很多书籍和文章介绍,详细的内容不会出现在本文中。

基本概念

区块链的性能测试,方法论上与传统的性能测试没有不同。性能测试有很多混乱的概念,这里我列出本文描述概念做一些定义。

性能测试的定义

性能测试是对系统或者服务的性能指标建立监控策略,在特定场景下执行测试,分析判断性能瓶颈并调优,最终得出性能结果来评估系统或者服务的性能指标是否满足既定值。这里结合cosmos-sdk的simapp区块链来解释。

1. 需要明确指标,一般指两类指标: 技术指标、业务指标。技术指标一般是TPS,响应时间,资源利用率,对应到区块链一般是指每秒可以处理多少笔交易?这些交易的响应时间或者统计结果是多少?在这种情况下系统使用的资源处于什么状态?期望满足的业务指标,应该来源于生产环境统计,以cosmos-sdk的生产应用cosmos-hub为例,其现阶段出块时间大约6秒,每个区块中的交易数大多数小于10。期望的业务指标设定为TPS为100是较为合理的。(这么低的TPS其实是与cosmos-hub的目标有关,因为其主要关注点在链的互操作性)。

2. 测试模型: 是真实场景的抽象,描述业务模型是什么样的。以cosmos-hub为例大致就是,分布在全球的区块链节点,在验证者节点约500个,活跃验证者节点约为200的情况下处理交易。测试时可以按比例抽象实际情况。

币安APP下载

币安APP下载

注册币安APP下载,全球第一虚拟币交易所!

APP下载  官网地址

3. 测试方案: 包括测试环境,测试数据,测试模型,性能指标等。对比区块链系统的测试,就是确定测试架构,准备好如1000个用户,每个用户余额1000stake这样的内容。

4. 需要有监控: 监控的对象有压力机、区块链节点、其他如负载均衡服务器等。云原生时代的监控一般是Kubernetes+Prometheus+Grafana。

5. 需要测试条件:硬件环境,测试执行策略等。例如: 4C8G, 前60秒,每秒增加10个线程。

6. 需要有场景:指性能场景,正式化的描述是: 在既定的环境、既定的数据、既定的执行策略、既定的监控之下,执行性能脚本,同时观察系统各层级的性能状态参数变化,并实时判断分析场景是否符合预期。性能场景,有时被称为测试用例其实是不对的。

7. 要有结果报告:报告内容当然就是实际的指标数据。

性能场景分类

1. 基准性能场景:做单交易/接口的容量(业务量),为混合容量做准备。

2. (混合)容量性能场景:混合容量测试是因为线上真实场景就是由不同的业务组成的,所以由这些业务按照不同并发比例发起梯度压测就是混合容量测试场景。

3. 稳定性性能场景:核心就是时长,在长时间的运行之下,观察系统的性能表现。这个时长的设置,应该来源于运维周期。

4. 异常性能场景:在强压力之下,模拟异常。

重要的性能指标

性能测试的指标有很多,比如:

1.RT, Response Time

2.HPS, Hits Per Second

3.TPS, Transactions Per Second, 这里的Transactions在传统的应用中一般称为”事务“,在区块链领域指”交易“

4.QPS, Queries Per Second

5.PV, Page View

6.Throughput

7.IOPS, Input/Output Operations Per Second

比较重要的指标有资源使用率、吞吐量、响应时间,服务提供方比较关心前两者,用户更更新后者。关于这些指标的一般情况引用Performance TestingMethodology(http://hosteddocs.ittoolbox.com/questnolg22106java.pdf)中的经典图来说明,实际情况可能不同。图中定义了3线3区域3状态,这个图值得多看看,能够大致理解指标简的关系。

1.3线: Utilization,Throughput,Response Time

2.3区域: Light Load, Heavy Load, Buckle Zone

3.3状态: Resource Saturated, Throughput Falling,End Users Effected

其他

1. 一般需要在什么时候做性能测试。

a. 项目上线前,估计系统承载能力

b.项目重构后,评估效果

2. 如果一个项目得到性能报告就终止,这样就只是性能验证。做完全面的性能测试,同时将系统调优到最优状态,才算是一个完整的性能项目了。性能调优耗时长,还可能需要开发参与,代价高。

区块链性能测试

区块链的性能测试的指标最重要的是TPS与延迟,a16z的文章Why blockchain performance is hard to measure对此做了很有洞察的讨论,说明了为什么这两个指标很难测量和比较。其主要内容有以下方面:

延迟

延迟的这段时间的起点和终点如何定义?

1. 起点是用户点击提交还是交易到达内存池?

2. 终点是交易被第1个区块确认?还是被第6个区块确认(POW区块链是这样认为的)?又或者是最终用户收到接口响应的时间?

3. 有些区块链系统对交易会等待一定延迟和到达一定数量才开始处理。这样比较幸运的就是最后加入的交易,其处理延迟最短。

4. 对于上诉问题的一种折中方案是,即准确评估整个系统需要考虑延时的分布,而不是将其延迟看做单一数字。

5. 有些区块链系统的交易处理是有优先级的,fee高的交易很快确认,fee低的相对慢些。fee的不同对交易的延时和TPS的统计是有影响的。

吞吐量

区块链中的吞吐量,即TPS(Transaction Per Second)来衡量,这里的transaction显示不是平等的,最简单的例子就是以太坊中的交易,它可以是转账也可以是调用合约。因此,得出TPS需要指定T指代的是什么。

另外一个实际的问题是,用户其实不关心一个区块链的TPS是多少,用户只关心如何少用fee并尽快完成交易。从这个角度来讲,TPS只对系统服务提供商有意义。

基本工具压力工具

压力工具一般用Jmeter或者特定应用专用测试工具如下:

1.hyperbench/hyperbench

2.hyperledger/caliper: A blockchain benchmark framework to measure performance of multiple blockchain solutions

3.https://github.com/xuperchain/xbench

4.…

使用Jmeter应该是更贴近使用场景,更通用。一般与区块链节点进行交互的方式有(一般命令行交互最终也是调用下面的接口之一)

1.gRPC协议

2.HTTP协议 (REST接口)

Jmeter支持的Sampler支持有HTTP,对gRPC协议的支持需要借助插件jmeter-grpc-request

监控工具

监控工具一般用Prometheus这工具可以监控的内容比较多,其生态如图(/wp-content/uploads/2022/https://www.waylandbrand.com/wp-content/uploads/2023/06/20230610060234-648411fa8670d.png)。在测试区块链应用的实践中,一般是先使用docker-compose部署多个区块链节点模拟正式进行测试的环境,因为正式的测试环境一般硬件配置较高,如果不是自建机房,使用云服务厂商的机器,费用昂贵,这样做可以节约成本。

docker-compose中可以限制容器使用的资源,如内存和CPU算力,甚至绑定CPU核心,对这些资源的监控可以使用cadvisor。

为了验证CPU限制是否准确,可以用stress-ng压满核心,看统计结果是否与限制值一致。

性能调优

一般遇到性能瓶颈的常见元原因(我称之为原因背后的原因,一般都会到硬件层面)会是网络、CPU、磁盘IO。引发磁盘IO的瓶颈的操作有写日志频频繁,打印不必要的日志,通过网络访问磁盘等。这些资源都会通过系统调用来完成,跟踪系统调用,可以使用strace来查看执行了哪些系统调用,以及在这些调用上花费的时间等信息

还可能遇到的问题是系统不稳定,可以表现为CPU使用率/TPS 不稳定。

如果在LightLoad区域选择一定的并发压力,TPS波动较大的话,可能就是系统设计得不好,需要找到原因和优化了。

如果是CPU使用率不稳定(趋势稳定,但波动大),从CPU指令执行层面来看为CPU处于idle状态的时长参差不齐。这种情况下的原因并不在于有CPU有idle,而是在于处于idle的时间段有长有短。需要借助Linux系统工具、程序对应的profilling工具来观测,找到原因。

分析工具

要解决性能问题,首先需要找到原因,寻找原因的分析工具可以参考下图(/wp-content/uploads/2022/https://www.waylandbrand.com/wp-content/uploads/2023/06/20230610060235-648411fb8a99b.png)。这是Linux性能分析最重要的参考资料了,显示了在不同子系统出现性能问题后,应该用什么样的工具来观测和分析。

磁盘IO

磁盘IO一般会导致系统瓶颈,磁盘IO栈比较长,分析起来难度不小。熟悉IO栈,有助于我们发现问题(https://www.thomas-krenn.com/en/wikiEN/images/c/c2/Linux-storage-stack-diagram_v6.2.pdf)

找到原因后,如果能够通过调整操作系统参数或者应用系统参数优化性能是比较快捷的,如果需要修改代码,则会涉及系统架构优化,会有涉及和编码工作,调优周期会很长。

下一篇文章将分享使用cosmos-sdk中的SimApp来进行性能测试以及在性能调优方面的方法。

区块链

  • Previous 比特币对冲(比特币对冲一亏一赚怎么能盈利)4月 ago
  • Next 以太坊会成为第二个比特币吗(2023年06月10日15时比特币价格行情)4月 ago

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

币种行情

嘿,我是小R,需要帮助随时找我哦
QQ客服
  • 2039587134 点击这里给我发消息
关注微信
回到顶部
 
 
本网站部分文章内容来自于互联网,

如有侵犯到您版权,请联系我们删除该内容
  • 区块链资讯
  • 注册购买指导
  • 币种简介
  • 市场解析
  • 创业分享
  • 币圈百科
  • 金融财经
2023  未蓝网. 未蓝加密 powered by 未蓝网