陈显铭(山丘)

读完需要

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

缺点

  • 仿真度不高。

  • 环境部署复杂。

  • 多个压测任务一般不能并行。

  • 存在环境问题:

  1. 依赖系统可能缺失。

  2. 测试环境和线上环境的数据量不一样。

  3. 服务化后,线上各应用是集群部署,比如 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
#架构师必备#点分享点点赞点在看

蚂蚁集团技术专家山丘:性能优化常见压测模型及优缺点相关推荐

  1. 性能优化与压测引擎二:分布式压测引擎pea

    性能优化与压测引擎二:分布式压测引擎pea 分布式压测引擎pea 基本介绍 视频演示 创建任务 任务执行中的节点状态 整体报告 单个请求细节报告 分布式压测引擎pea 前面介绍了gatling是铺垫, ...

  2. 性能优化与压测引擎一:压测框架gatling

    性能优化与压测引擎一:压测框架gatling 压测框架gatling 简单使用介绍 压测框架gatling 说到压测,我们最熟悉的可能就是ab命令和jmeter了,确实他们很方便,但是我最近都在用另外 ...

  3. kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...

  4. 蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6 分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高 ...

  5. mysql笔记(锁、事务、性能优化、压测结果)

    Mysql 该笔记,主要根据kkb课程并结合网上资料和自己的理解而形成. 一.Mysql架构 1.1 逻辑架构 这是从网上copy过来的图.网上一些教程会把mysql也进行分层. 连接层:Connec ...

  6. SQL性能优化常见措施(Lock wait timeout exceeded)

    SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...

  7. WEB前端性能优化常见方法

    web前端是应用服务器处理之前的部分,前端主要包括:HTML,CSS,javascript,image等各种资源,针对不同的资源有不同的优化方式. 1. 内容优化 (1)减少HTTP请求数:这条策略是 ...

  8. LNMP的部署优化及压测

    LNMP的部署优化及压测 1.安装php (1)解决依赖关系 [root@www ~]# yum -y install libxml2-devel libcurl-devel openssl-deve ...

  9. 性能测试之前端性能优化(前端基础知识,前端性能测试常用工具,前端性能优化常见方法)

    目录 1. 前端基础知识 1.1 为什么要关注前端页面的性能,了解页面的加载,渲染方式和顺序? 1.2 一次页面请求会经历哪些步骤? 1.3 页面的展示过程 2. 前端性能测试的常用工具 2.1 Go ...

最新文章

  1. CImg库中部分函数的作用和用法
  2. 业务库负载翻了百倍,我做了什么来拯救MySQL架构?
  3. python多程优化_Python 基本功: 13. 多线程运算提速
  4. VTK:图表之EdgeListIterator
  5. 随机数发生器怎么用_用随机数发生器射击自己的脚
  6. Git教程~忽略特殊文件
  7. 大并发下Timeout waiting for connection from pool 解决方案
  8. python怎样创建项目_如何建立一个完美的 Python 项目
  9. rto初始化和计算_TCP系列15—重传—5、Linux中RTO的计算
  10. BAT 七年经验,却抵不过外企面试的两道算法题?
  11. 2014年03月 面试总结
  12. linux下的函数dirname()和basename()使用
  13. 计算机职业英语一级是什么,计算机职业英语一级.doc
  14. 深入浅出看懂AlphaGo Zero (文章最后有原AlphaGo Zero论文地址)
  15. ORBSLAM2学习(二):ORB源码分析
  16. C++ access( )函数
  17. 一次从 APP 逆向到 Getshell 的过程
  18. Dev-cpp自定义主题:
  19. 佳能2420报错代码E000007-0000
  20. Win7怎么卸载微软输入法?

热门文章

  1. python多线程爬虫框架_普通爬虫vs多线程爬虫vs框架爬虫,Python爬对比
  2. 有4个节点可以构造出 二叉树_简单4个步骤就可以拍摄出美丽的城市夜景,赶紧试试吧...
  3. matlab语言转化为python语言_matlab语言转译成python
  4. 活动安排--贪心算法C语言实现
  5. C/C++端口复用SO_REUSEADDR(setsockopt参数)
  6. python时间的转换及比较
  7. 二十、子程序设计(函数)
  8. MyBatis从入门到精通:update用法、delete用法
  9. 九度OJ 1435:迷瘴
  10. for语句 2017-03-17