点击蓝字,关注我们
01
百度垂搜架构团队为数十个业务线的上百个搜索场景提供全链路的技术支持,经过多年的发展,内部已经沉淀了多个开发者平台\工具,覆盖了检索、展现、策略、离线等多个模块。伴随着众多垂类业务的持续深耕发展,自定义的开发场景和接入需求越来越多,在此过程中出现了以下问题:
02
03
3.1 “一站式”应用中心
经天的目标之一是“统一”,统一整合、收纳存量的各类平台工具,随着各方向能力在平台上的持续扩展,用户势必会面临一个问题:我如何快速找到我所关心的功能?
针对这个问题,我们考虑在产品入口层面使用“千人千面”的方案,不同的用户角色默认初始化不同的导航类目,比如:研发用户展现各类研发、迭代工具的入口,而运营用户展现各类运维报表的快捷导航。用户可以通过收藏置顶等方式,自定义其关心的能力入口。
通过一站式应用中心,我们将各能力入口统一、聚合在了一起,用户可以快速概览目前管理系统提供的所有能力。
△一站式应用中心
3.2 Faas机制
我们通过调研发现百度智能云已经对外提供了函数计算产品CFC,其提供基于事件机制,弹性、高可用、扩展性好、极速响应的云端无服务器计算能力,其支持多种语言及函数触发器,满足多样化的事件触发场景。
经过深入考察后,我们最终选择百度智能云函数计算CFC作为经天FaaS的底层基座,在其上扩展了更全面的面向业务场景的FaaS管理能力。
一方面,由于函数在需要响应事件的容器中运行,因此存在一定的延时(启动容器和runtime的耗时),这被称为”冷启动”。当函数执行完成后,函数容器会保留一段时间,如果另一个事件在此时被触发,则它的响应速度要快得多,这通常被称为”热启动”。热启动和冷启动的耗时差异在于容器和runtime的启动等初始化的过程;
另一方面,函数本身在被调用时,由于无法像常驻内存的应用可以将一些热点数据缓存起来,当函数中存在需要对接上下游应用的情况时,每次调用函数都要去做一些请求BNS(BNS 即 Baidu Naming Service)解析等预处理的工作,造成额外的资源开销和耗时。
由于FaaS实现的是“无服务器”架构,每个函数都是状态无关的,这就导致应用程序状态管理困难,尤其是在需要保存数据或维护状态的应用场景中尤为明显,同时还存在一些逻辑复杂,需要异步处理或常驻内存的场景,纯函数的方案可扩展性有限;
出于对资源有效利用的考虑,CFC的底层限制了函数同步调用时间不能超过5分钟,异步调用(定时触发的方式)不能超过60分钟,一旦超时容器即被销毁。垂搜团队内部目前存在很多长时类型的定时任务,依赖函数的定时触发器无法满足所有需求。
函数首次访问存在冷启的情况,会明显导致响应时间增加,针对热点函数,我们为用户提供了函数预热能力,在平台开启该功能后,经天系统将对函数容器持续保活(至少保有一个活跃的容器),以确保函数每次被触发时都有已就绪的容器,减去容器初始化和runtime准备的时间,从而提升函数整体响应速度。
△某场景下,开启函数预热能力前后访问耗时的对比
多功能API网关(能力扩展)
我们支持可视化配置 “HTTP路由 - 函数” 的映射机制,用户写好函数后,无需编写路由分发逻辑,只需在平台上配置自定义的路径及函数名,即可完成API网关路由的绑定。允许业务配置鉴权中间件,当启用鉴权时,网关会首先完成请求端的内部鉴权,鉴权通过后会将用户信息、参数签名等下发给函数,由函数SDK完成验参等操作。在确保数据安全流转的同时,让研发用户更加聚焦其业务逻辑本身的实现。
同时,针对复杂场景(常驻内存或复杂异步任务),当函数方案无法快速满足时,我们的API网关能力也兼容外部系统的对接,用户可以独立部署运维自己的Server服务,只需按照指定的签名规则,在平台完成路由注册、调试后,即可发布API接口。
经天FaaS机制除了支持常规的HTTP服务场景外,也能满足异步任务需求:
用户可以直接为指定函数配置定时任务,由CFC提供底层调度,不过由于CFC对资源的硬限制,其最大运行时长限制为1小时,适合简易型任务使用。
同时,作为对FaaS能力的补充,我们也自建了一套基于docker容器的定时任务调度机制,业务方仅需将其任务代码及环境打包成docker镜像并推送至镜像仓库,在平台完成简单配置即可。其不受运行时长限制,且能指定专属task agent机器运行,更好地满足了长时型定时任务需求。
3.3 Saas服务产品化
△搜索SaaS服务产品化
在SaaS服务产品化的设计过程中,我们主要围绕两大核心点来设计:
3.3.1 套餐标准化接口
基于上面的思考和设计,我们通过将数据引入、召回、排序、结果组装等服务抽象沉淀为公共产品,再将这些产品以“积木化”的方式拼接组成套餐提供给业务,通过虚拟化的应用管理,对用户隐藏底层的架构实现,以逻辑应用来支持业务调研、请求、配置等接入迭代场景。
在深入调研及实践后,我们制定了SaaS产品套餐的标准接口及调用流程:
3.3.2 初阶动态表单机制
SaaS平台化的建设涉及前端、后端、架构系统侧等多方同学的协作配合,且配置细节又多而繁杂,往往一处配置的改动都会涉及多方协作,协同迭代效率不够理想。
通过 JSON Schema 协议动态渲染表单,是业界比较流行的中后台表单解决方案之一。结合我们的使用场景,我们通过使用标准的 JSON Schema 协议来统一管控套餐的表单配置,建设了套餐市场,允许架构&业务自助对外发布套餐产品,使用 FormRender 及 ant-design UI库,提供了美观、统一的表单展现交互能力。SaaS套餐的研发同学只需按照标准的 JSON Schema 协议即可所见既所得地定制前端表单,极大减少了平台侧研发人力成本的投入。
△用户表单配置可视化设计界面,所见即所得
△套餐配置阶段的动态表单
JSON Schema 协议渲染表单,可以轻松应对常见的 input / select / radio等表单使用场景,但是在实际的开发中,可能会遇到如下的应用场景:
FormRender 内置的控件不能满足全部业务功能需求,我们通过定制自定义组件 widget 来解决这些痛点,widget 是一个普通的 React 组件,它会接收 FormRender 传递给它的一些 props,根据这些 props 我们可以完成控件的受控、联动、校验等操作。在组件定制完成后,用户在 JSON Schema 中描述表单时,仅需使用自定义组件名即可使用其能力:
△自定义组件
通过 JSON Schema 以及搭配自定义widget组件,经天的动态表单渲染能力不仅可以满足SaaS检索产品套餐的可视化表单渲染,还可以满足其他所有平台表单类需求。而表单类需求,在平台化建设过程中的往往占比非常大,灵活地运用表单动态渲染技术,大幅减少了平台侧研发人力的投入。
△检索层-某场景业务配置DAG示例
△展现层-某场景下业务的图引擎配置DAG示例
04
搜索SaaS服务产品化推进以来,我们通过套餐市场已经陆续对外提供了10+套餐,覆盖了文本相关性、向量检索、结构化检索等多个常见业务场景,大幅提升了业务快速接入迭代效率。一些新业务接入的典型场景,可以实现小时级交付完整的搜索服务生产环境。
经天一站式研发平台自上线以来,日均为180+位搜索研发用户提供了各类服务。相比于传统研发模式,FaaS能力使得业务开发成本降低了80%,目前已托管了300+函数,月均调用400w+次,相比传统Server托管的模式,服务器/带宽等运维成本节省了约95%。
目前垂搜内多个平台/工具已经按照经天一站式研发平台的标准进行了重构、收敛、融合,并收获了早期用户的高满意度和良好口碑,验证了经天一站式研发平台实现复杂业务场景降本增效提质的切实可行性。它是一个平台,一套工具,也是一套标准,我们期望打造开放共创的生态,业务和架构同学都可以基于这套标准来沉淀更多的研发能力、应用案例和实践经验等等,而这些可以支撑我们进一步向更高效能、更好体验去迈进,促进多元业务高效率、高质量、低成本地敏捷迭代,为加速业务创新和发展做出更多贡献。
END
推荐阅读