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

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:07854

评论

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

第八周总结

BATJTMD,大厂招聘,都招什么样Java程序员?

小傅哥

Java 互联网 面试 小傅哥 简历

线程池 ThreadPoolExecutor 原理及源码笔记

程序员小航

Java 源码 jdk 线程池 并发

HTTP 前世今生

大导演

HTTP 前端进阶训练营

不可思议,竟然还有人不会查看GC垃圾回收日志?

田维常

垃圾回收 GC

springboot+java+redis 简单实用的搜索栏热搜,个人历史记录,文字过滤

灰尘子

关于mysqldump,这个参数你可能还不知道

Simon

MySQL timestamp

面对大促DevOps怎么做?这里有一份京东11.11 DevOps备战指南

京东智联云开发者

云计算 DevOps 运维自动化

熔断原理与实现Golang版

Kevin Wan

go microservice

架构师训练营第 1 期第 8 周作业

du tiezheng

极客大学架构师训练营

直播预告 | 云原生在CloudQuery中的应用与实践

CloudQuery社区

数据库 sql 容器 云原生 工具软件

数字信封加密

莫问

【涂鸦物联网足迹】涂鸦云平台数据类型和取值约束说明

IoT云工坊

人工智能 云计算 物联网 云平台 数据类型

面试重灾区——Synchronized深度解析

花火

并发编程 synchronized 内存布局 CAS 锁升级

将减少阻力的香蕉法则,运用在软件开发上会产生什么效果?

Philips

敏捷开发 快速开发 企业应用

分布式集群如何实现高效的数据分布

vivo互联网技术

分布式 DHT hash 数据存储

高性能IO模型:为什么单线程Redis能那么快?

小Q

Java redis 学习 架构 面试

SpringBoot中的响应式web应用

程序那些事

spring WebFlux 程序那些事 响应式系统 spring 5

charles的使用方法

Yolanda_trying

重大活动网络攻击面前,京东智联云的攻防之道

京东智联云开发者

云计算 网络安全 云安全

数据库建表、SQL、索引规范

Bruce Duan

MySQL sql 建表 规范

手把手教你撸一个能生成抖音风格动图的gif制作平台

徐小夕

Java css3 GitHub GIF 开源项目

一个数据中台如何算成功了?

薄荷点点

数据中台

usdt支付系统开发方案,币支付交易系统搭建

WX13823153201

详解快速开发平台与工作流通用组件的设计规范

Philips

敏捷开发 快速开发 企业应用

接口测试文件上传(python+requests)

测试人生路

Python 接口测试

《Java程序员修炼之道》.pdf

田维常

京东11.11完美收官!京东智联云以技术服务助力实体经济

京东智联云开发者

云计算 大数据 云安全

极客大学 - 架构师训练营 第九周作业

9527

决策树算法-实战篇

比伯

Java 大数据 编程 架构 算法

架构师第一期作业(第8周)

Cheer

作业

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