关于系统的压测总结
1、压测环境:
选择线上环境作为压测环境,好处是:1)环境真实,不需要担心配置不一致等;2)压测的结果更为精确,不用担心压测结果是否同比例放大等。
需要注意的是:1)压测的时间窗口需限定在低峰期;2)不能搞垮线上系统,做好数据隔离。
2、压测小组
协调资源,梳理涉及的业务。
3、压测数据
需要和线上真实数据区分开来。包括测试用户等数据。直接从线上用户的数据(剔除敏感信息)进行筛选。切记做好压测数据隔离。
4、压测场景模型
规定哪些业务场景,每个场景下压测多大量。
分析业务模型和数据模型:
1)是否关键路径
2)业务的调用关系
3)业务的提供的接口列表
4)接口类型(http、thrift、soa等)
5)读接口还是写接口?
6)各接口之间的比例关系
5、压测流量
TCP引流。
首先要求压测流量能被识别,采用的做法是所有的压测流量都带有特殊的标记,并且这些标记能够随中间件协议的调用关系进行传递;应用系统根据标记识别压测流量;在缓存和存储时,通过存储和缓存过滤器将压测数据存储到影子区域(表)而不是覆盖原有数据。
上述所有操作都遵循一个原则:能够用中间件解决的问题,绝不对业务系统进行改造。
6、压测工具
选用Jmeter,原因有:开源轻量级,能够了解甚至修改其每个控件的实现;
方便开发插件,可以支持如thrift等类型请求;
支持丰富(如RemoteServer,设定集合点等);
压测结果数据与公司监控指标是否吻合。
7、压测指标的监控与收集
1)应用层面
错误率
吞吐量
响应时间(中位线,90线,95线,99线)
GC
2)服务器资源
CPU利用率及负载
内存
磁盘I/O
网络I/O
连接数
3)基础服务
MQ
Redis
mysql
mongodb
4)注意点
响应时间不要用平均响应时间,关注95线;
吞吐量和响应时间挂钩
吞吐量和成功率挂钩
二、优化点
1、可以根据各种介质IO访问的性能来优化(内存缓存>文件>数据库>网络),基本上通过缓存和异步处理这两颗银弹就可以解决80%的性能问题
2、APM工具:通过全链路监控可以发现整个业务流程在哪个节点耗时最长,那么这个耗时最长的节点就是我们需要优化的地方