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