共计 4432 个字符,预计需要花费 12 分钟才能阅读完成。
导读
作为国民级出行生存服务平台,高德服务的稳定性不论是平时还是节假日都是至关重要的,服务稳定性一旦出问题,可能影响千万级甚至上亿用户。春节、十一等节假日激增的用户使用量,给高德整体服务的稳定性带来了不小的挑战。每年在大型节假日前咱们都会做整体服务的全链路压测。通过常态化全链路压测我的项目的推动,已具备了月度级别的常态化全链路压测能力,把战前演练提到日常,继续推动稳定性保障建设。
TestPG 压测平台 2018 年 9 月启动,在 2019 年春节第一次撑持高德全链路压测工作,过后前后花了近 2 周的工夫才实现 3 个机房的压测工作。起初成立了常态化全链路压测我的项目,通过对流程的优化以及压测平台技术能力的降级,当初曾经具备了 1 天内实现全国 3 个机房全链路压测的能力。大型节假日的全链路压测周期缩短到了 3 天。
全链路压测的常态化不仅对高德整体服务的稳定性建设起到了推动作用,而且也推动了流程上的优化以及压测平台在技术能力上的改良晋升。具体而言,咱们次要从压测前的语料筹备和压测过程中的压力调控两个方面动手,通过语料平台化生产,标准语料生成流程,对语料生产提效;通过压测过程中对发压能力的精准调控,使咱们可能灵便调整压力模型,从而使其更加靠近于线上真实情况,让全链路压测过程平滑晦涩,效率晋升。本文会重点介绍 TestPG 压测平台在发压能力精准调控方面的建设实际。
压力调控的两个次要问题
下图是现阶段高德全链路压测的一个大抵流程
高德全链路压测波及到接入层的上百个接口,每个压测接口的压测流量须要在链路梳理阶段由运维和相干同学当时预估给定。压测前会在压测场景里对每个接口的流量进行调配,通过流量占比当时配置好,这是咱们全链路压测的压力模型。压测启动之后,会逐渐加压,直到整体压测流量达到预估值,在整个过程中,可能会对当时配置的压力模型一直做出调整,最终使压测流量模型合乎预期的线上流量模型。
高德全链路压测波及的链路比拟长,压测流量流经接入层,服务层最终达到引擎层,有可能呈现理论达到引擎的流量与预估流量之间存在差别。这时候会先进行压测,更新压测场景里的接口压测流量占比配置,而后再启动压测。
在高峰期,压测集群中可能有百十台施压机同时施压,进行压测,更改压测场景里的接口流量占比配置,再启动压测,而后再一次逐渐加压,这样一整套流程会十分耗时而且效率低下,有时只为了更新一两个接口的流量占比配置,不得不把后面的步骤再走一次,导致过多消耗工夫精力。一直起停也使整个过程不连贯,无端拉长了全链路压测周期。
再者,在全链路压测过程中,整体压力是逐渐减少的,多轮加压,每一轮加压后都会监控服务的各项指标来决定是否进一步减少压力。TestPG 压测平台采纳分布式集群施压模式,增压是通过往压测集群里调度新的施压机实现的,这样带来的问题就是,减少压测流量的时候,须要相干人员依据压测时候的单机施压能力大抵估算出须要减少多少机器。因为增减的压力 = 单机施压能力 * n 台施压机,这样的压力调控粒度也是比拟毛糙的。比方要加压 1w qps,单机的施压能力是 3k qps, 那么须要减少 3 台或 4 台施压机,那么理论减少的压力为 9k 或者 1.2w。
最初,也是最重要的,高德业务零碎对接口特征参数(对服务的性能 / 性能有重大影响的接口参数)尤为敏感,比方长短距离导航对后盾服务的算力和资源耗费都是不同,这就提出了更高的要求,咱们须要有能力在全链路压测中对接口的压力调控准确到特征参数级别。
简略总结一下,在压测过程中,针对压力调控,咱们面临两个次要问题,一是压力调控效率低下,二是无奈做到细粒度的精准调控。
实现门路
全链路压测是以实在流量提前对系统进行验证。只有以靠近于线上实在流量的压力模型对系统进行压测,才更能发现可能暗藏的稳定性问题,压测能力更有价值。因为咱们的压力模型是预估给出的,难免会与理论服务预期的流量存在差别。所以压测过程中通过对差别流量做调整,最终使压测流量模型合乎预期的线上流量模型。
既然现阶段压测过程中,压力调整在劫难逃,并且因为其效率低下,曾经影响到了全链路压测的顺利进行,那么就能够以此为抓手,在压力调控能力上做技术改良。首先是解决压力调整效率低下问题,保障全链路压测的晦涩进行,晋升效率。而后联合语料智能化我的项目,实现精准压测,使压测流量(压力模型 + 压测场景)更加靠近于线上实在流量。将来能够进一步摸索,提供丰盛的压力模型以更好地撑持场景化压测的诉求。
接下来会介绍 TestPG 压测平台,在施压能力精准调控建设上的技术计划和落地成绩。
技术计划
TestPG 压测平台采纳分布式集群施压模式,多台施压机构成一个压测集群。平台的整个架构是典型的 master-slaver 构造,压测的时候 master 调度 slaver 进行施压。这样的架构其实非常适合咱们实现压力动静调控的一个主动控制系统。
上图是压力调控零碎的一个形象示意图。
压力调控核心是压力调控零碎的大脑。其次要作用是依据压力调控策略向压测集群中的施压机下发压力调控指令,并且可能依据调控反馈数据,决定进一步的调控策略。
压测集群作为压力调控对象,接管压力调控核心下发的调控指令,并施行具体的压力调控动作。
压测集群与压力调控核心之间存在一个反馈渠道,这样压力调控核心就能够晓得调控的成果,并依据反馈数据,对下一步的调控进行决策。
落地架构
以上是 TestPG 压测平台精准控压建设的一个落地架构示意图。
API Gateway 模块承接用户压力调控指令,并把压力调控指令转发到 Stress Contoller(压力调控核心)。
Stress Controller 是压力调控的大脑,会依据压力调控策略向压测集群中的施压机下发调控指令,并依据反馈数据,决定下一步调控策略。
TestPG 基于 Redis 实现了动静配置缓存。压力调控指令通过动静配置缓存下发到压测集群,更具体来说是下发到压测集群中的每台施压机上,目前 TestPG 采纳两种形式实现动静配置的下发,别离是施压机被动拉取和通过公布订阅模式进行实时推送。
压力调控指令下达到施压机后,压测引擎运行实例会加载压力调控配置,实时调整压力。
每个压测引擎都会实时上报本人到压测指标(比方 qps, rt 等)和施压机的性能指标(比方 cpu 占用率,load 率等)到 TSDB 时序数据库,TSDB 建设了压测集群和压力调控核心之间的反馈渠道。Stress Controller 定期查问 TSDB,获取每台施压机以及整个压测集群的压测指标作为反馈数据,依据这些反馈数据断定单机压力调控胜利与否,整个压测集群压力调控胜利与否,并且会依据反馈数据决策是否进行进一步的调控。
基于以上架构,TestPG 压测平台在精准控压建设上,已实现了集群和接口两个级别的精准调控。
集群压力调控
通过集群压力精准调控,在压测过程中,能够随时指定要压的预期 qps,如果是下调压力,平台会十分快的把压测集群的输入流量,压到指定的预期 qps。如果是上调压力,以后压测集群中的施压机整体输入压力上调后不能达到预期的 qps,零碎会从施压机公共资源池调配肯定数量的施压机进入压测集群,确保在服务容量以内,压测流量可能上调到预期 qps。通过这个性能,压测过程中增减压力,咱们不再须要人工依据单机施压能力估算要增减多少施压机,整个压力调控过程齐全是由零碎主动进行的。集群的整体压力也实现了精准调控,达到平台在压力输入能力上指哪打哪能力。
性能介绍
在压测过程进行中,能够对压测工作预期 qps 进行指定。
压测集群整体压力输入依据指定的预期 qps 实时调整.
接口压力调控
接口级别的压力调控,目前平台曾经落地了接口流量占比动静调整能力,压测过程中能够随时对接口差别流量做调整,实现了在不停压测的状况下对接口流量占比的即时调整能力。该性能对保障全链路压测的顺利进行起到了关键作用,让咱们能够不便高效地对压力模型做调整,使全链路压测得以平滑顺利进行,晋升了全链路压测参加各方的幸福感。
往年十一全链路压测,因为业务增长较快,导致压力预估模型与理论预期有较大出入,通过接口比例动静调整性能,在不停压测的状况下咱们对压力模型进行了近百次调整,保障了全链路压测的晦涩度,保障了全链路压测的顺利进行。
针对于接口特征参数级别的精准调控,咱们的解决方案是:通过语料智能化生产,对接口特征参数提取和统计,能够把压测接口按特征参数散布拆分为多个,联合接口调压能力,最终在接口级别压力调控上,能够进一步实现接口特征参数级别的更精密调控,这对于高德业务零碎的全链路压测来说是十分重要,能够使咱们施行更加精准的压测。
性能介绍
在压测过程中,对压测接口流量占比实时调整。
接口发压流量占比实时调整成果。
总结
通过发压能力精准调控的建设,目前 TestPG 压测平台具备了集群和接口两个级别的高效精准压力调控能力。晋升了全链路压测效率,无效缩短了全链路压测的周期,在全链路压测过程中能够使咱们不便高效地对压力模型做调整,使其更加靠近于线上真实情况。
全链路压测的目标在于验证服务稳定性保障措施是否合乎预期,提前发现服务稳定性问题。压测的真实性至关重要,这里的真实性是指压测的语料数据与线上用户场景相符合,压力模型也要与线上相符合。目前咱们的压力模型是通过计算和预估的形式给出的,往往与线上压力模型存在出入;而压测数据尽管是基于线上流量生产的,但与春节、十一当天的场景还是有差别的。
在真实性保障上,目前 TestPG 压测平台也曾经有了相应的解决方案,那就是语料智能化生产加上精准控压。将来,咱们冀望通过语料智能化我的项目的推动,借助机器学习等伎俩,通过对压力模型,以及用户场景的预测,并联合精准控压技术,让全链路压测的压测流量模型更加靠近于春节、十一等节假日线上真实情况,实现真正意义上的精准压测。
将来思考
精准控压技术,赋予了平台对压力的精准调控能力,解决了全链路压测过程中,压力调控效率低下问题,保障了全链路压测的顺畅度;并且通过对压力模型的不便高效调整,也使得全链路压测的压力模型更加合乎线上真实情况。然而精准控压技术的用武之地不应该局限于此。
将来咱们能够在压测类型上做进一步摸索。目前从 TestPG 压测平台的应用状况大抵来看,日常压测上大家并没有无意识的辨别压测类型。绝大多少状况下大家都是以固定 qps 继续对系统施压。然而,线上零碎面临的实在流量有时候并不是固定,有可能呈现极限尖峰脉冲等状况。平时零碎如果没有压测过这种极限场景,那么线上零碎遇到这种异样流量时就有可能被打挂。
基于精准控压技术,咱们能够在压力模型上做进一步深挖,将来能够在平台上提供多种压测类型反对,比方负载测试、压力测试、零碎容量预估测试等等。并为每种压测类型装备相应的压力模型,比方能够提供负载递增的压力模型,这样能够不便咱们探查零碎容量极限;又比方通过提供极限脉冲压力模型,能够无效测试零碎在遭逢异样流量时候的体现。咱们冀望通过提供丰盛的压测类型反对,把零碎性能的各方面都测到,把零碎压测做全做得更业余。