• 0
  • 0
分享

1. 为什么要做压测

什么是压力测试?

不断向被测对象施加压力,测试系统在压力情况下的表现。

压力测试的目的是什么?

  1. 测试得出系统的极限性能指标,从而给出合理的承诺值或者容量告警;

  2. 找出系统的性能瓶颈,对性能做出优化;

  3. 测试系统在高负载情况下的稳定性;

  4. 验证系统在过载情况下的限流和降级预案。

不做压测会产生什么问题?

  1. 线上容量评估不准确,流量增加,服务被打挂

  2. 升级前没做压测,升级后性能出现劣化,可用性降低;

  3. 无法给出准确的承诺值,导致集群水位过低,资源被浪费或者集群水位过高

  4. 系统存在稳定性bug;

2. 压测方案设计

压测环境

压测环境可以简单的分为模块级压测和链路级压测,它们的主要特点和区别如下:

模块级压测

  1. 应用场景:比较变更前后的性能,看性能是否有劣化;定位模块本身的性能瓶颈。

  2. 环境要求:不要求与线上环境完全一致,只需要保证变更前后两次的压测在同一个环境即可。

  3. 业界方案:维护一套固定的线下环境,进行周期性、常态的压测。

链路级压测

  1. 应用场景:做整条链路的容量评估;评估系统整体可用性。

  2. 环境要求:要求尽量与线上环境保持一致,这样的压测数据才是有借鉴意义的。

  3. 业界方案:使用线上环境,根据不同的隔离方式使用不同的方案:

a. 不做流量隔离,压测流量和业务流量共存,由于没有做隔离,只能在低峰期压测 。

b. 逻辑隔离,通过流量调度或者分流方式,将压测流量打到一个压测环境去。压测流量和业务流量在同一个机房跑,但并不会打到同一个业务实例。

c. 物理隔离,利用异地多活的特性,将业务流量从一个机房切出,留下一个空机房做压测。

第一种方案是最接近线上真实环境的,但是存在着一些安全风险;后两种方案安全性高很多,但是没有完全利用整个线上架构,存在一定程度上的失真。

线上压测怎么保证安全性?

  1. 流量隔离,如上述方法做流量隔离。但是只做流量隔离是不够的,即使是物理隔离,也会对线上数据进行修改,所以还要做数据隔离。

  2. 压测流量经过中间件时进行打标,做压测标记,比如http流量可以配置一个特殊的header。

  3. 在业务集群对流量标记进行数据隔离,比如对压测流量产生的日志写到另一个路径(有的系统会对日志做一些分析统计);存储/缓存方面将压测流量产生的数据存储到影子表,正常流量访问正常表;

  4. 消息屏蔽,如果消息队列无法识别出压测消息,则会造成线上消息堆积,影响线上流量,所以需要对压测消息进行屏蔽。

  5. 对不支持压测的第三方服务进行mock。

压测模型

压测要覆盖哪些场景?压测请求和数据如何构造?如何模拟业务流量形态?以上三个问题分别对应压测模型中的业务模型、数据模型和流量模型。

业务模型

  • 压测需要覆盖哪些业务场景?

需要梳理出核心业务场景,必须包含核心接口和大流量接口,大流量接口可能是一些不对用户暴露的,在内部频繁使用的接口。

  • 如何模拟业务场景?

需要理清楚接口之间的关系。对待一些简单查询的接口,没有前后依赖关系,只需要关注流量配比就行了;对待一些复杂业务场景,则需要还原业务处理流程,理清楚接口串联逻辑。可以通过场景录制和场景回放来梳理。

数据模型

  • 基于线上数据进行改造

请求部分可以直接把线上流量录制下来,对请求加压测标记,并对关键id做便宜;铺底数据可以直接将线上存储数据拷贝到另一个压测表。

  • 基于模型构造

通过对线上日志和请求进行分析,梳理出对性能有影响的数据特征和请求特征,根据这些特征构造出数据,其中铺底数据需要通过真实的业务应用来构建。

基于线上数据改造的方式,方案很简单,数据构造快,但是强以来系统现有数据,,无法应对新增场景,模型调整不灵活,适用于老服务的线上压测;

基于模型构造,不强依赖线上数据,可以人工构造新增场景,维护成本低,只需要调接口就行了,不需要感知线上存储表的变化,模型可以灵活调整,但是方案比较复杂,数据构造慢,使用场景比较广泛,线上线下新老服务皆可。

压测模型的特例:流量录制,原样回放

特点:不用模拟业务场景、不需要构造数据;只能录制到线上已有流量的服务和接口;只能在线上环境回放,只能回放只读接口;只适用于老服务读接口的压测;

流量录制可以把低峰期、平峰期、高峰期的流量都录制下来,以免出现漏测的情况。

什么是只读接口?我们考虑一下电商搜索接口是不是只读的,其实不是,因为每一次搜索会被前一次搜索影响,即前一次搜索到的商品在下一次搜索的时候不应该显示在靠前的位置,所以电商搜索接口其实不是只读的接口。

流量模型

流量模型就是模拟业务流量形态

  1. 线上有流量,观察线上流量形态。网上绝大部分开源的监控打点都是5s以上的,最理想的情况可以达到ms级别的,可以通过分析日志来进行实现。

  2. 线上没有流量,分析用户行为或者调用方行为。常见的业务流量形态可以分为两种,一种是连续递增型,还有一种是脉冲型(比如抢红包)

流量预估

流量形态是模拟线上流量曲线,此外我们还需要进行流量预估,计算出压测的量级。已双十一活动为例,我们可以把接口分为三类:

  1. 背景接口,流量不随活动而变化,压测是仅作为背景流量,取近期峰值即可;

  2. 普通关注接口,流量随活动而变化,用通用模型计算

  3. 重宝接口,比如交易接口,取历史大促的峰值

压测结果分析

观测指标

  • 系统指标

  1. qps/tps,最大tps一定是稳定的,如果存在抖动,那系统已经存在问题。

  2. 响应时间,从客户端发起请求到收到请求的全过程时间

  3. 错误率,根据sla来定

    资源指标

  4. cpu利用率,一般要低于80%,avg低于60%比较保险

  5. 内存使用率,低于80%比较保险,否则可能陷入GC死亡循环

  6. 磁盘吞吐/网络吞吐

    特性指标,根据具体业务来定

  7. 连接池使用率

  8. 消息队列堆积

  9. pps

仿真度分析

压测结果是否有价值?

比较同等水位下压测场景和线上真实场景服务表现相似度,可进行仿真度分析的指标:

  1. 流量,流量比例,接口覆盖

  2. 链路覆盖

  3. 机器资源,cpu利用率、内存利用率

  4. 可用性指标,时延,错误率

  5. 业务指标

把这些指标组装成一个向量,和线上指标做比较,二者差异,差异越小,仿真度就越高。

压测发展趋势

现有痛点:

  1. 需要随时观察监控,需要oncall待命

  2. 安全性不足

  3. 方案复杂,代价大

未来发展趋势:

  1. 智能化

  2. 无人值守


作者:yuubeka

原文链接:https://blog.csdn.net/yuubeka/article/details/125565618

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   合适,合适,合适!不接受任何反驳  但是我反对说,女生更适合测试,不适合开发的这种论调。  · 有人说女生更为心细,更有耐心,能够更好的找出bug;  · 有人说测试不用写代码,女生学更容易上手;  · 有人说做测试强度低,不用加班,对女生更友好。  或许在以前手工测试盛行的年代,有这样的看法还算正常,但是在2021年,测试行业不断升级变化的情况下,再这样说,就不适合了。  如果你是女生,想要衡量自己是否适合进入这个行业,首先要搞明白下面3点:  · 女生做软件测试所占的比例?前景如何?  · 女生做软件测试是否也有“35+”天花板?未来的出路是什么?  · 女生学习软件测试应该按照什么样...
            0 0 1253
            分享
          •   众所周知,索尼 PlayStation Portal 是一款串流掌机,需借助 PS5 的串流功能才能实现远程游玩,亚版定价 1580 港币及 6480 新台币。  今天,索尼宣布为 PlayStation Portal 提供系统更新,新增 PS5 游戏(暂不支持 PS3 和 PS4 兼容游戏)的云串流 Beta 功能。简单来说就是用户哪怕自己没买 PS5 也能玩了。  索尼 PlayStation Portal 结合了 DualSense 无线控制器的主要特色,包括自适应扳机和触觉反馈等功能,搭载高通骁龙 680 芯片,采用了 8 英寸 LCD 屏幕,能以 1080p 60fps 画面串流...
            0 0 43
            分享
          •   最近,YouTube Music与双子座聊天机器人(Gemini chatbot)进行了整合,这款音乐流媒体应用程序正在特斯拉电动汽车中找到新家,从而扩大其覆盖范围。最新的特斯拉软件更新版本 2024.26 包括对 YouTube Music 应用程序的支持等多项功能。  在特斯拉中使用 YouTube 音乐应用程序需要向汽车制造商订购每月 10 美元的高级连接服务。根据发布说明,另一种方法是使用手机创建 Wi-Fi 热点。  使用 YouTube Music Premium 收听超过 1 亿首歌曲。访问你的资料库,查看你喜欢和添加的所有歌曲、你创建的播放列表以及你订阅的艺术家和播客。  ...
            0 0 455
            分享
          • 马斯克入主后,推特裁员似乎不可避免,悬念只是裁多少。当地时间11月2日,彭博社援引知情人士称,特斯拉CEO埃隆·马斯克(Elon Musk)计划在社交媒体公司推特(Twitter)裁员约3700人,即员工总数的一半,以降低成本。知情人士称,马斯克还打算改变公司现有的“随时随地工作”政策,要求员工在办公室工作。马斯克和顾问团队一直在考虑推特旧金山总部的裁员情况,以及其他政策变化的一系列情况。两名知情人士说,目前一种方案是,被解雇的员工将获得60天的遣散费。自马斯克接管推特,已经解雇包括首席执行官帕拉格·阿格拉瓦尔(ParagAgrawal)在内的高管团队。知情人士称,上周末,一些董事和副总裁已经...
            0 0 768
            分享
          •   做好缺陷(bug)的管理与跟踪的关键点,是要明确做这件事的目标:缺陷管理的目标是,通过工具辅助,详细记录和准确分类,便于进行数据统计和分析,从而帮助团队分析原因、进一步帮助团队持续改进和提升,而不是追责。  以下是具体的详细说明:  一、我们为什么需要进行缺陷管理与跟踪?  软件缺陷(bug)带来的影响可以包括以下几个方面:  1.用户体验受损:软件缺陷可能导致程序崩溃、功能失效、界面不友好等问题,影响用户使用体验。  2.生产效率降低:软件缺陷可能导致开发团队需要花费额外的时间和精力来修复问题,从而影响项目进度和生产效率。  3.成本增加:软件缺陷可能导致软件开发公司需要承担额外的成本来...
            0 0 820
            分享
      • 51testing软件测试圈微信