全链路压测调研
架构 刘宇帅 5年前 阅读量: 2007
什么是全链路压测
使用真实生产业务场景、在真实的生产系统环境下根据历史用户访问记录构造海量用户请求对整个业务链进行压力测试并生成报告,根据报告持续调优的过程。
为什么要全链路压测
我们针对单机器单系统的压测虽然可以掌握单个机器或服务的服务能力但是并不能依此来推测整个系统的服务能力,因为任何一个具体的业务系统都可能在系统容量、业务代码性能、物理机器、网络、中间件和各个系统之间调用或具体的业务流程中等等任何一点上存在瓶颈进而导致真个业务系统的服务能力下降,而这些众多的点我们没办法去确定具体那个点会成为瓶颈,我们只能通过全链路压测来测试服务能力找到瓶颈,因为我们要服务于用户而全链路压测的流量正是 mock 真实用户流量所以全链路压测调优出来的最优性能才是我们系统的最优性能。
只有进行合理的全链路压测我们才能知道服务的能力,才能更好地应对突发或正常的增长流量。
如何进行全链路压测
系统支持
- 全链路透传标识:包括同一个请求生成一个唯一id(用于链路各阶段性能分析)及压测流量字段标识(标识测试流量),这两个字段需要透传到该次请求所产生的各类服务的请求中去。
- 数据隔离:对压测产生的所有数据要避免写入线上数据
- 日志:压测日志写入单独目录(或添加标识用于过滤),避免影响流量统计、各类报表等
- 数据库:压测产生的数据写入独立的表,但是表要和线上表保持一致,数据量级等维度也要一致
- 缓存:独立的缓存系统或者缓存key prefix(redis 可用 db 去区分)
- MQ:标识测试流量,根据具体业务进行处理
- 其他:梳理所有相关的三方服务,避免脏数据灌入,如果可以可申请第三方开通同等配置的服务用于测试,或者使用mock,当然 mock 方式不如前者
数据构造和场景模型
- 数据真实可用:我们可以在线上服务使用日志等方式收集真正的用户请求
- 数据脱敏:为了避免对真实用户信息造成影响和敏感信息曝光需要进行数据脱敏
- 场景梳理:梳理出关键业务流程构建模拟场景,再次确认各个流程涉及到的数据是否会造成脏数据
- 场景真实:构建压测场景的时候尽量模拟真实用户行为(比如:用户填写密码,验证码需要一定时间等)
数据收集与监控
- 压测数据收集,实时收集压测数据最好是可形成实时图表,方便进一步决策压测方案等
- 梳理业务所有监控,确保压测的时候能够准确的发现问题。
沙盒演练
因为全链路测试是在生产环境进行,所以我们上线前一定要在沙盒环境进行全面的演练测试。必须确保上面各个点的全面,否则上线运行后造成的灾难将是毁灭性的!!!
上线前对所有数据做备份(这个即使不演练也应该有备份服务,而进行压测压测前可再次备份保证数据最少丢失)。
三方服务
全链路压测系统除了要在系统底层进行支持,而且还需要开发压测服务本身而且压测服务也需要一定的物理资源等,在综合考虑下可以考虑使用三方服务。推荐服务如下:
- 阿里云PTS
- ONEAPM