vlambda博客
学习文章列表

全链路压测性能保障体系建设之路


日前杭州数列科技资深技术专家高金受邀软件质量效能社区(Q&E Meetup online)分享关于全链路压测性能保障体系建设,以下文字是对本场直播内容的记录。

全链路压测性能保障体系建设之路


2020年互联网面临新的机遇,但也出现了新的挑战。线上业务量增大,业务的复杂性也随之增加,传统压测工具无法满足日益增长的业务量,越来越多企业趋向于构建分布式架构。但由于分布式架构体系上的应用服务具有数量多、规模大、环境复杂等特点,这就导致其线上稳定性问题更难被快速发现及定位,即使好不容易将问题找到,单一的工具或系统也难以快速解决。


1. 全链路压测的应用场景

以下列举了一些适用于全链路压测的一些典型场景:

1.1 新系统上线场景:

准确探知系统承载能力,防止刚上线被用户流量冲垮。新系统上线一般会遇到以下两个问题:

  1.  新系统能够支持多大的并发流量访问,是否需要增加机器来满足用户流量

  2.  新系统性能是否满足预期,是否影响用户体验。

如果这两个问题没有很好的解决会造成严重的影响 ,举个例子:某知名电商双十一推出一款网红产品的秒杀业务,想通过秒杀来吸引一波流量,结果双十一当天功能刚上线就系统宕机,消费者各种投诉、网上各种舆论,至此这家电商到现在再没搞过此类秒杀业务。

1.2 峰值业务稳定场景:

流量激增情况下,比如像双十一这样的大促,系统如果没有做好相关的准备,很容易被用户流量冲垮,导致公司业务受损,目前业内普遍通过全链路压测提前模拟流量激增场景,来增强系统的承载能力。


1.3 系统容量规划场景:

成本优化,对系统进行精细化的容量规划。无论是新系统上线还是大促场景,都会遇到容量规划的问题,目前容量规划更多是结合平常系统性能表现以及预计用户流量按照经验去规划,但这种规划一般无法做到精准容量评估,一种是评估多了,造成机器浪费,一种是评估少了造成线上故障,对业务造成影响。


1.4 系统可用性探测场景:

探测系统的可用性,提升系统的整体服务能力和吞吐量。全链路压测另外一个典型用场景就是通过模拟真实的用户流量压力,去探知系统的性能瓶颈,从而提升系统的整体服务能力和吞吐量,提升用户体验。


2. 全链路压测有什么好处

2.1 保障重大活动的系统稳定性

避免公司业务和声誉因为技术故障受到损失,为技术团队赢得业务团队的尊重。


2.2 精准的容量评估

帮助公司用最低的成本满足业务的性能要求


2.3 重大项目重构切换前的性能验证

系统重构是IT部门场景的技术更新的方法,每次上线都需要经历一段阵痛期,期间性能问题、业务故障频发,用户投诉频繁。通过全链路压测可以在正式切换前完全解决性能问题;配合自动化的用例梳理和人工验证,可以极大程度降低业务故障。两者配合使用,可以快速的渡过不稳定期,提升用户体验。


2.4 端到端的全链路巡检,第一时间发现故障并快递定位问题

常见的监控体系通过一些间接的指标来判断是否有故障发生(比如通过CPU利用率、内存使用率、应用的错误日志数量、业务单量和基线的对比等等方式),间接的方式会产生大量的误报,造成告警麻痹症,真的故障发生后不一定能第一时间引起重视。

通过全链路压测提供的数据隔离功能,可以在线上通过压测流量验证真实的业务接口是否能正常工作。这种方式可以直接在用户发现业务故障前,让相关人员第一时间知晓。配合链路的监测分析功能,快速定位问题应用所在。经过验证该方法在客户真实环境中比传统监控方法平均提前7分钟发现故障,告警正确率是传统告警方式的几十倍。

2.5 建立公司的性能运营体系,将运动式的性能优化演化为自发的日常性能优化

很多公司都有运动式或者故障驱动的性能优化经历,比如马上要双十一,总监牵头开始性能优化;有人管的时候性能表现很好,一旦没人牵头做性能优化的事情,又会有很多性能问题被暴露出来。这样的方式通过优化效率很低,投入还大。


2.6 通过全链路压测的方式,配合目标制定、绩效和工单系统。

自动化的全链路压测可以日常化的排查性能瓶颈,通过工单将问题直达负责人,极大的提升性能优化的效率,将性能问题控制在萌芽状态。


3. 为什么选择线上环境而不是测试环境

2013年阿里云提出了通过影子表、影子库等技术来实现全链路压测的概念,对集团的所有的中间件、核心应用针对性的做了改造,使其具备支撑全链路压测的能力。影子表能力可以让压测产生的写入数据全部都隔离到其他区域,不影响生产数据,应用升级中间件后就自动具备了这个能力。为了解决商业压测工具不能提供超大瞬间流量的问题,阿里自研了压测流量产品,通过分布在全国各地的CDN机器,同时发起超大并发流量,对集团内部应用进行全链路压测。通过模拟双十一相同的生产集群、流量模型、流量规模的方案,来提前验证系统是否具备支撑双十一的高压能力,从而保障了阿里双十一的稳定运行。

理想情况下,如果测试环境想跟线上环境完全一致,软硬件都一致,是可以做到的。但是为了保持完全一致,机器成本、维护成本、数据同步都需要大量的支出,所以这也要根据公司情况来衡量。如果用线上环境直接做压测的话就不需要机器与维护成本了,但是难点在于对技术的要求比较高。


4. 线上环境压测要注意哪些问题?
一般在线上直接做压测会遇到以下几个问题:
  1. 环境问题生产环境与性能测试环境,单机配置与节点配置差异较大,导致最终结果会产生偏移;适合性能环境的中间件、JVM、web容器配置不一定适合生产环境。

  2. 数据流向问题单个场景与混合场景测试,数据流会形成断层,不具备流转性,压测数据模型不够完善。

  3. 真实性问题性能测试环境压测,硬件配置差异、数据差异、中间件配置差异,最终导致流量预估与压测结果的偏移,不够贴近真实。

  4. 成本问题多个系统性能测试环境占用的硬件资源较大,若实现生产压测,可有效释放对应硬件资源。


5. 如何开展全链路压测呢?

先说一下大概的一个流程,从准备阶段到开展部署实施到最后的上线。然后,拿其中的两个难点作为案例给大家重点介绍一下。

全链路压测性能保障体系建设之路


5.1 压测前:
  • 压测范围:明确压测目标、梳理压测链路

  • 业务系统改造:业务系统接入压测探针进行压测改造

  • 压测方案:制定整个压测计划、压测数据构造、压测流程、紧急预案、监控指标等

  • 压测管理:压测相关配置,如:压测任务、施压配置、SLA配置、压测指标配置等

  • 压测验证:验证压测是否按照预期正常运行


5.2 压测中:
  • 压测实施:执行压测任务、观察压测中运行状态等

  • 压测监控:关注基础监控、业务监控等

  • 紧急处理 :压测中遇到的紧急问题处理如:数据污染、压测标识丢失、集群告警等


5.3 压测后:
  • 压测报告:压测后产生的压测性能分析报告

  • 压测数据清理:将压测数据还原到压测之前,为下次压测作准备

  • 压测复盘:复盘整个压测过程中的问题,提升压测效率

全链路压测性能保障体系建设之路


5.4 难点之一:线上环境如何构造压测流量?

全链路压测需要最大程度的模拟正式业务环境下的流量,我们需要考虑到几个问题,比如请求数据如何构造,以及请求数据的多样化等。

举个例子,我们压测【下单】链路,需要尽可能模拟真实用户的下单情况,比如流量要与真实用户分布类似来自全国各地,以及购买各式各样的商品,还有访问下单的不同渠道,有时候甚至需要考虑用户的终端设备等。目前数列科技ForceCop在构造压测流量主要有两种方式:

  1. 录制回放:收集某个时间段的正常业务数据,然后通过清洗敏感信息,最后加上压测标记去运行,达到最高程度的模拟正式业务场景,确保数据的真实性、多元化,以及场景覆盖的完整性。


5.5 难点之二:如何进行数据隔离?
  1. 流量染色:构造压测流量时,将压测标记加入到压测流量中进行流量染色,比如页面发起的http请求,我们会在http请求的消息头里面加入压测标记。

  2. 压测标记传递当压测流量流经业务链路时,会经过很多事先被植入过压测探针的应用。当压测流量经过这些应用时,会被应用里的探针识别出来,并且会携带这些压测标记继续传递下去。比如压测流量经过Dubbo服务时,探针会把压测标记放到Dubbo的上下文中。

  3. 压测数据存储压测流量最终会持久化到数据库、缓存、消息中间件等,当压测探针识别到压测流量要持久化,就会将压测流量持久化到对应的影子区域。比如数据库会持久化到影子库或者影子表中、消息会写到影子topic中。



全链路压测性能保障体系建设之路


6. 数列全链路压测Forcecop产品优势

1)不需要对系统代码进行改造

因为对市面上主流的中间件都做了兼容支持,业务团队只需要将Agent协助部署到应用系统中,就可以完成全链路的梳理和接入了。

2)压测数据与正式数据的安全隔离

通过给压测流量染色、白名单核验机制、压测试跑,Agent会识别压测流量并对压测流量进行特定逻辑处理,将产生的压测数据存储到影子库表里,从而实现了与正常的业务数据的物理隔离。

全链路压测性能保障体系建设之路3)低性能损耗

据我们以往经验,整套Agent植入后只会占用机器3%~5%的性能资源,而且产品特地设计了开关控制,可以全局控制压测是否需要启动。 在不需要压测时候关闭压测,这样就可以实现几乎0性能损耗。
4)自动梳理链路

应用链路往往复杂而多变,人工梳理费时费力准确度还不高。但准确的链路关系却是全链路压测实施的前提。因此数列全链路压测产品提供自动化的链路梳理功能,自动识别应用入口下的所有链路信息,告别人工梳理链路时代。

全链路压测性能保障体系建设之路


5)智能SLA警示/终止

即使做好万全准备,压测仍不能避免万无一失,数列全链路压测产品提供智能SLA规则,提前设置好预警与终止规则,当压测过程中触发SLA规则时,系统会自动进行警示或立即终止压测,防止造成额外损失。


6)压测报告

压测报告有针对性的对业务活动指标进行描述,如性能警告、请求总数、最大并发数、TPS、平均RT、SA等,对不同的业务活动进行实际与目标值对比,对峰值情况进行说明。绘制压测业务场景的TPS、平均RT、请求成功率实时趋势走向图。


7)可视化控制台

目前控制台的功能(压测自动化)包含压测配置、压测控制、压测实况、压测报告、链路梳理、压测管理、性能监控、性能分析等模块,用户仅通过页面点击即可完成一系列的压测配置,一站式全自助进行性能环境或者生产环境下的全链路压测。



7. 数列已落地的全链路压测方案

目前数列的全链路压测产品Forcecop被运用在申通快递、德邦物流、某985高校、爱库存、广州考试院、coty CRM等多个企业,下面举两个例子、来简要说明实施后的效果。


案例一:某头部物流

双十一前夕对申通的「核心订单平台」和「巴枪系统」系统进行多轮全链路压测,包括链路探活、链路监控和架构治理等自动梳理监控加快了排查的效率,降低业务峰值延迟,发现并解决了系统中的30多个性能问题,如:订单生成错误率过高、订单解析文件堆积和自动分拣系统吞吐量不足等,从而保障了双十一的稳定运行。


案例二:某985高校

疫情期间,据统计该校共开设了700+在线课程,涉及近千个教学班。该校教育平台系统峰值最高qps高达1w+,是平时峰值的100倍左右。分别在三个不同的场景共发现高风险性能问题49个,压测前后成功率从74%提高到100%。这些问题的解决有效的保障了疫情期间单日数百万访问量的系统稳定。


案例三:某头部电商

某电商平台实施全链路压测方案之前,每次日常活动和店庆大促都会遇到系统性能故障,仅2019年11月就出现2次缓存引起的故障,每次数小时。秒杀系统更是研发团队烫手山芋,秒杀上线系统崩溃,推广效果大打折扣。实施生产全链路压测后,研发团队借助这款压测“核武器”有效的对整体系统性能进行压测优化,今年的店庆大促成功抗住活动时的高并发流量,是日常峰值4倍以上。研发负责人反馈“这下心里有底了,喝着茶就能轻松应付店庆大促”


案例四:国内知名某金融科技

据统计,该金融科技公司2019年交易订单金额2.1万亿,面对如此庞大的交易量,整体技术架构面临前所未有的调整。通过在核心系统多条链路接入全链路压测,依靠自动化输出可视化报告分析性能瓶颈进行针对性优化,平台系统峰值TPS提升20%,并能做到持续的系统性能整体管控,目前该公司的业务交易系统能够轻松应对交易洪峰,让客户的支付更加高效、安全


案例五:某省考试院

某省考试院,2019年学生报考系统在报考高峰期间崩溃,影响了教育考试报名工作的进行。后面引入数列生产环境全链路压测解决方案,前后进行4次压力测试,发现了考生报名系统中登录、考生报考、报考确认链路中20多个性能问题,并在链路优化后进行反复压测验证。最终被压测的链路性能表现明显提升,能在高峰时期同时满足10万考生报考的系统性能需求,并且响应时间控制在100ms以内。


关于数列科技

数列科技(http://www.shulie.io/),一家专业的数字化公司,致力于帮助客户实现数字化转型。公司推出全链路压测产品、智能回测测试产品、IT数字化运营管理等数字化运营的专业咨询服务和行业解决方案,共同打造一体化的高可用IT质量保障平台。无需业务系统改造即可在生产环境进行安全压测,帮助客户解决生产环境的性能优化、容量评估、自动性能回归测试与IT团队质量管理协同等难题。目前,已经赢得顺丰快递、浙江大学、爱库存、中移金科、永辉超市、广东考试院等众多领先企业或高校的认可。