百度信息流推荐系统智能交付解决方案探索
百度信息流业务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:上线部署耗时优化方案以及效果
三、总结&效果
通过研发业务框架&执行引擎、研发测试一体化、智能流水线、流程智�
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek/post/%E4%BA%92%E8%81%94%E7%BD%91/%E7%99%BE%E5%BA%A6%E4%BF%A1%E6%81%AF%E6%B5%81%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E6%99%BA%E8%83%BD%E4%BA%A4%E4%BB%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E6%8E%A2%E7%B4%A2/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com