高德全链路压测——语料智能化演进之路

背景
高德地图作为日活过亿的国民级出行生活服务平台,承载着海量用户服务的是后台的超大规模集群。从用户角度,如果出问题,影响会很大。3机房异地部署造成线上环境复杂,链路复杂。V y ; [ s = O Q N在这样的条件: y ( b H w S下,如何避免因故障造成用户的伤害,以及在复杂链路E m z J ? `条件下做好容量规划,做好灾备,并在第一时间发现问题,通过量控制和预案演K z , A Z X t @练做应急响应就显得至关重要,而所有的工作都不能等到事情发生之后才做,我们需要有一种验证t 3 p手段来做好提前性能摸底,这就是全链路压测,让真实的量提前到来。

全链路n l * + _ ] p D #压测作为线上服务稳定性保障的重要{ d ( K S 3 c j手段,对高德来说也是非常重要d y O h S h的。高德全链路压测平台TestPG从无到有,在经历过常态化压测后,已基本可以保障高德的所有全链路压测和日常压测,达到了平台初期快速、准确压测和全链路压测的目标。而语料生产(量处理)作为全链y # } Y 3 d { d &路压测的重要环节,本文将对此做重点介绍。

一次全链路压测可简单总结为3步:压测前的流` & t k量处理(也就L f V O C V是生产语料)、压测中确定压力模型启动压测、压测后的结果分析与问题定位。每次全链路压测,压测前的流量处理是整个压测过程中最耗时的一环。过去往往@ E w Z由运维采集日志交给测试同学写脚本处理,耗时相当严重、成本巨大m V U W 0 , r H,且存在请求; u v p S s [ b过期等诸` @ t O 1 I { F g多问题。基于这些问题k r 6 /,高德全链路压测平台TestPG0 h c l前期已规范了高德压` X w # ( R 5 v测的语料格式,统一了高德压测的流量处理流程。但随着高德全链路压? d p & : *测的演进,后续面临两个主要问5 b Q l z U题:

语料生产流程缺乏统一管控。虽然平台前期已规范了语料格式,但各业务只是按! T k O照语料规范处理流量,生产流程缺乏统一、标准化管控,导致语料生产成本依然很大。尤其对于全链路压测来说,语料准备是最耗时的环节。

接口级别的精准控压无法满足需U x Y ~求。高德作为国民级的出行应用,流量受天气、地形、节假日的影响比较大。比如拿驾车导航来说,日常大多都是短距离的驾车导航,而国庆、春节大多都是长距离的驾i | 4 # f w q ?车导航,而长距离的驾车导航对后端算力的要求是非线性F A ; l增加的,甚至w 8 { x h 0 D G是成倍增加。但长短距离的驾车导航对压测平台来说是同一个G N ;接口,而平台目前的精准控压只能做到接口级别,无法模拟接口特征级别的压测。

基于以上两大问题,高德全链路压测团队设立语料智能化w C ( 1 ~专项,重点解? 6 i Q e Q ! $ /决以上相关问题。

解题思路和路径

引流u A v 0 - : * 8标准化
高德的全链路压测彼时已基本拉通大多业务,但还属于一个演进阶段。对于语料处理,主要由各业务自行处理后用来压测,语料处理的来源缺乏统一性,日志、ODPS、流量等处理来源司空见惯。对于语料生产流程的统一管控,我们首先想到的是统一语5 2 _ @ J ? } T J料处理来源,必须选择一个低成本、高效率的方式作为语料生产的输入,而流量录制的方式就很切合。经过调研,发现高德其他业务场景对流量录制也有很大的需求。但高德过去的流量录制方式并不统一,各业务线自行= L ` s &拷贝流量经常会引起线上机器不稳定等问题。所以首先要做的是统一高德的流量录制,标准化引流。

语料生产J 8 T r N平台化
要统H 4 ! S F一管控语料的生产流程,上面已经统一了语料生产的输入,接下来就是如何把流量转化为符合平台规范的语料,把整个转化流程平台化。但对于高] n ) 0 L 1德业务来说,各个业务都有其自& r V ^ 2身的特点,如果让平台为每个业务提供定P _ 7 ! ` R 6制化的处理逻辑成本巨大,再加上平台对各个业务并不是特别熟悉,也很容易出错。而整个语料处理过程也存在一些通用的处理逻辑,所以我们必须提供一种既支持各业务定制化需求,又可以满足平台通用处理逻l } O辑的方案。我F o [ & I ? s们最终选择通过Flink来完成整个流量处理逻辑。

引流已经标准化,业务方只需查看流量的格式内容,编写Flink的UDF(用户自定义函数),处理自身业务定制化的需求即可,而后续通用的语料存储等逻辑可通过Flink的sink插件来完成。这样既可以提供通用处理逻辑,又给业务的特殊需求提供了支持,扩展性# K h _ H h c h良好。

语料智能化
上面已经提到高德这种国民级出行应用受各种环境影e I C响比较大,如何达到接口特征级别的精准控压,是当时面临的又一大难题。平台已具备接口级别的精准控压,只需把接口按a p 8 ^ , = C照特征分类,提供真实流量的特征分布即可。但流量的特征分布是实时变化的,如何提供符合流量高峰的特征分布是语料智能化的最终目标。

要实现语料智能化需要经历3个阶段。第一阶段是流量特征统计。我们需要明确影响流量变化的因素,体现到流量上就是具体的参数分布,具体有哪些参数会随着外界环境的变化而变化。当然这块高德大多业务线都有一些粗略的分析结果,前期可以直接采用,后期就需要有更细粒度的特征分析。

第二阶段是流量特e Q $ ~ r % $ p征提取。有了具体的特征参数后,就需要对特征参数进行提取统计,后续可用来做智能预测9 B + c N Y m。但特征参数的提取到底应该如何去做呢?经过综合分析发现放到语料生产的环节最合适。引流拷贝流量,语料生产环节用来处理流量,在这个环节提取特征参数再好不过了。而整个语料生产扩展性良好,对用} S J户的特殊需求通过UDF完成,整个流量特征提取刚好可以在通用逻辑里面完成。

第三阶段就是智能预测与机器学习。有了特征参数的统计数据,就可以借助往年高德地图国庆或春节的流量特征,加上今年随着业务的流量变化趋C 8 [势,智能预测J # 7 . ~ F + ` M出符合今年国X { C @庆或春节流量特征的数据,做到接口特o T @ ` C F B 5 e征级别的精准压测,做到真正意义上的全链路压测,为高德地图服务的稳定性保驾护航。后续也可以借助机器学习自动发现影响流量变化的特征参数,自动采集K T N U $ ( 1 , Y分析,做到真正意义的语料智能化。

整体方案
高德全链路压测——语料智能化演进之路

整个引流工作将由开发的统一引流平台来完成,引流平台通过引流插件把流量缓存到Kfaka,最终落盘到ODPSV { V。而整个语料生产服务直接对接引流平台,处理来自ODPS的流量即可。

语料生产服务的整体处理过程都由FliL J G ! V C k 0 Lnk来完成。用户只需编写Flink的UDF来完成自己业务线定制化的需求即可。而且整个Flink的UDF支持多参数传递,用户可灵活编写UDF,在执行过程中动态传递相关参数,解决请求过期等问题。

FlinB g k bk sink是由平台开发的一个Flink源表解析插件,主要包括流量的特, s F 8征分析与提取,以及把生产好的语料按照接口命名写入OSS供平台压测使用。目前流量的特征由各业务线自己6 8 h . h A提供,通过在平台添加完成。Flink sink在执行过程中调用平台开放API获取特征数据进行采集,最终上报给平台,平台后续再根据这些数据进行1 p c n q机器学习,智能预测出符合流量高峰的流量特征,供全链路压测使用。

核心功能介绍

Iflow引流平台
基于B k p D上面的问题分析,高德工程效率M G J w V t #团队积极迎接挑战,短短几个月开发了Iflow引流平台,对高德的引流进行了统一管控,具体如下图所示:
高德全链路压测——语料智能化演进之路

Iflow引流平台以任务的方式对高德的引流进行管理。目前采用引流插件的方式进行流量拷贝(后续将支持更多引流方式),流` n E量通过Kafka缓存,最终写入ODPS供大家使用。用户只需要从ODPS提取需要的数据即可。0 4 / $ * 1 ^而启动引流需要F J d J J ( * e相关负责人审批@ ! $ A P u,周知到关联业务,有效的降低了引流引起事故后排查的成本。

TestPG语料智能化
高德全链路压测平台语料智能化主要由3个模块组成:业务线管理、压测名单管理和接S L N M : D / ~ E口比例管理。业务线D S w W Q -管理主要用来管理高b t N }德各个链路的相关数据,包: 8 Y 8括关联引流任务、启动引流、引流记录、语料路Z 4 B P $ e v ]径、压测header管理: ] S C和触发语料生产等功? o ~ O U f t5 ! 6。一条业务线就是一条压测链. J J V路,从引流到语料生产以及语料特征分析等都是在业务线维度完成的。具体如下图所示:
高德全链路压测——语料智能化演进之路

G ` Y U |能介绍

  • 关联引流任务:主要完成和引流平台任务的关联以及配置相关的参数。
  • 启动引流任务:启动引流平台任务,在引流结束后会自动触发语料生产,通过执行用户编写的Flink UDF和平台开发的Flink( # K k { f插件,完成语料的生产和特征参B X 1 R b l数的提取。
  • 语料路径:在每次启动引流触发语料生产后平台会自动生成语料路径,用户可在创建语料的时候自Z _ 5 0主选择。
  • 压测header管理:每条i 9 f d : .业务线都有自身的业务特点,在header上的体现也不同,这里主要用来管理压测http服务发送的header内容A 4 / . Z [ ^
  • 触发语料生产:语料生产有2条途径,一是关联好引流任务启动引流后会自动触发语料生产,包5 6 3括特征参数提取等一! s V Z o V S系列的操作;二是在引流成功后,用户可能对UDF等参数有u K N J Y b 8 -所修改,也可以通过此按钮来触发语料生产。

压测名单管理主要用来管理压测的接口。一个公司开始做压测,业务肯定是需要跟着去适配的,随之而来的就是业务改造,这是一个漫长的f u F r f ~ v过程。为了方便管理,高德全链路压测平台对高德这边的接口进行统一管理。具体如下图所示:
高德全链路压测——语料智能化演进之路

压测名单是在引流过程中自动上报的,引流只要发现未在压测名单的接口就会自动上报压测平台,平台根据关联应用去@ d 0 0 0 & W , Y关联对应的负责人u $ $,并推动确认。如果可压测就确认为压测名单,下次语料生产作为白名单正常引流。如果不能压测就区分为免压接口或待跟进接口。待跟进接口平台后续会以消息通知的形式推动业务线改造,最终达到真正意义的接口覆盖全、链路覆盖全的全链路压测。

接口比例管理前期主要是用来管, a r a K &BI提供的、以及每次全链路压测调整的比较贴近真实情况的接口比例数~ J 8 $ & C f据,作为后续全链C 8 p路压测的一个参考。后期将通过语料生产提取O D i : J T z b .流量特征的统计数据,智能分析预测出符合真实情况的流量比例,供全链路压测直接使用,具体如下图所示:
高德全链路压测——语料智能化演进之路

平台优势

语料平台化生产
整个语料生产对接了引流t z x w H t U {平台,并通过Flink来完成。既支持了业务方定制化的需求,也支持平台通用化的处理逻辑,扩展性良_ o m s F ~ ? F好。通用逻辑通过Flink sink来实现,并加入了流量特征提取等功能,推动了语料智能化的顺利进行。用户只需要学习Flink完成UDF的编写,然后在平台完成相关配置即可。很大程度上提高了语料生产的效率和质量,是语料从格式标准化向生S O _ T z } 3 2产流程标准化的一大飞跃。

语料智能化
平台在整个语料生产的过程中,通过Flink插件完成了特征参数的统计汇总。目前用户只需在平台完成相关特征的配置,平台在语料生产过程中就会分析特征并统计汇总。有了特征参数的统计数据,将有助i y ; Y g | e于平台后续的智能分析与预测,达到接口特征级别的精准控压,最终达到 j o Y D .完全意义的全链路压测。

平台目前已经完成了语料的自动生产5 @ Q 8 0 ( 7,并加入了语料智n n =能化相关的工作。整个压测名单也是通过引流自动上报,Y $ L C I x后续将通过消息通a B A知自动拉通业务线改造解决。接口比例管理模块也已支持接口比例的展示和调整,最终通过语料特征的智能预测,即可生产出符合流量高峰真实特征的语料。这c ; S些都将推动高德全@ S & M k U链路压测智能化的演进。

未来展望
高德全链路压测平台语h 3 R S = c E 0料智能化发展已经有一段时间了,通过大家的不懈努力,语料智能化已完成了语料的自动生产,以及特征参数的汇总和提取,为后续智能化奠定了基础。未来平台将通过机器学习的方式分析学习采集到= # E V j ; 4 = 1的特征数据,根据往年流量高峰的特征情况,加今年流a y : 5 (量的变化趋势预测出符合今年流量高峰的特征情况,做到接口特征级别的精准控压,完全模拟真实流量压测达到真正意义的全链路压测。

此外,平w a k 1台将会借助机器学习自动分析发现影响流量变化的参数,自动提取分析,提高语料生产g , b E B的准确性。

平台也会有置信度评估系统,分别对比u q - Z H真实的流量特征和预测的流量特征,分析产生误差K ? r B _ X的原因,进一步提高预测的精准度,做到完全真实的流K u v 3 s o量生产。后续配合平台的精准压测、压力} c } mo ` p L型和监控等] s [ Y功能d 3 - G达到真正意义的无人化、智能化的全链路压测。