全链路压测性能保障体系建设之路
Posted 软件质量报道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全链路压测性能保障体系建设之路相关的知识,希望对你有一定的参考价值。
日前杭州数列科技资深技术专家高金受邀软件质量效能社区(Q&E Meetup online)分享关于全链路压测性能保障体系建设,以下文字是对本场直播内容的记录。
2020年互联网面临新的机遇,但也出现了新的挑战。线上业务量增大,业务的复杂性也随之增加,传统压测工具无法满足日益增长的业务量,越来越多企业趋向于构建分布式架构。但由于分布式架构体系上的应用服务具有数量多、规模大、环境复杂等特点,这就导致其线上稳定性问题更难被快速发现及定位,即使好不容易将问题找到,单一的工具或系统也难以快速解决。
准确探知系统承载能力,防止刚上线被用户流量冲垮。新系统上线一般会遇到以下两个问题:
新系统能够支持多大的并发流量访问,是否需要增加机器来满足用户流量
新系统性能是否满足预期,是否影响用户体验。
流量激增情况下,比如像双十一这样的大促,系统如果没有做好相关的准备,很容易被用户流量冲垮,导致公司业务受损,目前业内普遍通过全链路压测提前模拟流量激增场景,来增强系统的承载能力。
成本优化,对系统进行精细化的容量规划。无论是新系统上线还是大促场景,都会遇到容量规划的问题,目前容量规划更多是结合平常系统性能表现以及预计用户流量按照经验去规划,但这种规划一般无法做到精准容量评估,一种是评估多了,造成机器浪费,一种是评估少了造成线上故障,对业务造成影响。
探测系统的可用性,提升系统的整体服务能力和吞吐量。全链路压测另外一个典型用场景就是通过模拟真实的用户流量压力,去探知系统的性能瓶颈,从而提升系统的整体服务能力和吞吐量,提升用户体验。
避免公司业务和声誉因为技术故障受到损失,为技术团队赢得业务团队的尊重。
帮助公司用最低的成本满足业务的性能要求
系统重构是IT部门场景的技术更新的方法,每次上线都需要经历一段阵痛期,期间性能问题、业务故障频发,用户投诉频繁。通过全链路压测可以在正式切换前完全解决性能问题;配合自动化的用例梳理和人工验证,可以极大程度降低业务故障。两者配合使用,可以快速的渡过不稳定期,提升用户体验。
常见的监控体系通过一些间接的指标来判断是否有故障发生(比如通过CPU利用率、内存使用率、应用的错误日志数量、业务单量和基线的对比等等方式),间接的方式会产生大量的误报,造成告警麻痹症,真的故障发生后不一定能第一时间引起重视。
很多公司都有运动式或者故障驱动的性能优化经历,比如马上要双十一,总监牵头开始性能优化;有人管的时候性能表现很好,一旦没人牵头做性能优化的事情,又会有很多性能问题被暴露出来。这样的方式通过优化效率很低,投入还大。
自动化的全链路压测可以日常化的排查性能瓶颈,通过工单将问题直达负责人,极大的提升性能优化的效率,将性能问题控制在萌芽状态。
2013年阿里云提出了通过影子表、影子库等技术来实现全链路压测的概念,对集团的所有的中间件、核心应用针对性的做了改造,使其具备支撑全链路压测的能力。影子表能力可以让压测产生的写入数据全部都隔离到其他区域,不影响生产数据,应用升级中间件后就自动具备了这个能力。为了解决商业压测工具不能提供超大瞬间流量的问题,阿里自研了压测流量产品,通过分布在全国各地的CDN机器,同时发起超大并发流量,对集团内部应用进行全链路压测。通过模拟双十一相同的生产集群、流量模型、流量规模的方案,来提前验证系统是否具备支撑双十一的高压能力,从而保障了阿里双十一的稳定运行。
理想情况下,如果测试环境想跟线上环境完全一致,软硬件都一致,是可以做到的。但是为了保持完全一致,机器成本、维护成本、数据同步都需要大量的支出,所以这也要根据公司情况来衡量。如果用线上环境直接做压测的话就不需要机器与维护成本了,但是难点在于对技术的要求比较高。
环境问题:生产环境与性能测试环境,单机配置与节点配置差异较大,导致最终结果会产生偏移;适合性能环境的中间件、JVM、web容器配置不一定适合生产环境。
数据流向问题:单个场景与混合场景测试,数据流会形成断层,不具备流转性,压测数据模型不够完善。
真实性问题:性能测试环境压测,硬件配置差异、数据差异、中间件配置差异,最终导致流量预估与压测结果的偏移,不够贴近真实。
成本问题:多个系统性能测试环境占用的硬件资源较大,若实现生产压测,可有效释放对应硬件资源。
先说一下大概的一个流程,从准备阶段到开展部署实施到最后的上线。然后,拿其中的两个难点作为案例给大家重点介绍一下。
压测范围:明确压测目标、梳理压测链路
业务系统改造:业务系统接入压测探针进行压测改造
压测方案:制定整个压测计划、压测数据构造、压测流程、紧急预案、监控指标等
压测管理:压测相关配置,如:压测任务、施压配置、SLA配置、压测指标配置等
压测验证:验证压测是否按照预期正常运行
压测实施:执行压测任务、观察压测中运行状态等
压测监控:关注基础监控、业务监控等
紧急处理 :压测中遇到的紧急问题处理如:数据污染、压测标识丢失、集群告警等
压测报告:压测后产生的压测性能分析报告
压测数据清理:将压测数据还原到压测之前,为下次压测作准备
压测复盘:复盘整个压测过程中的问题,提升压测效率
全链路压测需要最大程度的模拟正式业务环境下的流量,我们需要考虑到几个问题,比如请求数据如何构造,以及请求数据的多样化等。
举个例子,我们压测【下单】链路,需要尽可能模拟真实用户的下单情况,比如流量要与真实用户分布类似来自全国各地,以及购买各式各样的商品,还有访问下单的不同渠道,有时候甚至需要考虑用户的终端设备等。目前数列科技ForceCop在构造压测流量主要有两种方式:
录制回放:收集某个时间段的正常业务数据,然后通过清洗敏感信息,最后加上压测标记去运行,达到最高程度的模拟正式业务场景,确保数据的真实性、多元化,以及场景覆盖的完整性。
流量染色:构造压测流量时,将压测标记加入到压测流量中进行流量染色,比如页面发起的http请求,我们会在http请求的消息头里面加入压测标记。
压测标记传递:当压测流量流经业务链路时,会经过很多事先被植入过压测探针的应用。当压测流量经过这些应用时,会被应用里的探针识别出来,并且会携带这些压测标记继续传递下去。比如压测流量经过Dubbo服务时,探针会把压测标记放到Dubbo的上下文中。
压测数据存储:压测流量最终会持久化到数据库、缓存、消息中间件等,当压测探针识别到压测流量要持久化,就会将压测流量持久化到对应的影子区域。比如数据库会持久化到影子库或者影子表中、消息会写到影子topic中。
因为对市面上主流的中间件都做了兼容支持,业务团队只需要将Agent协助部署到应用系统中,就可以完成全链路的梳理和接入了。
通过给压测流量染色、白名单核验机制、压测试跑,Agent会识别压测流量并对压测流量进行特定逻辑处理,将产生的压测数据存储到影子库表里,从而实现了与正常的业务数据的物理隔离。
3)低性能损耗
应用链路往往复杂而多变,人工梳理费时费力准确度还不高。但准确的链路关系却是全链路压测实施的前提。因此数列全链路压测产品提供自动化的链路梳理功能,自动识别应用入口下的所有链路信息,告别人工梳理链路时代。
即使做好万全准备,压测仍不能避免万无一失,数列全链路压测产品提供智能SLA规则,提前设置好预警与终止规则,当压测过程中触发SLA规则时,系统会自动进行警示或立即终止压测,防止造成额外损失。
压测报告有针对性的对业务活动指标进行描述,如性能警告、请求总数、最大并发数、TPS、平均RT、SA等,对不同的业务活动进行实际与目标值对比,对峰值情况进行说明。绘制压测业务场景的TPS、平均RT、请求成功率实时趋势走向图。
目前控制台的功能(压测自动化)包含压测配置、压测控制、压测实况、压测报告、链路梳理、压测管理、性能监控、性能分析等模块,用户仅通过页面点击即可完成一系列的压测配置,一站式全自助进行性能环境或者生产环境下的全链路压测。
目前数列的全链路压测产品Forcecop被运用在申通快递、德邦物流、某985高校、爱库存、广州考试院、coty CRM等多个企业,下面举两个例子、来简要说明实施后的效果。
双十一前夕对申通的「核心订单平台」和「巴枪系统」系统进行多轮全链路压测,包括链路探活、链路监控和架构治理等自动梳理监控加快了排查的效率,降低业务峰值延迟,发现并解决了系统中的30多个性能问题,如:订单生成错误率过高、订单解析文件堆积和自动分拣系统吞吐量不足等,从而保障了双十一的稳定运行。
疫情期间,据统计该校共开设了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团队质量管理协同等难题。目前,已经赢得顺丰快递、浙江大学、爱库存、中移金科、永辉超市、广东考试院等众多领先企业或高校的认可。
以上是关于全链路压测性能保障体系建设之路的主要内容,如果未能解决你的问题,请参考以下文章