作者 | 王兆雄、衷颖杰、刘龙
编辑 | Tina
背 景
在 2021 年下半年,由于业务调整,我们团队在原来已经负责全局搜索服务的基础上,又对接了 i 音乐和 i 主题的搜索服务,在团队人员不变、需求高速迭代、业务规模快速增长的情况下,效能上面临的问题也越发凸显:
总体来看,我们要解决的问题是:如何更快开发迭代——少写或不写代码,更快上手优化——业务流程易理解,更快上线交付——操作简单易实现。
搜索流程分析
三个项目面对的业务场景大相径庭,但也都是搜索相关的业务场景。所以我们对这三个业务流程进行仔细的梳理,并从中发现了一些规律。
全局搜索流程
全局搜索是 vivo 手机重要的内置应用,致力于满足用户信息、服务获取的需求,为用户提供高效、个性、智能的建议、搜索服务,提供一站式的搜索体验。
全局搜索应用界面
全局搜索的具体业务流程如下:
全局搜索处理流程
在上图的多垂类结果召回阶段中,每个垂类的具体处理流程与整体流程基本一致,即也要经过前置处理,数据召回、后置处理等阶段,具体如下:
垂类具体处理流程
i 音乐搜索流程
i 音乐搜索是 vivo 默认的音频播放器 i 音乐 App 内的搜索功能,入口为 App 首页的顶部搜索框,为用户提供便捷的音乐搜索服务。
i 音乐搜索应用界面
总体业务流程如下:
i 音乐搜索流程
i 主题搜索流程
i 主题搜索是 i 主题应用的搜索服务,为用户提供包括主题、铃声、字体、壁纸等资源的搜索。
i 主题搜索应用界面
i 主题搜索流程与前两个类似,具体处理步骤如下:
i 主题搜索流程
平台能力建设
搜索流程抽象
通过分析以上三个不同业务的搜索流程可以发现,虽然它们业务形态千差万别,但是对流程进行抽象后,三个搜索业务的流程基本一致,具体如下:
搜索服务的整体流程
对流程进一步抽象后可以看到,搜索流程具有一般性,即用户发起搜索请求,经过前置处理、数据召回、后置处理后返回搜索结果,搜索上下文在整个过程中负责中间数据结果的传递,具体如下:
搜索服务流程抽象
综上所述,一个搜索流程可以抽象成一个执行计划,每个流程又由许多不同的步骤 (执行阶段) 组成,每个步骤包含不同的业务逻辑 (处理器),具体对应关系如下:
业务功能对应关系
针对开发功能中面临的实际问题,我们的解决思路是:
组件能力实现
通过对业务逻辑进行抽象,我们发现搜索流程和具体步骤都不会涉及到具体的代码逻辑,只是对整体搜索过程进行串联和约束,为此我们开发了搜索平台流程编排功能,并对基础功能进行抽象和封装,形成一个个通用的系统服务组件给不同业务使用,而业务中特有的业务逻辑可以定制开发,这样可以将整个业务逻辑中变与不变的部分区分开来。
平台化后架构图
我们对不同业务的公共能力进行抽象,并封装成公共组件由搜索平台进行管理。在业务对接搜索平台后,业务人员就不再需要关注基础能力的具体实现,而是可以直接在搜索平台中进行配置,从而专注于业务功能的迭代;与此同时,业务人员还可以根据实际需要不断扩充搜索平台的组件类别,提升组件能力,并提供给其他业务使用。业务和平台之间相辅相成,业务促进平台能力的提升,平台也能进一步赋能业务的发展。
针对于不同业务场景中存在的相同逻辑功能,我们参考了低代码平台的实现思路,将通用功能封装成公共组件,开发人员通过页面拖拽配置组件实现通用的功能,少量代码即可完成业务功能扩展,从而实现便捷构建搜索流程。使用者可以通过页面可视化配置的方式对整个搜索流程进行组装,从而满足不同的业务需求。
通过对已有业务能力以及一般搜索业务流程逻辑进行梳理,我们总结了 3 大类 8 个小类的公共组件模块,具体如下:
公共组件模块
以上组件基本涵盖了搜索全流程的各个环节,业务开发人员在日常迭代过程中可以直接使用组件库中提供的组件模块进行可视化开发,如果不能满足需求,可以自行进行扩展。同时我们也定义了一套标准规范,所有内置的公共组件都按照这套规范进行开发,业务人员也可以按照这套规划开发自己的组件并共享到组件库中,而组件又是可以插拔的,业务之间都可以方便的拿来复用。
搜索链路监控
搜索服务涉及的垂类业务多,调用链路长,不仅包括团队自身维护的业务垂类,还包括算法团队、图谱团队等,当线上业务出现问题或者搜索结果出现 badcase 时,往往只能通过日志信息进行排查。这样不仅需要有详细完整的日志信息,而且要求开发人员能够熟悉整个业务流程才能快速对问题进行定位。在调用链路还比较短、业务功能还比较单一的时候,这种方式还是能够比较有效的帮助我们对问题进行定位和排查。但是随着业务的快速发展以及用户数量的快速增长,日志信息的规模也呈现指数级别的增长,这样会给日志采集系统带来极大的压力。此外,日志信息往往不能直观的展示服务中的具体问题,往往需要对应功能模块的开发同学进一步进行判断和定位,从而极大提高了问题的解决成本。因此,我们团队对业界已有的服务全链路监控工具进行调研,最后选择 SkyWalking 作为搜索服务的链路监控工具。
SkyWalking 是一款优秀的 APM 工具,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。在实际使用过程中,由于搜索服务每天的请求量较大,我们并不是直接使用 SkyWalking 对每个请求的完整调用链路数据进行监控,这样每天会产生几十 TB 的监控数据,而且绝大部分都是无用的,而是对某个调试请求接口进行监控。当线上环境出现搜索结果异常或者其他问题时,可以直接通过请求该接口进行问题复现,然后通过 SkyWalking 对整个调用链路的请求和访问数据进行收集监控,并通过 SkyWalking 的可视化界面对问题快速定位。
SkyWalking 监控流程图
监控流程如下:
落地实践与成果
目前我们已经将全局搜索一部分业务接入搜索平台,并将逐步对接 i 主题和 i 音乐搜索业务,且已经初见成效:
总结与展望
通过对全局搜索、i 音乐搜索、i 主题搜索三个业务场景的分析和搜索流程的抽象,我们一步步推进项目架构的迭代和创新,打造能力复用的搜索平台为业务开发降本增效。
未来,我们将进一步丰富和完善组件库资源,降低业务开发成本;深化平台能力,在准确性、稳定性、易用性等方面持续进行提升;优化用户使用体验,完善平台运营机制,不断提升产研迭代效率,更好的为业务赋能。
作者介绍:
王兆雄、衷颖杰、刘龙,vivo AI 架构工程师,来自 vivo AI 研究院推荐工程组深圳团队。
团队介绍:
vivo AI 推荐工程组深圳团队,长期招聘 AI 架构工程师 / 技术专家,负责搜索、推荐业务多个方向的系统研发工作,坐标深圳。欢迎感兴趣的同学加入我们。可投简历至:zhaoxion.wang@vivo.com(邮件主题请注明:vivo 推荐工程组深圳团队)
活动推荐
如果你想了解更多研发效能的话题,欢迎关注将于 10 月 30-11 月 1 日举办的 QCon 全球软件开发大会(2022)北京站。会议策划了【研发效能提升】专题,由华为云 DevSecOps 生态专家徐毅出品,目前已邀请来自字节、美团、京东、OPPO、金山办公、德邦快递、华泰证券等公司的一线专家进行演讲分享,共同挖掘切实有效的研发效能提升之道并进行探讨。除此之外, QCon 北京站还将有一线大咖分享 100+ 精彩演讲,不容错过,点击底部【阅读原文】直达大会官网查看日程。
团队购票可享更多优惠,购票请咨询:15600537884(微信同电话)