黑马程序员技术交流社区

标题: 【深圳校区】性能基础之全链路压测知识整理 [打印本页]

作者: 柠檬leung不酸    时间: 2018-12-18 14:58
标题: 【深圳校区】性能基础之全链路压测知识整理
什么是全链路压测?
基于实际的生产业务场景、系统环境,模拟海量的用户请求和数据对整个业务链进行压力测试,并持续调优的过程
全链路压测解决什么问题?
针对业务场景越发复杂化、海量数据冲击下整个业务系统链的可用性、服务能力的瓶颈,让技术更好的服务业务,创造更多的价值
进行到 (业务流量预估阶段)、(系统容量评估阶段),我们完成了系统容量的粗略评估,做到这一步还不够,真实的场景并非如此 我们需要做精准的容量规划,给服务做限流降级提供数据的参考
什么时机下需要?
ps:业务的不断发展,依赖的模块不断增多。需要找出短板来进行解决
ps:接口的服务能力取决于模块中最低的那个—木桶理论
如何展开全链路压测?梳理核心链路和边界数据模型构建流量平台搭建容量规划为什么需要容量规划
容量规划的目的在于让每一个业务系统能够清晰地知道:什么时候该加机器、什么时候应该减机器?双11等大促场景需要准备多少机器,既能保障系统稳定性、又能节约成本
ps:什么时候增减机器、保障系统稳定性、节约成本
容量规划四步走获取单台机器的服务能力
为了精准地获取到单台机器的服务能力,压力测试都是直接在生产环境进行,这有两个非常重要的原因:单机压测既需要保证环境的真实性,又要保证流量的真实性
生产环境进行单台机器压力测试的 4 个方法
模拟请求:通过对生产环境的一台机器发起模拟请求调用来达到压力测试的目的
工具:apache ab、webbench、httpload、jmeter、loadrunner
适用场景:新系统上线或者访问量不大的系统采用这种方式来进行单机压测
缺点:模拟请求和真实业务请求之间存在的差异,会对压力测试的结果造成影响 另一个缺点在于写请求的处理比较麻烦,因为写请求可能会对业务数据造成污染,这个污染要么接受、要么需要做特殊的处理(比如将压测产生的数据进行隔离)
ps:和真实请求有差异、写请求需要处理、适合新系统上线或访问量不大的

复制请求:通过将一台机器的请求复制多份发送到指定的压测机器
适用场景:系统调用量比较小的场景
优点:为了使得压测的请求跟真实的业务请求更加接近,在压测请求的来源方式上,我们尝试从真实的业务流量进行录制和回放,采用请求复制的方式来进行压力测试
缺点:同样也面临着处理写请求脏数据的问题 另外一个缺点复制的请求必须要将响应拦截下来,所以被压测的这台机器需要单独提供,且不能提供正常的服务(不能把响应给到真实的用户了,比如涉及到发短信邮件之类的)

请求转发:将分布式环境中多台机器的请求转发到一台机器
适用场景:系统调用量比较大的场景
优点:请求的引流转发方式不仅压测结果非常精准、不会产生脏数据、而且操作起来也非常方便快捷,在阿里巴巴也是用的非常广泛的一种单机压测方式,这种方式怎么测试出当前系统最大能抗的流量是多少呢?

调整负载均衡:修改负载均衡设备的权重,让压测的机器分配更多的请求
适用场景:系统调用量比较大的场景
优点:调整负载均衡方式活的的压测结果非常准确、并且不会产生脏数据
ps:单机压测可以基于上面的4种压测方式基础上,构件一套自动化的压测系统,可以配置定时任务定期对系统进行压测,也可以在任意想压测的时间点手动触发一次压测
在进行压测的同时,实时探测压测机器的系统负载,一旦系统负载达到预设的阈值即立刻停止压测,同时输出一份压测报告 通过单机压测获取的单机服务能力值也是容量规划一个非常重要的参考依据
最小机器数 = 预估的业务访问量 / 单机能力
流程举例
怎么使用流量复制进行压测?
传统压测工具基于 web 服务器的请求复制mirror (基于应用层)tcpcopy (基于网络栈,tcp协议的流量复制)goReplay (http协议的流量复制)

参考资料:
[1]https://www.cnblogs.com/imyalost/p/8439910.html
[2]https://github.com/youngperson/blog/issues/41

转自 测试窝
地址 https://www.testwo.com/article/1408
文章仅作为分享






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2