百度信息流推荐系统智能交付解决方案探索
百度信息流业务QAs团队 稿
导读: 信息流产品为了给大家提供千人千面的内容推荐,后端构建了一个庞大、复杂的推荐系统,整个系统包括上百个模块,上百个策略算法以及模型,并且这个系统以极高速的效率迭代,日均上线近百个需求;这样庞大的系统如何做到这样高速稳定的迭代呢? 这里离不开 PM、RD、QA等各角色共同构建的智能交付系统。
引言
本文主要介绍了百度大规模信息流推荐系统研发、交付效能提升的相关实践。涵盖研发、测试、发布、上线部署各个阶段,通过智能化手段,结合数据和算法,实现效能提升、以及流程智能流转,最终实现全流程的无人值守。
一、背景介绍
信息流产品为了给大家提供千人千面的内容推荐,后端构建了一套庞大、复杂的大规模推荐系统,整个系统包括上百个模块,上百个策略算法以及模型,并且整个系统以极高速的效率不停迭代相关的策略以及架构,日均上线百次;这样庞大的系统如何做到这样高速且稳定的迭代呢?这里离不开PM、RD、QA等各角色共同构建的智能交付系统。
△图表 1:简化推荐系统
智能交付系统覆盖从研发、测试、发布到上线的各个环节,首先要设计一套高效运转的交付模式,并针对当前交付模式各个环节的问题逐个击破:
△图表 2:交付模式示意图
1. 研发及自测阶段: 以微服务化、业务框架&执行引擎为开发者赋能,降低研发成本,提升研发效率,并探索以自主测试为驱动的新研发模式,通过QA提供的优质交付服务、RD自身质量意识和代码可测性的提升,进而实现研发测试一体化(测试能力左移为研发提供服务、可测性改造等;研发右移提供更多的基础架构能力、质量意识提升等)来试点整体效能提升;
2. 测试阶段: 将每个测试行为拆分为测试输入、测试执行、测试分析、测试定位4个子环节,在建立完备的测试体系之后,通过数据和算法,以智能的手段对各个子环节赋能,提升整体的测试效率和召回能力,并释放排查、定位、结果校验分析各处的人力;
3. 发布阶段: 从测试评估角度评估需求是否可以发布上线,满足上线条件的需求智能流转至上线部署阶段,实现流程的无人值守;
4. 上线部署阶段: 从编译优化&部署包裁剪、智能监控、并发动态调整,服务重启优化4个方面,联合OP、EE、RD共同提升上线效率;
5. 底层: 依赖于强大的中台能力,包括配置数据管理、构建中台、策略中台等等中台支撑流水线高效运转。
△图表 3:智能交付系统示意图
二、核心问题&解决方案
2.1 研发&自测阶段--该阶段主要解决研发效率和自测效率问题
2.1.1 业务框架&执行引擎构建
1. 背景
目前,融合层的众多策略&业务逻辑,都比较分散。主要体现在以下几个方面:
- 代码架构: 策略逻辑不内聚,数据依赖分散,缺乏通用性;
- 研发效率: 开发一个调权功能,需要修改n个文件函数,并且每个地方的依赖数据和使用方式可能不尽相同,在开发前需要先熟悉各个位置的代码,开发过程中很容易漏掉某个地方没开发到,研发调试、测试周期被迫延长。
基于上述背景,预期实现一个算子执行框架,其主要目标如下:
- 规范算子接口和数据依赖,提升策略代码通用性和迭代效率;
- 框架对外接口尽可能简单,内部执行实现尽可能轻量。
2. 实现
框架在实现上拆分成了两部分:核心执行+执行策略。如下图:
△图表 4:业务框架&执行引擎设计图
(1) 核心执行
主要功能: 根据给定『执行模式』运行算子。核心细节上包括如下:
- 并发多路&短路执行功能,输入处理数据组织方式支持:流式&随机访问容器;
- 算子支持带状态&无状态模式,实现算子执行的信息采集和反馈。
(2) 执行策略
主要功能: 根据核心执行采集的信息,生成『执行模式』。具体实现逻辑是:采集核心执行每个算子的运行信息,输入执行分析策略模块,生成下一次核心执行的执行模式,核心细节包括如下:
- 独立线程定期分析运行情况,生成运行模式;
- 运行模式更新和使用采用0-1buf减少读取&写入的竞争;
- 执行分析策略模块,采用插件化设计(类似路由iptable),生成运行模式的时候,顺序遍历每一个策略,支持自定义开发不同的执行分析策略模块。
2.1.2 新研发模式试点
1. 背景
所谓自主测试就是RD在研发过程中自行利用优质的测试相关服务进行质量保障,再结合完备有效的自动化能力直接给出可交付结论的研发行为;整体通过建设极致流水线和测试服务能力,引入研发深度参与测试,并结合智能化测试落地,提升整体交付效能。
2. 实现
- 流程变化: 原有提交代码后QA根据本次变更补充相应case,以覆盖变更场景,左移至RD开发环节;
- RD工作: RD在开发需求、策略代码的同时,在QA提供的测试服务能力基础上,通过配置case或者编写自定义校验函数的完成case书写工作,整体case编写成本30min之内;
- QA工作: QA通过建设可配置化模块接入,配置化case添加的自动化测试框架,提供低成本使用的测试服务能力,降低RD case书写成本;并且测试服务能力覆盖包括基础校验、策略校验等90+%核心功能点,流水线覆盖功能、性能、稳定性等P0测试场景,以保障此部分的需求无风险上线。
△图表 5:新研发模式试点
2.2 准入&测试阶段--该阶段主要解决测试效率问题
我们建设了集成『自动化测试』、『性能测试』、『稳定性测试』等各项工程能力的完备流水线作为准入系统。建立了完备的工程能力之后,我们还是遇到了这样的问题:
- 自动化测试能力更多的是做为功能回归能力,如何能够快速覆盖新增功能,提升自主测试呢?
- 性能diff测试产出报告包括上百个指标项,如何分析,如何判断是因为系统原因引起的波动,还是代码变更引起的上涨,降低分析成本呢?
- 包含如此多项能力的准入系统,如何能够更高效运转,提供给RD和QA丝滑般的流水线体验呢?
所以,在智能交付时期,基于前期建设的完备测试能力的基础上,以中台和数据支撑,策略算法赋能,为整个准入系统提质增效,并通过分析、定位、评估智能化,流程智能流转,释放投入人力。
△图表 6:智能化无人值守流水线示意图
2.2.1 测试输入:智能case生成
1. 背景
自动化测试能力更多的是做为功能回归能力,如何能够快速覆盖新增功能,将部分非自主测试项目功能高质高量覆盖,提升自主测试呢?
2. 实现
通过对增量代码的白盒分析结果,结合业务策略,进行测试用例生成,以尽可能覆盖本次新增功能。
△图表 7:智能case生成方案
2.2.2测试执行:智能构建
1. 背景
来自灵魂的拷问,是否针对每个需求,准入阶段所有的任务都需要跑一遍,如果只改了日志类函数等场景,有必要跑那么重的构建?答案肯定是不需要的,但是怎么判断哪些任务是需要跑,哪些任务是可以跳过的呢?
2. 实现
基于智能构建中台能力,结合业务特性,以及白盒分析、历史任务结果等特征,以策略智能决策任务是否需要运行,打破流水线任务机械重复执行的现状,让数据和算法策略代替人来对于流水线任务裁剪进行决策,进而提升流水线运行效能。
△图表 8:智能构建系统
2.2.3 测试分析:性能白盒分析
1. 背景
为了防止速度衰退,性能diff测试已经是测试能力必不可少的一环,工程能力已经完备,但是对于性能测试结果的分析仍然是这其中的耗时耗力的工作:
- 性能测试报告包括上百个指标项,要如何分析呢?
- 系统级长尾耗时波动问题困扰已久,单一阶段耗时的99.9分位值很难判断是否异常,怎么有效的拦截长尾恶化呢?
- 模块级耗时指标异常,如何判断是因为系统原因引起的波动,还是代码变更引起的上涨,降低分析成本呢?
2. 实现
(1)基于dapper的长尾恶化拦截: 基于RD的全局性能分析系统(dapper system),我们已经具备了系统性能的可观测性,将dapper与线下性能测试结合作为数据依据,再加上业务策略算法做决策,我们就具备了长尾恶化拦截的能力。
△图表 9:性能测试白盒分析-长尾拦截
(2)基于白盒代码分析波动消除: 基于dapper耗时日志分析结果,结合函数调用链分析,预估耗时影响,以及增量代码所影响的耗时阶段,对异常波动进行消除矫正
△图表 10:性能测试白盒分析-波动消除
2.2.4 无人值守:流程智能流转
1. 背景
前面介绍的主要集中在研发自测->准入测试各个阶段的效率的提升,效率提升之后,流水线还是需要依赖于人力以及经验进行判断以及流程上的流转,那么这部分的人力,我们是否可以通过数据以及算法来代替人来做决策,让流水线在各个阶段之间更加的丝滑的流转呢?
2. 实现
从需求环节开始,在每个节点,通过质量度模型&风险评估指导流程流转;在阶段的起点,挖掘本次变更引入的风险,以及风险发生的概率,相应的影响,结合风险矩阵进行风险的评估,并在各个阶段终点,综合阶段的数据以及特征,评估风险降级等情况,指导是否可以转入下一阶段,最终给出需求上线的综合风险,实现流程上的无人值守。
2.3 发布&上线部署阶段--该阶段主要提升部署效率
1. 背景
上线部署阶段的效率决定了整个产品能够达到的发布频率的上限,可以降低需求待上线的等待耗时,所以2020年Q3 联合RD、OP、EE针对上线部署环节效率提升做了专项优化。
2. 实现
主要从流程规范、平台优化、工程能力3个维度,部署包裁剪、并发动态调整、重启耗时优化、监控能力智能化等几个方面入手,针对打包、部署、后置检查、人工检查各个阶段做相应的效能优化。
△图表 11:上线部署耗时优化方案以及效果
三、总结&效果
通过研发业务框架&执行引擎、研发测试一体化、智能流水线、流程智能流转,上线效率提升等等一系列的建设,推荐技术方向效能明显提升:50%+的需求实现天级研发测试交付,且线上质量平稳,稳中有升。
- 模式创新: 实现研发测试一体化,RD在研发过程中利用优质的测试相关服务进行质量保障的自主测试模式,自主测试率大幅提升,从而提升需求交付效率;
- 天级交付&吞吐上升: 交付需求400+/周,其中50%+的需求能够天级研发测试交付;
- 人效提升: 通过流水线稳定性提升、自动标注、智能客服等,大大的释放了QA在流水线运维投入的人力;通过测试评估以及流程智能流转,实现部分项目无需QA投入,无人值守,QA人效得到提升;
- 质量平稳: 迭代效率大幅提升的情况下,质量保持平稳,且稳中有升,线上问题数平稳下降