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