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

2020 年 11 月 16 日

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

背景


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


全链路压测作为线上服务稳定性保障的重要手段,对高德来说也是非常重要的。高德全链路压测平台 TestPG 从无到有,在经历过常态化压测后,已基本可以保障高德的所有全链路压测和日常压测,达到了平台初期快速、准确压测和全链路压测的目标。而语料生产(流量处理)作为全链路压测的重要环节,本文将对此做重点介绍。


相关阅读


高德全链路压测平台TestPG的架构与实践


一次全链路压测可简单总结为 3 步: 压测前的流量处理(也就是生产语料)压测中确定压力模型启动压测压测后的结果分析与问题定位 。每次全链路压测,压测前的流量处理是整个压测过程中最耗时的一环。过去往往由运维采集日志交给测试同学写脚本处理,耗时相当严重、成本巨大,且存在请求过期等诸多问题。基于这些问题,高德全链路压测平台 TestPG 前期已规范了高德压测的语料格式,统一了高德压测的流量处理流程。但随着高德全链路压测的演进,后续面临两个主要问题:


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

  • 接口级别的精准控压无法满足需求。 高德作为国民级的出行应用,流量受天气、地形、节假日的影响比较大。比如拿驾车导航来说,日常大多都是短距离的驾车导航,而国庆、春节大多都是长距离的驾车导航,而长距离的驾车导航对后端算力的要求是非线性增加的,甚至是成倍增加。但长短距离的驾车导航对压测平台来说是同一个接口,而平台目前的精准控压只能做到接口级别,无法模拟接口特征级别的压测。


基于以上两大问题,高德全链路压测团队设立语料智能化专项,重点解决以上相关问题。


解题思路和路径


引流标准化


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


语料生产平台化


要统一管控语料的生产流程,上面已经统一了语料生产的输入,接下来就是如何把流量转化为符合平台规范的语料,把整个转化流程平台化。但对于高德业务来说,各个业务都有其自身的特点,如果让平台为每个业务提供定制化的处理逻辑成本巨大,再加上平台对各个业务并不是特别熟悉,也很容易出错。而整个语料处理过程也存在一些通用的处理逻辑,所以我们必须提供一种既支持各业务定制化需求,又可以满足平台通用处理逻辑的方案。我们最终选择通过 Flink 来完成整个流量处理逻辑。


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


语料智能化


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


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


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


第三阶段就是 智能预测与机器学习 。有了特征参数的统计数据,就可以借助往年高德地图国庆或春节的流量特征,加上今年随着业务的流量变化趋势,智能预测出符合今年国庆或春节流量特征的数据,做到接口特征级别的精准压测,做到真正意义上的全链路压测,为高德地图服务的稳定性保驾护航。后续也可以借助机器学习自动发现影响流量变化的特征参数,自动采集分析,做到真正意义的语料智能化。


整体方案



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


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


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


核心功能介绍


Iflow 引流平台


基于上面的问题分析,高德工程效率团队积极迎接挑战,短短几个月开发了 Iflow 引流平台,对高德的引流进行了统一管控,具体如下图所示:



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


TestPG 语料智能化


高德全链路压测平台语料智能化主要由 3 个模块组成:业务线管理、压测名单管理和接口比例管理。业务线管理主要用来管理高德各个链路的相关数据,包括关联引流任务、启动引流、引流记录、语料路径、压测 header 管理和触发语料生产等功能。一条业务线就是一条压测链路,从引流到语料生产以及语料特征分析等都是在业务线维度完成的。具体如下图所示:



功能介绍:


  • 关联引流任务:主要完成和引流平台任务的关联以及配置相关的参数。

  • 启动引流任务:启动引流平台任务,在引流结束后会自动触发语料生产,通过执行用户编写的Flink UDF和平台开发的Flink插件,完成语料的生产和特征参数的提取。

  • 语料路径:在每次启动引流触发语料生产后平台会自动生成语料路径,用户可在创建语料的时候自主选择。

  • 压测header管理:每条业务线都有自身的业务特点,在header上的体现也不同,这里主要用来管理压测http服务发送的header内容。

  • 触发语料生产:语料生产有2条途径,一是关联好引流任务启动引流后会自动触发语料生产,包括特征参数提取等一系列的操作;二是在引流成功后,用户可能对UDF等参数有所修改,也可以通过此按钮来触发语料生产。


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



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


接口比例管理前期主要是用来管理 BI 提供的、以及每次全链路压测调整的比较贴近真实情况的接口比例数据,作为后续全链路压测的一个参考。后期将通过语料生产提取流量特征的统计数据,智能分析预测出符合真实情况的流量比例,供全链路压测直接使用,具体如下图所示:



平台优势


语料平台化生产


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


语料智能化


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


平台目前已经完成了语料的自动生产,并加入了语料智能化相关的工作。整个压测名单也是通过引流自动上报,后续将通过消息通知自动拉通业务线改造解决。接口比例管理模块也已支持接口比例的展示和调整,最终通过语料特征的智能预测,即可生产出符合流量高峰真实特征的语料。这些都将推动高德全链路压测智能化的演进。


未来展望


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


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


平台也会有置信度评估系统,分别对比真实的流量特征和预测的流量特征,分析产生误差的原因,进一步提高预测的精准度,做到完全真实的流量生产。后续配合平台的精准压测、压力模型和监控等功能达到真正意义的无人化、智能化的全链路压测。


本文转载自公众号高德技术(ID:amap_tech)。


原文链接


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


2020 年 11 月 16 日 14:07748

评论

发布
暂无评论
发现更多内容

Lean UX 教你设计如何驱动产品

Yanel 说敏捷产品

产品 敏捷 设计

工厂模式 (一)简单的工厂模式概念以及示例代码

LSJ

实用贴丨正确的「递归」打开方式:让计算机像计算机一样去计算

博文视点Broadview

Python 递归

技术工作中的颜值

N维空间的尘埃

孩子,我们在睡前一起来阅读 15 分钟的好书,让彼此都带着好的故事入眠。

叶小鍵

正确阅读 托马斯·奥本 Doug Antin 蒂·泰德罗克

已发表的技术文章-大数据方面

绝影-大数据

ARTS week 1

丽子

一文带你彻底厘清 Kubernetes 中的证书工作机制

首富手记

Kubernetes

python实现·十大排序算法之希尔排序(Shell Sort)

南风以南

Python 排序算法 希尔排序

内容比形式更重要

Winann

内容 生活 工作 形式主义

五个“为什么” —— 读《精益创业》

YoungZY

读书笔记

Java开发工具与HelloWorld

编号94530

Java eclipse Hello World ! IDEA 开发工具

怎么控制老板不断加需求?

kimmking

这个名字,你不能再读错了

小天同学

历史 科普

实战 Java8-CompletableFuture

lee

Java 多线程 java8 CompletableFuture

写给产品经理的信(2):产品设计能力怎样进阶

夜来妖

产品 个人成长 产品经理 产品设计 进阶

面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

cxuan

mybatis

有点干货 | Jdk1.8新特性实战篇(41个案例)

小傅哥

函数式接口 Lambda 小傅哥 jdk8 编码

学计算机你后悔了吗?

陈辰

学习 技术 前端

[Git] Git 可以这么学

猴哥一一 cium

git

[GitHub] 跟我一起白嫖 GitHub Pages 做个人站点 ?

猴哥一一 cium

git GitHub GitHub Pages

重新开始,被自己搞砸的生活

小天同学

个人感想 日常思考

要和竞争对手做比较吗?

邓瑞恒Ryan

创业 战略管理

Zabbix实战指南

橙子冰

技术 运维 监控 运维自动化 zabbix

RabbitMQ 集群

云淡风轻

读书笔记 RabbitMQ

Elasticsearch 实战

代码诗人

阿里的OceanBase上天了,但你还不会用Explain看SQL的查询计划吗?

Super~琪琪

MySQL 数据库 后台开发 后端

【转载】如何在团队中做好Code Review?

北纬32°

Flutter的staggered GridView详细使用

潘珉

flutter

Kubectl exec 的工作原理解读

米开朗基杨

Kubernetes kubelet

不要抱怨,也别憋屈

孙苏勇

职场 随笔杂谈

AI如何在普惠金融的探索中发挥作用?

AI如何在普惠金融的探索中发挥作用?

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