百度搜索展现服务重构:进步与优化

作者 | 瞭东

导读

本文将简单介绍搜索展现服务发展过程,以及当前其面临的三大挑战:研发难度高、架构能力欠缺、可复用性低,最后提出核心解决思路和具体落地方案,期望大家能有所收货和借鉴。

全文4736字,预计阅读时间12分钟。

01 背景

百度搜索展现服务的主要职责是请求检索系统获取结果,并依次进行模板选择、实时摘要补充、数据适配和结果渲染,将检索结果能以丰富多样的形式精准地展示给用户。在初期,这项服务基于C语言进行开发,迭代效率不尽人意。随着产品的迅速迭代和业务的不断拓展,研发效率问题逐渐凸显,为了解决这一瓶颈,搜索展现服务进化为由PHP开发、HHVM运行的服务。目前,搜索展现服务由数十个产品线、上百个研发RD共同参与研发,承载了数百个精细化的业务展现策略。然而,随着搜索业务的日益复杂化和生成式大模型的崛起,搜索展现服务也开始面临研发难度增大、架构能力不足和复用性低等多重挑战。具体表现如下:

【研发难度高】:搜索展现服务基于过程管理,逻辑复杂,多个策略框架分布于代码的各个阶段,不能满足多业务对于简化管理、易于扩展的效率诉求

【架构能力欠缺】:hhvm基础设施已经停止维护,对于异步/多线程等功能的支持较为有限,流式能力的缺失使其无法满足生成式搜索等需求,因而不能满足服务稳定性和新产品需求迭代的要求。

【可复用性低】:搜索展现层主要服务与通用搜索、垂类搜索等。目前,通用搜索和垂类搜索之间目前缺乏合理的架构设计,这导致相同的需求在通用搜索和垂类搜索中都需要进行重复的开发。

02 解决方案

2.1 整体设计

2.1.1 核心思路

降低研发难度:根据展现层特点,通过设计实现图管理引擎,将展现功能以算子的粒度进行拆分,单个算子的逻辑简单清晰、业务方把工作聚焦在功能(算子)和需求,而非应用整体,同时将搜索展现服务的过程处理升级为DAG图处理,降低流程管理的复杂度。通过实现算子->图->需求的层次管理,推动搜索展现服务的过程研发模式从面向过程到面向功能、面向业务。

提升架构能力:从PHP+HHVM转型GO,基于百度内部GO开发框架搭建搜索展现服务,获得更好的性能和更高的并发处理能力。同时对于异步/协程/流式交互能力支持成本更低。

提升可复用性:通过抽象公共算子和实施基础Lib共建,提高代码的可复用性和可维护性。公共算子可以在多个搜索展现服务中复用,避免了重复开发和维护的代价。基础Lib可以提供通用的功能和工具类,方便开发人员快速开发和维护代码,减少重复开发和出错的可能性。

图片

△搜索展现层架构图

2.1.2 基础设施

GDP(Go Develop Platform):百度内部基于go实现的业务开发平台,具备完善的RPC Server和RPC Client能力,主要用于API、Web以及后端服务开发。

ExGraph: 百度搜索展现团队自研图执行引擎。

:设计了一套简单的图描述语言,不借助任何工具,rd可轻松学习并据此了解模块执行逻辑的全貌,降低接手难度

算子:设计简单的接口,屏蔽实现细节,rd实现算子接口即可执行

执行:灵活设计了串行组、并行组、子图、条件算子、switch算子、中断、等待等机制,以适配复杂的业务流程

效率工具:实现了代码生成器、脚手架等效率工具,可快速创建应用

Datahold:百度搜索展现团队自研数据管理器,主要解决模块数据(比如配置、字典)依赖和加载问题。具备如下能力:

  • 支持热加载,后台监听并解析变更文件后切换到前台使用;提供通用字典、配置解析器,同时支持自定义文件解析器

  • 支持通过配置完成数据对象自动注册、加载和解析,有效管理大型服务中配置/字典不可丢、解析出错及时报警感知等

  • 支持rd线下环境一键部署模块依赖远程数据,提升研发阶段环境部署效率

公共lib:此外基础设施层还提供了udai(远程数据统一访问cgo扩展)、百度自有签名等等展现团队公共lib,公共Lib建设有统一准入标准,避免重复造轮子,提升研发效率。

2.1.3 公共算子

将搜索展现通用逻辑抽象为接口,基于图引擎提供公共算子,实现一处开发,通用搜索、垂类搜索等多个应用共同使用。目前已经实现抽样、适配、降级、限流、检索请求、落地页点出、渲染等数十个公共算子,开箱即用,快速支持搜索新展现应用搭建。

2.1.4 应用层

通过公共算子、各服务自有展现算子搭建执行图,实现应用业务逻辑。当前搜索展现服务包含通用搜索展现服务、垂类搜索展现服务、生成式搜索展现服务等。

2.2 详细设计

通用搜索相比垂类搜索等业务更具复杂性,本章节将以通用搜索展现服务为例,具体介绍其重构迁移go的落地方案。

图片

_△通用搜索展现服务重构前后对比图

在重构迁移过程中我们主要面临两个难点:

难点1:前文已提到通用搜索展现服务是一个数十个产品线100+RD共同研发的模块,展现策略组1&2&3共有600+业务展现策略,每天平均有4+策略迭代上线,在重构迁移落地过程中,首要解决的问题就是:如何兼容迁移和现有业务迭代效率?如何协同众多业务线迁移?

难点2:搜索展现服务业务逻辑非常复杂,重构项目如何保障用户效果、商业收入和服务稳定性。

对于难点1,主要通过架构业务解耦、平滑迁移机制这两个手段解决;对于难点2将从研发、测试、上线全流程稳定性保障。接下来将详细介绍这两个部分内容。

2.2.1业务解耦&平滑迁移

保障迁移和现有业务迭代效率,并协同多产品线进行业务展现策略迁移核心手段:解耦架构和业务展现逻辑,架构迁移部分先行迁移go,业务展现策略依旧基于php运行,架构逻辑迁移过程中不阻塞业务迭代,尽量避免php&go两个版本同时开发相同的业务逻辑。设计一套机制支持业务展现策略按业务线独立迁移到基于go的搜索展现服务上,并将整个复杂迁移过程拆分成四个阶段有序进行,最终实现整体项目目标。

图片

第一阶段:架构部分图化迁移go+展现策略服务化

将限流、参数处理、检索请求、广告检索请求、http-header渲染等架构逻辑代码基于GDP+Exgraph图化迁移go,基于go的通用搜索展现服务完成检索数据统一处理之后,再请求基于php的展现策略服务进行业务展现逻辑。这样即可以保证迭代相对不频繁的架构逻辑先行迁移go,为后续展现策略迁移做好基础,同时也能保证迭代频繁的展现策略依旧可以按原有研发模式继续迭代。

第二阶段:异步摘要请求全量迁移

首先回答下异步摘要是什么。

检索系统往往为了考虑计算资源和响应速度,会在各个子系统内部设置cache,cache失效时间至少都是分钟级别,部分场景甚至达到天级别。对于部分需要秒级别就能更新的展现元素,比如搜索结果里需要展现视频播放量、文章点赞数量,以及用户是否对这条结果进行点赞等,cache就没有那么友好了。异步摘要因此诞生,检索请求返回之后基于检索结果请求高时效摘要服务,摘要请求是异步完成的,和普通展现策略并发,既实现了实时摘要补充,又避免了用户响应速度的退化。

为了避免随着展现策略逐渐迁移go,异步摘要请求时间可并行时间缩短,引入旁路系统。异步摘要策略数十个,本身迭代相对普通展现策略较不频繁,请求整体一起迁移go,异步摘要请求成功写入旁路系统,执行完所有普通展现策略(无论是迁移到go执行,还是保留在php上执行),基于PHP的策略服务通过旁路系统获取所有异步摘要并执行实时摘要补充。引入旁路系统本身也需要通信开销,通过以下手段降低:

  • 通过边车化实现旁路服务降低远程通信开销

  • 基于go展现服务不对异步摘要进行解析,将原始序列化结果写入到旁路系统,基于php服务获取数据进行解析。可以有效避免go/php展现重复反序列化数据带来开销。

第三阶段:展现策略迁移

协同各个产线线完成展现策略组1、展现策略组2、展现策略组3迁移到基于go的搜索展现服务。该阶段支持产品线按策略粒度、按业务小流量迁移;同时新展现策略(不包括异步摘要策略)可以直接基于go的搜索展现服务开发。

迁移准则:按展现策略有无依赖分类迁移。依赖常见场景:策略执行依赖其他非本业务的展现策略先执行,这种场景必须被依赖策略先迁移;策略内部依赖了架构能力,但这部分能力没有迁移go等。

迁移优先级:

(1)优先迁移无依赖的展现策略,可以独立迁移开发、实验、推全

(2)对于存在依赖的展现策略,协同被依赖方一起完成迁移

第四阶段:全量迁移

整体完成异步摘要策略迁移、渲染、后置任务迁移。

该部分逻辑迭代也相对不频繁,为什么不提前迁移go?

主要限制因素是响应速度。如果将基于php展现策略服务发回给基于go的展现服务,再进行渲染、后置任务,php->go会再增加一次序列化、反序列化以及通信时间,会造成速度退化,这部分速度退化迁移go之后无法带来速度优化弥补抵消。

2.2.2 全流程稳定性保障

通用搜索展现服务重构项目的用户效果、商业收入和服务稳定性主要通过全流程稳定性保障。全流程稳定性主要包含研发、测试、上线稳定性保障。

研发保障

迁移过程不仅仅是简单功能平迁,通用搜索展现服务已经迭代了数十年,本身存在诸多不合理设计,如数据冗余、历史飞线逻辑较多、代码复用低等,我们基于以上问题进行数据治理、飞线包袱清理、重新抽象设计公共算子等。这些对研发质量提出了更高的要求,一方面通过单元测试和自动化流水线测试(数据diff&UI-DIFF,测试保障介绍)保障代码质量,另一方面通过日志打点分析对历史包袱进行提前下线避免不合理、不必要的迁移。

测试保障

功能测试:

数据Diff:协同qa建设自动化数据diff功能,录制线上请求进行回放,将关键数据如检索请求、广告请求、输出给渲染服务的数据等等进行全面自动化例行数据diff,通过数据diff发现潜在问题,累计发现并消除上万数据diff。

UI-Diff: 搜索结果页结果类型众多,比如天气阿拉丁、股票阿拉丁等等,共有上千个资源类型,每种资源类型都有各个的展现模板。效果回归成本高且难度大,根据资源展现量大小作为优先级,利用ui-diff平台(html页面像素级diff)自动挖掘线上query进行基线和策略线自动化ui-diff,重点关注diff差异超过阈值的效果问题,通过这种方式累计发现并修复40+效果类问题。

端到端测试:数据diff&UI-diff这两个自动化测试手段已经能够覆盖绝大多数效果类场景,除此此外,QA对搜索重点场景比如落地页跳转、翻页、广告效果等人工效果测试回归。通过自动化测试+人工效果测试保障重构改造后的展现效果。

稳定性测试: 通过引流线上流量进行长时间压力测试,模拟线上运行环境,保障服务线上稳定性。

性能测试:通过性能火焰图发现系统性能热点并优化点;通用线上实例峰值qps进行性能测试以及极限压测获取服务极限qps,提前预估线上资源容量是否充足,响应数据是否存在退化。

上线保障

上线阶段稳定性保障主要手段包括:上线前资源/响应时间预估等进行稳定性评审、监控&报警、降级、内测、全网小流量等。

03 总结

本文介绍了搜索展现服务发展过程以及当前面临主要挑战:研发难度高、架构能力不足、可复用性低,然后提出基于图执行引擎+公共算子+重构迁移go方式解决上述问题,最后基于通用搜索展现服务详细阐述了方案的落地。本文旨在通过将搜索展现服务重构思考分享给大家,期望大家有所借鉴和收获,当然也可能存在不足之处,也期望大家留言共同探讨。

搜索技术平台研发部正在招募 AI 研发工程师,欢迎感兴趣的同学投递简历至linzecheng@baidu.com

——END——

推荐阅读

百度APP iOS端包体积50M优化实践(七)编译器优化

百度搜索内容HTAP表格存储系统

大模型时代,“人人可AI”的百度开发者平台长什么样?

数十万QPS,百度热点大事件搜索的稳定性保障实践

百度搜索万亿规模特征计算系统实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品入门第四讲:Axure动态面板

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​​​ 🌟在这里,我要推荐给大家我的专栏《Axure》。🎯🎯 🚀无论你是编程小白,还…

17.分割有效信息【2023.12.9】

1.问题描述 有时候我们需要截取字符串以获取有用的信息,比如对于字符串 “日期:2010-10-29”,我们需要截取后面的 10 个字符来获取日期,以便进行进一步分析。编写一个程序,输入一个字符串,然后输出截取后的…

【Spark精讲】Spark Shuffle详解

目录 Shuffle概述 Shuffle执行流程 总体流程 中间文件 ShuffledRDD生成 Stage划分 Task划分 Map端写入(Shuffle Write) Reduce端读取(Shuffle Read) Spark Shuffle演变 SortShuffleManager运行机制 普通运行机制 bypass 运行机制 Tungsten Sort Shuffle 运行机制…

Spark环境搭建和使用方法

目录 一、安装Spark (一)基础环境 (二)安装Python3版本 (三)下载安装Spark (四)配置相关文件 二、在pyspark中运行代码 (一)pyspark命令 &#xff08…

AR眼镜光学方案_AR眼镜整机硬件定制

增强现实(Augmented Reality,AR)技术通过将计算机生成的虚拟物体或其他信息叠加到真实世界中,实现对现实的增强。AR眼镜作为实现AR技术的重要设备,具备虚实结合、实时交互的特点。为了实现透视效果,AR眼镜需要同时显示真实的外部世…

基于vue实现的疫情数据可视化分析及预测系统-计算机毕业设计推荐django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

mac python安装grpcio以及xcode升级权限问题记录

问题1: ERROR: Could not build wheels fol grpcio, which is required to install pyproject.toml-based projects pip3 install --no-cache-dir --force-reinstall -Iv grpcio1.41.0 # (我这里是降级安装的) 问题2: fatal error: ‘stdio.h’ file not found 25 | #include …

案例课7——百度智能客服

1.公司介绍 百度智能客服是百度智能云推出的将AI技术赋能企业客服业务的一揽子解决方案。该方案基于百度世界先进的语音技术、自然语言理解技术、知识图谱等构建完备的一体化产品方案,结合各行业头部客户丰富的运营经验,持续深耕机场服务、电力调度等场…

智能化配电房

智能化配电房是一种集成了先进技术和智能化设备的配电房,通过智能采集终端与通信设备,实时将电气参数、运行信息和环境数据传送至智慧电力物联网平台—电易云,对配电室进行数字化升级,对运维工作数字化升级,建设电力系…

使用Qt制作网易云播放器的歌曲排行界面

!!!直接上图!!! !!!直接上图!!! !!!直接上图!!! 网易云排行榜…

论文润色降重哪个平台好 papergpt

大家好,今天来聊聊论文润色降重哪个平台好,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 标题:论文润色降重哪个平台好――专业、高效、可靠的学术支持 一、引言 在学术研究中&…

机器学习 | 机器学习基础知识

一、机器学习是什么 计算机从数据中学习规律并改善自身进行预测的过程。 二、数据集 1、最常用的公开数据集 2、结构化数据与非结构化数据 三、任务地图 1、分类任务 Classification 已知样本特征判断样本类别二分类、多分类、多标签分类 二分类:垃圾邮件分类、图像…

风速预测(二)基于Pytorch的EMD-LSTM模型

目录 前言 1 风速数据EMD分解与可视化 1.1 导入数据 1.2 EMD分解 2 数据集制作与预处理 2.1 先划分数据集,按照8:2划分训练集和测试集 2.2 设置滑动窗口大小为7,制作数据集 3 基于Pytorch的EMD-LSTM模型预测 3.1 数据加载&#xff0…

QT QIFW Linux下制作软件安装包

一、概述 和windows的操作步骤差不多,我们需要下装linux下的安装程序,然后修改config.xml、installscript.qs和package.xml文件。 QT QIFW Windows下制作安装包(一)-CSDN博客 一、下装QIFW 下装地址:/official_releases/qt-installer-fra…

SpringBoot中日志的使用log4j2

SpringBoot中日志的使用log4j2 1、log4j2介绍 Apache Log4j2 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改 进,同时修复了 Logback 架构中的一些问题,主要有: 异常处理…

Google DeepMind发布Imagen 2文字到图像生成模型;微软在 HuggingFace 上发布了 Phi-2 的模型

🦉 AI新闻 🚀 Google DeepMind发布Imagen 2文字到图像生成模型 摘要:谷歌的Imagen 2是一种先进的文本到图像技术,可以生成与用户提示紧密对齐的高质量、逼真的图像。它通过使用训练数据的自然分布来生成更逼真的图像&#xff0c…

Amazon CodeWhisperer:AI 编程助手

文章作者:prigioni 1. 什么是 Amazon CodeWhisperer? Amazon CodeWhisperer 能够理解以自然语言(英语)编写的注释,并能实时生成多条代码建议,以此提高开发人员生产力。该服务可以直接在集成开发环境&#…

小电流接地系统故障仿真-中性点不接地与经消弧线圈接地仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 中性点不接地 中性点不接地是最简单的一种,接地电流的大小受变电站、所出线的类型和长度影响。在此种方式下发生单相接地故障时,线路与对地电容构成故障回路,故障电流以电…

宠物自助洗护小程序系统

提供给宠物的自助洗澡机, 集恒温清洗、浴液 护毛、吹干、消毒于一体,宠物主人只需用微信小程序源码,即可一键开启洗宠流程。 主要功能: 在线预约 在线支付 洗护记录 会员系统 宠物管理 设备管理 多商户加盟

语音识别功能测试:90%问题,可以通过技术解决

现在市面上的智能电子产品千千万,为了达到人们使用更加方便的目的,很多智能产品都开发了语音识别功能,用来语音唤醒进行交互;另外,各大公司也开发出来了各种智能语音机器人,比如小米公司的“小爱”&#xf…