全链路压测设计
2019年某电商平台在双十一前做全链路压测,压测团队为了模拟真实用户行为,在压测脚本里用了一个真实的用户ID。
结果悲剧了:压测脚本向这个用户发送了1万次订单创建请求,用户余额被扣成了负数,优惠券被消耗殆尽。
更严重的是:压测数据直接写入了生产数据库,影响了真实用户的数据。
这次事故导致平台赔偿用户约5万元,压测负责人被开除。
【面试官手记】
全链路压测是保障大促稳定的关键手段。我面试过的候选人里,能说清楚"压测数据隔离"的不超过30%,能说出"压测方案"的不超过20%。全链路压测的关键是压测数据不能污染生产。
一、全链路压测的四大挑战 🔴
1.1 四大挑战
1.2 压测目标
二、压测数据隔离 🔴
2.1 标识压测请求
2.2 压测数据构建
2.3 压测数据库
三、流量构造 🔴
3.1 JMeter配置
3.2 流量模型
3.3 阶梯压测
四、压测监控 🟡
4.1 压测监控指标
4.2 压测告警
五、压测结果分析 🟡
5.1 瓶颈分析
5.2 优化建议
六、生产避坑 🟡
6.1 全链路压测的五大坑
坑1:压测数据污染生产
坑2:压测影响真实用户
坑3:压测流量不真实
坑4:压测没有发现瓶颈
坑5:压测后没有清理
6.2 压测检查清单
七、真实面试回放 🟡
面试官:全链路压测怎么做?
候选人(小张):四个步骤:
一是压测数据准备。构建10万+压测用户,1000个压测商品,全部加PT_前缀。
二是压测数据隔离。压测请求带X-Pressure-Test Header,根据Header切换到压测数据库。
三是流量构造。按真实流量模型构造JMeter脚本,包含搜索、下单、支付等。
四是压测监控。设置错误率、响应时间、资源使用等监控指标。
面试官:压测数据怎么隔离?
小张:三个层面:
一是请求标识。压测请求带X-Pressure-Test Header。
二是数据存储。压测数据存在单独的Schema,查询和写入都根据Header切换。
三是中间件隔离。Redis、Kafka都有压测Topic,消息带压测标识。
面试官:怎么保证压测数据不污染生产?
小张:两个措施:
一是用户隔离。压测用户ID用PT_前缀,所有查询都检查前缀。
二是余额隔离。压测余额单独准备,不使用真实余额。
【面试官手记】
小张这场面试的亮点:
知道压测四步骤
知道数据隔离的三个层面
知道用户ID前缀隔离的方法
全链路压测是P7工程师必备技能,能完整回答的候选人,说明有大促保障经验。
全链路压测的核心是压测数据隔离 + 流量真实。记住三个要点:
- 数据隔离:压测数据、压测数据库、压测标识
- 流量构造:真实用户行为模型、分布比例合理
- 监控分析:找出瓶颈、制定优化计划
全链路压测是大促保障的必备手段。