如何做“健康码”的性能压测

简介:随着无线设备的普及和 5G 的大力建设,越来越多的线上系统、小程序成为了人们生活中必不可少的工具。对于这些工具,都会面对一个问题:系统能承受多少用户同时访问,面对突发的流量洪峰,能否保证系统无故障稳定运行?本文将解答这个问题并进行解说。

作者:拂衣、风云

为什么要做压测

随着无线设备的普及和 5G 的大力建设,越来越多的线上系统、小程序成为了人们生活中必不可少的工具。对于这些工具,都会面对一个问题:系统能承受多少用户同时访问,面对突发的流量洪峰,能否保证系统无故障稳定运行?

为了回答这个问题,就需要在系统上线前做多轮压力测试,提前模拟出复杂的, 高仿真的线上流量来验证整体系统的高可用性, 这也是实施系统高可用方案的关键环节。另外,通过不同阶段的压测,也完成对系统的容量规划、瓶颈探测,对系统整体能力进行验收,确保在突发的流量洪峰来临前,系统确实能够承受即将来临的真实线上压力。

从某种意义上来说,压测是系统稳定性的验证者。

如何实施一次准确的性能压测

准备压测环境

压测的执行环境是一个老生常谈的话题,如果直接在生产环境执行压测,会有2个问题:

  1. 会影响线上业务,对正常访问系统的用户造成影响
  2. 会污染线上数据,将压测数据写入线上数据库

为了解决这 2 个问题,一般业内采用如下几种方案:

以上方案各有优缺点,适用场景也不尽相同,可以根据自己项目所处的阶段灵活选择方案。

构建压测脚本

业内常用的压测工具包括 JMeter、Gatling、Locust、k6、Tsung、阿里云 PTS 等。这些工具无一例外,都需要将压测业务的 API,编排为一个压测脚本。

这一步工作的重点在确认压测的 API,不要有遗漏,且 API 编排的顺序要符合用户的操作逻辑。对于健康码业务的压测来说,如果脚本中遗漏了登录鉴权 API,那后面的刷新健康码、查看核酸报告等 API 都会在权限校验这步就报错,不会执行正常的业务逻辑,也就无法模拟真实的业务场景。

以上压测工具编排脚本都有 2 个方式:

  1. 手动输入脚本,这需要脚本的编写人员对业务非常熟悉,保证不会遗漏API。
  2. 自动录制脚本,上述开源压测工具都提供了录制请求的代理功能,开启并配置代理后,只要在页面上模拟用户的操作和点击行为,即可自动录制请求,并生成压测脚本。同时 PTS 还提供了 Chrome 录制插件[1],免代理配置,可以一键生成 JMeter 和 PTS 压测脚本。提升了脚本编写的效率,也能保证不遗漏 API。

为了避免复杂脚本中遗漏 API 的风险,推荐使用录制功能生成脚本。

确认压力模型

这一步是在配置压测中模拟的压力峰值、不同 API 的压力分布比例以及压力值递增模型。压力值指的是模拟并发用户数,或每秒发送的请求数。

施压模式

在设置之前,需要确认施压模式,业内主要有 2 种施压模式:

  1. 虚拟用户(VU)模式,可以理解为一个线程模拟一个真实用户,压测时线程一直循环执行,模拟用户不停地发送请求。
     
  2. 吞吐量模式,即每秒请求数(QPS),可以直接衡量服务端的吞吐量。

在项目验收阶段,很重要的一个指标就是系统的吞吐量,即可支持的QPS。对于这种压测场景,更推荐使用吞吐量模式,可以直观的看到施压机每秒发出的请求数,并和服务端的吞吐量直接对应起来。

各 API 压力分布比例

确认了施压模式后,需要配置不同 API 的压力分布比例。比如健康码业务,100% 的用户会调用登录 AP 和获取健康码 API,但后面并不是所有用户都会调用查询核酸报告 API、查看推送信息等 API。所以每个 API 的准确压力分布比例,也是一次成功压测中不可获取的因素。

压力值递增模型

常见有脉冲模型,阶梯递增,均匀递增。

脉冲模型会模拟流量在瞬间突然增大,常用于秒杀、抢购的业务场景。

递增模型可以模拟在一定时间段内,用户量不断增大,常用于模拟有预热的业务场景。

除了常规的递增模型,最好在压测中可以实现手动调速功能,一是可以模拟一些非常规的流量递增情况,二是可以反复调整压力值,来复现和排查问题。

施压流量地域分布

确定了压力值和递增模型后,还需要确定施压流量的地域分布,应尽量拟合真实的用户分布,才能保证测试结果真实可信。

对于区域性的在线业务,施压机分布在当地的同一机房,是可以理解的。如果是全国性的在线业务,施压机也应该按照用户分布,在全国各地域部署。

执行压测,观察压测指标

压测中核心指标:请求成功率,请求响应时间(RT),系统吞吐量(QPS)

请求成功率不止要看全局的请求成功率,还要关注一些核心API的成功率,避免整体成功率达标,核心 API 成功率不足的情况。

请求响应时间,需要关注 99、95、90、80... 等一些关键分位的指标是否符合预期,而平均响应时间没有太大的参考意义,因为压测需要保证绝大部分用户的体验,在不清楚离散程度的情况下,平均值容易造成误判。

系统吞吐量是衡量系统能承受多大访问量的指标,是压测不可缺少的标准。

上面三个指标遇到拐点时,就可以认为系统已经出现性能瓶颈,可以停止压测或调小压力值,准备分析、定位性能问题了。

除了这三个业务指标,同时还应该同时观测系统的应用监控、中间件监控和硬件监控的一些指标,包括但不限于:

服务器:

  • 网络吞吐量
  • CPU 使用率
  • 内存使用率
  • 磁盘吞吐量
  • ......

数据库:

  • 连接数
  • SQL 吞吐量
  • 慢 SQL 数
  • 索引命中率
  • 锁等待时间
  • 锁等待次数
  • .....

中间件:

  • JVM GC 次数
  • JVM GC 耗时
  • 堆内、堆外内存使用量
  • Tomcat 线程池活跃线程数
  • ......

更多压测时需要关注的指标,见压测指标[2]

如果系统已经达到预期,往往还可以可以按照 10-20% 的比例,不断加大压力值,为系统做一次峰值“摸高”,观察系统的极限值是多少,做到心里有底。

复盘,性能优化

压测结束,如果未达到预期,可以配合监控排定位,分析性能问题,性能优化完成后,在下一轮压测中继续验证。

测试中问题分析和调优的方法这里不展开描述,可以参考这篇测试问题分析及调优[3]

如果系统表现已经符合预期,可以用压测得到的系统吞吐量指标,配置流控、降级、系统或隔离规则,保障系统稳定性。

阿里云 PTS - 压测大礼包,助您系统无忧

性能测试 PTS(Performance Testing Service)是一款阿里云 SaaS 化的性能测试工具,从最早为了精准模拟双十一流量洪峰诞生,到现在已经走过了 10 个年头。每年支持包括双十一在内的全集团范围的几万次压测任务,是阿里内部双十一技术架构的"提前验证者"。

技术让利 1 — 自研 PTS 压测引擎,压力模型准,性能优

PTS 完全自研的压测引擎,在并发模型的实现上相较传统线程模型性能更优。并且支持 API 维度的吞吐量配置,比开源工具更精细,可以准确模拟流量漏斗模型。

比如真实的流量模型是 100% 用户会调用登录 API,80% 用户会调用刷新健康码 API,20% 用户会调用查看核酸 API,这就需要在每个 API 上配置吞吐量(QPS),如果使用并发模型,就无法模拟此场景。

漏斗模型示例:

PTS 压测还支持多种客户端的流量录制功能,可以快速构建压测脚本,并支持完全白屏化的操作,让压测脚本构建的门槛大大降低。

技术让利 2 — 全面兼容 JMeter,上线 JMeter 插件

PTS 在全面兼容 JMeter 的同时,针对 JMeter 分布式压测做了很多优化:

优化点 1:全球分布施压机,即压即用,可支持百万并发,千万 QPS 压测;

优化点 2:支持吞吐量模式,可以设置全局目标 QPS,更直观衡量服务端性能;

优化点 3:支持压测中调速,可以灵活调整并发或 QPS,不断逼近性能极限点;

优化点 4:支持浏览器插件录制,一键导出 JMeter 脚本,无需配置代理,大大降低构建脚本的工作量;

优化点 5:针对分布式压测,支持自动切分文件,支持全局生效 Timer、Controller 组件,零门槛开启分布式压测;

优化点 6:发布 JMeter PTS 插件,使用 JMeter GUI 客户端即可发起云端分布式压测,无缝衔接脚本调试和执行阶段(详见 JMeter 插件使用指导[4])。

技术让利 3 — VPC 内网压测

在全面正式压测前,重点微服务应用需要在日常态做单应用的压测,摸清楚局部的性能极限。

对于部署在阿里云上的服务,单个微服务应用不会暴露公网入口,这时就需要压测工具有打通 VPC 内网的能力。

PTS 支持 VPC 内网压测,可以在压测时快速打通施压机与用户 VPC 网络,保证内网压测的网络畅通。在压测结束后,也会即时关闭网路通道,保证网络安全。

用户只需要在压测配置中,选择微服务应用所在的 VPC 内网、安全组、交换机,即可开启 VPC 内网压测。让您的服务无需暴露公网入口,也可以探测出性能指标。

操作示例如下:

技术让利 4 — 流量地域定制

大部分业务的用户并不是按地域均分的,相反,往往很不均匀。要模拟真实流量分布,施压机需要在各地分散部署,并且支持按地域、按量分配,在压测时,还要支持实时的统一调度。如果施压机都分布在一个 Region,甚至是一个可用区内,那是无法模拟出来自全球用户请求的。

使用阿里云性能测试服务(PTS)压测时,开启流量地域定制功能,只需简单勾选地域,即可指定施压机的地域分布,目前支持全球 22 个地域定制。

技术让利 5 — 问题诊断工具

压测的目的是发现性能问题,在压测报告中,PTS 有异常请求状态码的统计,并提供了请求采样日志,可以直观的看到请求、响应的全部信息,对于响应时间较长的请求,也会直观的展示请求在各个阶段的耗时。

对于 Java 应用,PTS 提供了基于 Java Agent 的问题诊断工具,只需在 Java 应用上挂载探针,即可自动获取应用、API、机器维度的秒级监控。对于报错的请求,可以直接定位到调用链上报错的方法堆栈,省去了大量排查问题的时间,是定位问题的“利器”。

定位报错方法堆栈示例如下:

成本让利 1 — 上线 JMeter 资源包

PTS 上线了 JMeter 专属资源包,价格相比 PTS 压测资源包更加优惠。

成本让利 2 — VPC 内网压测价格更优

PTS 上线了 VPC 内网压测资源包,1 万并发压测 20 分钟,仅需 29 元起,让日常态内网压测成本更低。

成本让利 3 — 包年包月包,限时优惠75折

包年包月资源包,限时优惠 75 折,且在包月时间段内,不计 VUM,适合高频压测的用户。

成本让利 4 — 定制资源池

对于高并发,需要压测时间较长的情况,推荐使用定制资源池。20 台施压机以上,连续压测 1 小时的情况下,计费相当于正常压测的 4 折,让长时间、高并发压测的用户支付成本更低。

点击此处,即可前往 PTS 资源包购买页[5] ,欢迎大家按需选购。

相关链接

[1] Chrome录制插件使用指导:

 录制Chrome浏览器场景 - 性能测试 PTS - 阿里云

[2] 压测指标:

测试指标 - 性能测试 PTS - 阿里云

[3] 测试问题分析及调优:

测试分析及调优 - 性能测试 PTS - 阿里云

[4] JMeter 插件使用指导:

使用PTS-JMeter Plugin专属插件 - 性能测试 PTS - 阿里云

[5] PTS 产品购买页:

阿里云通用售卖

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对话 MySQL 之父:一个优秀程序员可抵5个普通程序员

【CSDN 编者按】MySQL之父Monty有着四十多年的编程经验,从儿时的兴趣到长大后的深耕,他在编程领域不断钻研,最终成为编程大师。《新程序员004》带你走进Monty的程序人生,谈谈他在编程方面的最新感悟以及对未来的预测。作者 | 郭露…

服务网格 ASM 年终总结:最终用户如何使用服务网格?

简介:本文不打算回顾 Istio 或是阿里云服务网格 ASM 的变化或趋势,我们来聊一聊阿里云 ASM 服务网格,它的最终用户是如何使用服务网格的。 作者:叶剑宏 背景 阿里云服务网格 ASM 于 2020 年 2 月公测,近 2 年的时间…

使用 nginx 轻松管理 kubernetes 资源文件

作者 | 江小南来源 | 江小南和他的小伙伴们引言nginx在传统的使用中,一般是作为反向代理或者负载均衡。但是它还有一个很优秀的能力常被人们所忽略。在kubernetes部署应用的过程中,会有大量的yaml等资源需要维护。集群内部维护起来不太方便,特…

Dubbo-go 优雅上下线设计与实践

简介:在分布式场景下,微服务进程都是以容器的形式存在,在容器调度系统例如 k8s 的支持下运行,容器组 Pod 是 K8S 的最小资源单位。随着服务的迭代和更新,当新版本上线后,需要针对线上正在运行的服务进行替换…

华为鸿蒙网络,这回真翻脸了?被谷歌“除名”,官宣鸿蒙手机版,华为:走着瞧...

与电脑系统类似,手机操作系统如今也已经被安卓和苹果的iOS瓜分殆尽,根据数据,安卓和iOS已经占据了手机操作系统99%以上的市场份额。不过由于iOS是苹果自研的封闭系统,所以在智能手机这么多年发展下来,也就自然地形成了…

SaaS服务的私有化部署,这样做最高效|云效工程师指北

简介:为了能够有效且高效地同时管理SaaS版本和私有化版本的发布过程,云效团队也结合云原生的基础设施和标准化工具(比如helm)进行了一系列的探索和实践,并将其中一些通能的能力进行了产品化。本文从问题本身出发&#…

阿里 BladeDISC 深度学习编译器正式开源

简介:随着深度学习的不断发展,AI模型结构在快速演化,底层计算硬件技术更是层出不穷,对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来,还要应对计算框架的持续迭代。深度编译器就成了应对以上…

浪潮“源”AI大模型如何求解数学应用题

编辑 | 宋慧 供稿 | 浪潮 “源1.0”大模型是浪潮信息发布的中文巨量模型,参数量高达2457亿,在中文语言能力理解和生成评测基准CUGE总榜中取得榜首,并获得语言理解(篇章级)、语言生成、对话交互、多语言、数学推理等5…

Quick BI产品核心功能大图(五)移动端:让数据在更多业务场景中流通

简介:将数据更好的融入日常工作中,一个重要的前提条件就是多端多渠道的数据触达和办公协同能力。 Quick BI凭借移动端交互体验,帮助用户随时随地便捷查看报表,并通过在线协同方式,追踪策略的执行落地。让数据在企业中流…

html5点击切换选项卡,简单纯js实现点击切换TAB标签实例

一个不需要jQuery实现的tab选项卡切换效果,代码简洁易用。默认是鼠标悬停显示tab效果,可将其中的onmouseover 修改为 onclick 点击效果使用方法:1、将附件中的index.html中的css样式以及代码部分拷贝到你需要的地方即可相关链接:几…

Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞

简介:Dataphin,用中台方法论打造企业级好数据。Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出,一站式提供数据采、建、管、用全生命周期的大数据能力,以助力企业显著提升数据治理水平,构建质量可靠、…

当英特尔 OpenVINO 遇上微软 Azure,AI在边云协同的新方案

作者 | 宋慧 出品 | CSDN云计算 数字化浪潮下,越来越多的终端 IoT 设备接入网络,边缘的数据量与分析需求也随之增加。根据 Eclipse 对边缘负载的分析显示,人工智能是边缘计算中占比最高的负载之一,高于控制逻辑、数据分析等负载所…

工程设计论——如何写好工程代码

简介:设计是在对需求的认知不完整的情况下,对被设计对象进行求解的一个过程。这就迫使我们需要一边认识被设计对象,一边进行求解。为了并行化地进行这一过程,也为了使得对被设计对象地认识有初步的研究工具和基础,我们…

阿里云能耗宝即将发布,助力中小企业绿色升级,参与碳中和万亿市场

阿里云能耗宝新品发布会由阿里云-企业云服务-能耗云团队主办,将于2022年2月23号举行,本期发布会将为企业呈现“双碳”背景下的一站式服务。通过阿里云能耗宝,企业如何更加高效便捷地核算碳排放量、制定节能降碳方案、规划碳中和路径。 2020年…

鸿蒙关键技术研究,鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 百篇博客分析HarmonyOS源码 | v54.02...

百篇博客系列篇.本篇为:下图是一个可执行文件编译,链接的过程.本篇将通过一个完整的小工程来阐述ELF编译,链接过程,并分析.o和bin文件中各区,符号表之间的关系.从一个崭新的视角去看中间过程,阅读之前建议先看准备工作先得有个小工程,麻雀虽小,但五脏俱全,标准的文件夹和Makefi…

敏捷研发项目,我们该如何度量?

简介:作为项目负责人,我们如何及时获悉当前项目的最新进展和问题,了解项目的整体状况?作为项目管理人员,我们如何跟进和推进项目的正常进行?如何借助云效效能洞察平台 Insight,帮助项目管理者及…

iofsstat:帮你轻松定位 IO 突高,前因后果一目了然 | 龙蜥技术

简介:磁盘被打满到底是真实的业务需求量上来了呢?还是有什么野进程在占用 IO? iofsstat 帮你精准定位。 编者按:sysAK(system analyse kit),是龙蜥社区系统运维 SIG 下面的一个开源项目&#x…

html视频标签不显示,HTML视频标签无法正确显示视频

这里是我的JS:function video() {navigator.device.capture.captureVideo(onSuccess, onFail,{limit: 1,duration: constants.MAX_DURATION_OF_VIDEO});function onSuccess(mediaFiles) {console.log("MEDIA FILE");console.log(mediaFiles);var i, path,…

晋中计算机专业对口大学,山西晋中计算机专业好就业吗?,计算机专业

【山西大众技工学校】将学生的日常管理、学习成绩、操行考核融为一体,结合校园全封闭管理形成一套完整的学生管理办法,做到每个环节都有标准与要求,每个过程都有管理和考核。山西晋中计算机专业好就业吗?另一种称为“编译”&#…

实战 Kubectl 创建 Deployment 部署应用

作者 | 洲的学习笔记来源 | CSDN博客本篇文章主要是实战 Kubectl 创建 Deployment 部署应用。通过本期文章:我们将学习创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 Kubectl 命令。用 Kubectl 创建 Deployment当运行 Kubernetes 集群&#xf…