有幸参与了一次关于全链路压测的前期过程,将所涉及到的东西进行整理,希望能帮到他人。
简介
全链路压测主要是公司针对压测准备的、期望无限接近生产真实流量、模拟其触发的最高并发的整个时间段,请求重放、识别,收集压测结果,汇总报告。【ps:其实主要是为了省钱,不然借助三方压测平台或工具,能满足多样化压测需求,唯一点就是贵,这是硬伤】
将压测过程中的问题点汇总、解决,最终目的是提高服务性能,保证稳定、高可用性。
过程
按照如上大概步骤,进行压测的开发工作。
前期
前期的工作在图上已明示,此处大致讲一下压测标识、影子数据、监控日志等的处理方式,如有更优的方式可留言哦!!!
如交易链路-下单操作,压测请求数据存储位于压测服务器或存储至压测数据库,可以通过Java Agent探针技术【ASM、bytebuddy
】来处理解析http请求、dubbo请求,在请求头中增加压测标识,业务代码中控制特殊的流转场景
交易链路-支付操作,压测过程中并非真实的支付场景,需要对该订单支付动作进行模拟操作,可以使用mock【mockito、easy-mock、Jmockit】方式处理
影子数据创建,可以以表或库的方式将线上数据以某种清洗隔离规则偏移处理至压测库中,可以借助数仓ETL工具【sqoop、kettle、datax】对db、es、mongo、cache同步
监控日志,将压测请求的监控日志进行收集,可单独设置pinpoint、skyWalking等方式进行链路追踪处理,明确调用指向及拓扑图
注: 以上涉及技术请自行了解,如有可能,后续【博文】介绍,请期待吧….
其他:
略
中期
先对单一接口进行压测处理,通过日志、调用链路判断压测请求是否正常分发,可参考pinpoint、skyWalking中的调用链,通过解析全局唯一ID,获取请求分发转换链
压测时,不影响正常业务流程,同时可主动中断压测链【无论是实时还是指定时间】,防止异常调用一直工作,影响用户正常操作
设置压测指标,记录压测过程中,指标量涨幅状况,后期可追溯定位
后期
根据报告进行优化,无论是从服务器,还是代码,又或其他中间件等,对系统升级,以便应对未知情况下的系统访问量突发暴涨
界面化工具参考:
datax-web,数据同步项目,可以直接在git上下载: https://gitee.com/WeiYe-Jing/datax-web 【关于datax的了解自行百度哈】
aliyun-dataworks,在阿里云平台上操作数据同步【收费哈】
自定义数据同步工具
压测重放工具,可参考美团、有赞等处理方式
Fighting !!!