再谈全链路压测

以前的博客,有对业内比较出名的几家互联网大厂的全链路压测方案进行过整理和总结,传送门:聊聊全链路压测html

时隔一年多,因为性能测试及相关知识的学习实践,对其有了新的认识,这里,再次聊聊我对全链路测试的理解。。。网络

 

目前的现状多线程

以我如今所在的银行业务系统来讲,目前的现状大概有这些:业务逻辑太复杂、系统庞大、子系统较多、系统间解耦程度较低、调用链路较长、核心系统环环相扣。架构

在这种状况下,常规的性能测试工做内容,大概以下:并发

①、只能进行独立系统的压测工做,致使压测任务量较大;框架

②、强依赖系统较多,第三方调用面临种种限制,只能经过mock方式解决;运维

③、没有较为独立的性能测试环境,UAT和PAT测试数据差别较大,没法给予上线一个较为准确的容量评估;高并发

④、项目排期没有预留足够的性能测试时间,致使须要常常加班甚至通宵;工具

⑤、工程师文件创建较为薄弱,对系统性能的认知和重视度不足,每每让人以为沮丧;性能

上面的几种状况,据我了解,在大多数公司都存在相似的状况,这些因素致使面临着愈来愈高的数据冲击和愈来愈复杂的业务场景,急需一种手段来保障和提升系统的高性能高可用。

 

面临的挑战

除了上面所说的技术层面的问题,要开展全链路压测,还面临以下的几点挑战:

①、因为全链路压测涉及的系统及场景较多,所以须要跨团队沟通、跨系统协调改造,公司体量越大,这一点难度就越大;

②、全链路压测涉及的系统较多,且不一样的系统架构也有所不一样,所以须要考虑:机房管理、基础网络、DB管理、持久存储、中间件、应用部署、流量接入、监控与运维保障等多方面

③、全链路压测的目的是找到系统调用链路薄弱环节并优化,这就要求对整个调用链路涉及的系统进行进行准确的容量规划,所以环境和配置,是必须重视的一点;

固然,可能还存在其余问题,好比性能测试团队成员的技术水平是否知足要求、管理层的支持力度等方面,毕竟,这是一项很庞大复杂的软件工程项目!!!

不过全链路压测的优势也很明显,好比:优化联络薄弱环节能够提升系统的可用性,容量规划能够节省成本,提升效率

 

开展前的准备工做

在开展全链路压测以前,咱们须要作哪些准备工做?

①、业务梳理:覆盖所有的业务场景,是难度很大且不理智的选择,通常来讲只须要筛选出高频使用的功能、核心功能以及基础功能便可;

②、场景梳理:场景梳理也是很重要的一项工做,由于只有肯定了被测场景,咱们才能设计合理的测试方案和策略,场景覆盖正常操做、异常操做便可;

③、流量模型:“咱们每每对高并发一无所知!”所以须要经过监控分析等手段,获得平常流量场景、峰值流量场景下各系统的流量以及配比,进行必定的放大,来做为全链路压测的流量参考模型;

④、数据处理:全链路压测一般在生产环境进行,因此防止数据污染是必须考虑的问题,通常来讲都是经过对入口流量进行标记区分、数据隔离、影子库等方式来避免,固然,还须要作好灾备工做;

⑤、实时监控:不管是压测开始前仍是测试进行中,都须要及时且可视化的获取到系统的状态变化,方便及时排查定位问题,也避免压测对正常的服务形成干扰;

        监控的重点,主要是对应服务的TPS、不一样百分比的RT、成功率、资源耗用、服务状态、告警等信息;

 

全链路压测平台架构设计

要开展全链路压测,那么一个合理高效可用的压测管理平台,是颇有必要的,参考了不少全链路压测的设计思路,我我的的想法中全链路压测平台的架构设计,主要由如下几部分组成:

①、Controller:主要任务为压测任务分配、Agent管理;

②、Agent:负责心跳检测、压测任务拉取、执行压测(多进程多线程方式);

③、Task Service:负责压测任务下发、Agent的横向扩展,以确保压测发起端不成为瓶颈(能够利用RPC框架来实现);

④、Monitor Service:接收Agent回传的监控和测试数据日志,并转发给消息队列,让Compute Service进行汇总计算展示;

⑤、Compute Service:对压测结果进行计算,并结合Grafana等可视化工具进行界面展现;

⑥、Log Service:日志服务,即不管压测机仍是服务应用在测试过程当中产生的日志,都统一收集,方便进行问题排查定位;

⑦、Elasticsearch/Influxdb:对压测产生的数据存储;

⑧、Git:压测脚本的版本管理;

⑨、Gitlab:做为数据仓库进行版本管理,Agent主动拉取脚本执行;

⑩、Redis:主要用于配置信息管理;

PS:固然,我我的的构思存在不完善或者有待仔细斟酌的地方,这里只是给一个参考。具体的架构设计图,可参考京东的全链路军演系统ForceBot的架构设计,以下图:

 

完成了上面的工做,接下来就能够开展全链路压测的工做了。固然,有一点须要说明:全链路压测并不适用于中小型公司,一方面由于成本,另外一方面,不适合而已。

最后,在开展性能测试以前,请认真思考,当咱们讨论性能测试时,咱们在说什么?