蚂蚁集团技术专家山丘:性能优化常见压测模型及优缺点
陈显铭(山丘)
读完需要
6
分钟
速读仅需 2 分钟
陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构、服务化、性能优化等有深入的理解。参与支付宝支付链路核心系统,设计、调优应用系统关键能力, 高效、稳定保障系统平稳支撑大促。曾历经多年双十一大促,对于性能调优、构建高可用系统有丰富的实战经验。熟悉常见的性能优化模式,比如应用结构优化、链路级、单系统优化等多种优化方式。对于常见的压测模式,如单机压测、链路级压测都有深厚的积累。作为一名性能专家,以追求性能最大化为己任,与之相伴的自然是高技巧、高难度的代码优化。这也是一名性能专家的毕生追求。
通过性能优化的常见模式及趋势,我们大概知道了性能优化的一些招式,但是发现有性能问题的常见模式还是压测。本章列举常见的压测模型并对其进行阐述分析。
1
压测模型抽象
压测模型可以被抽象为图 18.1 的模型。该模型主要包含如下三大部分。
压测任务管理:负责对压测场景、目标、策略进行管理。比如对支付业务场景进行压测时需要持续 30 分钟,且需要使 QPS 的压力值达到 1WQPS 等。
压测任务执行:通过单机、分布式等压力机执行压测策略层下的压测任务,并在压测系统中输出相关监控指标。
压测结果分析:压测机会产出相关的系统性能日志,之后通过监控系统、工具体系进行数据分析,分析压测情况,优化压测策略,找到系统瓶颈。
图 18.1
1.1
压测环境准备
环境准备是压测的基础,下面是需要准备的主要软件和硬件环境的内容。
压力机资源。
被压测系统。
依赖资源(压测数据、第三方依赖)。
1.2
压测执行闭环
压测是一个不断调整压测参数、进行压测、找到问题、解决问题、再次验证等一系列
过程的组合,并不能一次性就可以做到完整、极致。整个的压测过程是一个闭环过程,这个过程可以拆分为如下的几个方面:
使用压力机进行压测。
分析程序收集压测数据(RT、QPS/TPS、成功率、错误、内存、I/O 等)。
分析压测报告。
确定优化计划。
反馈到压测系统或者调整压测策略。
2
线下压测模型
线下压测模型最多,也是最容易实现的。对于有技术实力的公司,开发环境和压测环境是隔离的。图 18.2 所示的是分布式系统结构的线下压测模型拓扑图,实线是同步调用,虚线是消息类调用。
图 18.2
线下压测模型的优缺点如下。
2.1
优点
可以实现快速压测。
压测场景可以自由自定。
可以进行稳定性测试或者链路性能回归。
2.2
缺点
仿真度不高。
环境部署复杂。
多个压测任务一般不能并行。
存在环境问题:
依赖系统可能缺失。
测试环境和线上环境的数据量不一样。
服务化后,线上各应用是集群部署,比如 A 可能是 1000 台,B 可能是 100 台, 是 10:1 的比例关系,但是线下的比例一般是 1:1,这个比例是失真的。
3
线上引流压测模型
线上引流压测模型是使用比较多的高仿真压测,其模型结构如图 18.3 所示。该模型的优缺点如下。
图 18.3
3.1
优点
真实的业务场景测试。
可以按需缩容。
可以快速回退。
3.2
缺点
无法对链路节点进行压测(与全链路压测相比,该压测方式存在着数据库流量可能不够、网络节点不全等问题)。
很难进行超出业务流量的压测。
很难评估链路性能。
线上引流压测是不错的压测模式,其使用的关键技术如下。
流量的控制能力。可以按需切换流量,Web 层(诸如使用 Ngnix)以及服务和服务调用之间也需要按需切换。如果想要对流量有更强的控制,则建议在需要控制的各层加入代理层,在代理层上可以实现路由算法,通过调整路由算法达到控制的目的, 比如可以扩展 Ngnix 的模块。如果使用的是 Dubbo,则可以扩展服务调用的寻址逻辑。
服务监控能力。如何在线上进行压测并快速识别压测情况?如果压测在单台机器上进行,登录一台机器即可确认情况,但是如果有多台机器怎么办?必须依靠自动化监控核心指标。
服务化后的系统使用普通的线上压测模式很难发现链路上的问题,所以就需要使用下面要介绍的线上全链路压测模型。
4
线上全链路压测模型
目前,在阿里巴巴已经实现了线上全链路压测模型的落地,如图 18.4 所示,用于对大促等爆发流量进行模拟。使用完全真实的线上环境进行高仿真的线上压测,可以按照线上真实的容量部署情况进行链路压测。
图 18.4
线上全链路压测模型的优缺点如下。
4.1
优点
高仿真。
可以构造比日常容量大得多的请求量。
4.2
缺点
该模型的实施成本很高,一般的公司可以不这么做,用前面的方式已经足够了。
5
总结
本章介绍的几种压测模型是现在主要使用的模型,可能会有一些变体模型,但不会相差太大。压测时还有些需要注意的点,诸如要小心压力机的瓶颈。现在常用的工具有 JMeter 等,在此不做详解。
- EOF -想要加入中生代架构群的小伙伴,请添加群合伙人大白的微信
申请备注(姓名+公司+技术方向)才能通过哦!
往期推荐
京东平台研发朱志国:领域驱动设计(DDD)理论启示
2020-10-27
架构专家高磊:缓存为王——无线缓存架构优化
2020-10-22
三湘银行中台总助黎慧剑:银行业务中台建设实战
2020-10-21
阿里文娱技术专家战獒: 领域驱动设计详解之What, Why, How?
2020-10-20
蚂蚁集团技术专家山丘:性能优化的常见模式及趋势
2020-10-18
阿里专家马飞翔:一文读懂架构整洁之道
2020-10-16
美团技术专家云鹏:写给工程师的十条精进原则!
2020-10-15
架构专家李伟山:电商系统之订单系统
2020-10-14
DDD专家张逸:构建领域驱动设计知识体系
2020-10-13
京东架构师闫文广:订单系统高可用架构及演变过程
2020-10-12
前阿里高级技术专家杜仲:再谈中年危机和应对策略
2020-10-10
阿里高级技术专家张建飞:面对复杂业务,if-else coder 如何升级?
2020-09-30
阿里专家常昊:新人如何上手项目管理?
2020-09-29
快狗打车CTO沈剑:如何利用计划管理提升团队效率和产能
2020-09-27
阿里技术专家麒烨:修炼测试基本功
2020-09-16
END
#架构师必备#点分享点点赞点在看
蚂蚁集团技术专家山丘:性能优化常见压测模型及优缺点相关推荐
- 性能优化与压测引擎二:分布式压测引擎pea
性能优化与压测引擎二:分布式压测引擎pea 分布式压测引擎pea 基本介绍 视频演示 创建任务 任务执行中的节点状态 整体报告 单个请求细节报告 分布式压测引擎pea 前面介绍了gatling是铺垫, ...
- 性能优化与压测引擎一:压测框架gatling
性能优化与压测引擎一:压测框架gatling 压测框架gatling 简单使用介绍 压测框架gatling 说到压测,我们最熟悉的可能就是ab命令和jmeter了,确实他们很方便,但是我最近都在用另外 ...
- kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势
陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...
- 蚂蚁集团技术专家山丘:性能优化的常见模式及趋势
陈显铭(山丘) 读完需要 6 分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高 ...
- mysql笔记(锁、事务、性能优化、压测结果)
Mysql 该笔记,主要根据kkb课程并结合网上资料和自己的理解而形成. 一.Mysql架构 1.1 逻辑架构 这是从网上copy过来的图.网上一些教程会把mysql也进行分层. 连接层:Connec ...
- SQL性能优化常见措施(Lock wait timeout exceeded)
SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...
- WEB前端性能优化常见方法
web前端是应用服务器处理之前的部分,前端主要包括:HTML,CSS,javascript,image等各种资源,针对不同的资源有不同的优化方式. 1. 内容优化 (1)减少HTTP请求数:这条策略是 ...
- LNMP的部署优化及压测
LNMP的部署优化及压测 1.安装php (1)解决依赖关系 [root@www ~]# yum -y install libxml2-devel libcurl-devel openssl-deve ...
- 性能测试之前端性能优化(前端基础知识,前端性能测试常用工具,前端性能优化常见方法)
目录 1. 前端基础知识 1.1 为什么要关注前端页面的性能,了解页面的加载,渲染方式和顺序? 1.2 一次页面请求会经历哪些步骤? 1.3 页面的展示过程 2. 前端性能测试的常用工具 2.1 Go ...
最新文章
- CImg库中部分函数的作用和用法
- 业务库负载翻了百倍,我做了什么来拯救MySQL架构?
- python多程优化_Python 基本功: 13. 多线程运算提速
- VTK:图表之EdgeListIterator
- 随机数发生器怎么用_用随机数发生器射击自己的脚
- Git教程~忽略特殊文件
- 大并发下Timeout waiting for connection from pool 解决方案
- python怎样创建项目_如何建立一个完美的 Python 项目
- rto初始化和计算_TCP系列15—重传—5、Linux中RTO的计算
- BAT 七年经验,却抵不过外企面试的两道算法题?
- 2014年03月 面试总结
- linux下的函数dirname()和basename()使用
- 计算机职业英语一级是什么,计算机职业英语一级.doc
- 深入浅出看懂AlphaGo Zero (文章最后有原AlphaGo Zero论文地址)
- ORBSLAM2学习(二):ORB源码分析
- C++ access( )函数
- 一次从 APP 逆向到 Getshell 的过程
- Dev-cpp自定义主题:
- 佳能2420报错代码E000007-0000
- Win7怎么卸载微软输入法?
热门文章
- python多线程爬虫框架_普通爬虫vs多线程爬虫vs框架爬虫,Python爬对比
- 有4个节点可以构造出 二叉树_简单4个步骤就可以拍摄出美丽的城市夜景,赶紧试试吧...
- matlab语言转化为python语言_matlab语言转译成python
- 活动安排--贪心算法C语言实现
- C/C++端口复用SO_REUSEADDR(setsockopt参数)
- python时间的转换及比较
- 二十、子程序设计(函数)
- MyBatis从入门到精通:update用法、delete用法
- 九度OJ 1435:迷瘴
- for语句 2017-03-17