背景:
在云上环境进行压测的场景,主要有单链路和全链路压测。其中,单链路压测用于业务添加新的接入模块和单业务架构迁移后稳定性评估;全链路压测则更多是在割接上云前演练,大促前容量评估等几个场景。
一、压测姿势普及
1)链路打标
对压测流量打上特殊的标签,根据标签识别将压测数据写入到影子表,以至于不影响到线上流量数据。通常采用到方法是添加测试标识,或者是指定测试账号来识别压测流量,相比于传统构造请求压测数据的方式,目前大部分电商采用的是流量回放的方式,减少维护成本和增加压测多样性。
添加测试标识:在压测请求header 添加特定指标;
Headers = {'Press-Ori':'PressKA'}
添加测试账号:提供测试账号,针对指定账号到请求,其db链接指向影子库表。
for UserId in range(PressFlow):
Args = 'AdminTest' + str(UserId);
p.apply\_async(Press, args=(Args,))
2)影子库表
压测数据落入到影子库表,达到数据隔离,减少压测后数据回滚和保留数据分析。为了保证压测链路和线上环境一致,一般做法都是在线上的databases上创建对应的tables。
3)压测指标
3.1)业务目标
客户运营侧根据推广和线上系统pv,活动形式等给出大促GMV,不同的电商客户其对应的客户群体通常不一致,比如母婴市场和服装市场,对应的运营策略不一致会导致其大促线上流量模型往往有很大区别。
3.2)容量规划:
压测有效验证设备资源搭建的线上环境所具备的抗压能力。业务目标对应到设备容量指标,换算到业务系统就是对应指标,比如交易系统高峰期订单量,商城高峰在线人数等。按照当前线上环境资源,在过去运行的时间里所能支撑的业务数据进行设备和业务横向扩容。
3.3)性能指标:
应用层面
- 错误率
- 吞吐量
- 响应时间 Response Time
- GC
服务器资源
- CPU利用率及负载
- 内存
- 磁盘I/O
- 网络I/O
- 连接数
二、模拟压测系统
1、模拟环境逻辑图片
2、业务系统逻辑
地址:http://xxx.xxx.com/
实现的功能(压测逻辑):
登陆功能;
订单查看;
加入购物车;
清空购物车;
3、压测系统逻辑
使用的并发逻辑:
p = Pool(PressFlow)
for i in range(PressFlow):
op = "select \* from Buy\_Car where User='{}'".format(User)
p.apply\_async(conn\_sql, args=(op,))
p.close()
其中:压测流量50% = 50进程;
4、监控系统逻辑
数据来源:通过云监控拉取数据存入到mysql;
数据展示:grafana直接拉取mysql的数据;
健康指标:通过指标进行阈值计算,阈值内则视为正常。
下一篇:补充现网压测工具说明和对比