5f79261ef2bce8df758640b6c51e6382.png

背景

看到了一篇百度搜索中台的FaaS化建设的文章,对于业务研发团队想自研Serverless有一定参考作用。

同时还提到了智能化扩缩容的问题,但感觉不需要这么复杂,和公司K8S平台聊下,调用相关弹性API就可以了,所以这里就删掉了。

搜索中台的特点

搜索中台内容计算架构支持了数十个业务线上百个检索场景,每个场景多有一定的差异性,之前这些差异性都是由业务同学自定义脚本开发独立上线。

但这些脚本存在开发成本高、维护成本高的情况,于是引入了业务框架+服务平台,实现了业务独立开发、自动部署上线,同时代码库可以复用,一定程度上解决了开发成本和维护成本的问题。

问题

目前系统架构仍存在以下问题:

  1. 学习成本大:业务框架做了抽象,业务要上手开发需要学习完整的接入规范、开发规范,但有些场景学习成本远大于上线接入成本,随着简单场景越来越多,学习成本就变成了需要解决的问题;

  2. 资源成本高:很多业务都有潮汐特征,就是每天只有一小段时间有内容计算需求,其他时间的资源存在巨大的浪费;

  3. 维护成本高:搜索自身具有一定复杂性,出现问题后排查困难,需要找到有经验的同学,进一步导致了系统维护成本高;

随着业务接入的越来越多、业务迭代越来越频繁、业务数据量越来越大,如何通过技术手段,实现开发成本、资源成本、维护成本的降低是需要解决的问题。

思路

虽然业务开发的功能千差万别,但总会有很多共性的地方。对于业务上需要定制的逻辑,可以转换成一个个的函数。共性的部分可以抽象成通用组件。通过函数的编排和组件的复用,可以乐高式的搭建出适合业务搜索与计算的系统。

业务同学可以完全聚焦于业务逻辑,减少对于高可用、高并发、高扩展这些关注,极大简化了业务开发接入成本。

由于业务流量具有明显的波峰波谷特点,深入业务层的智能化调度可以提升业务流量峰值时的扩展能力,对资源调度实现充分利用,节约了资源成本。对于复杂业务系统下的排查与恢复,可以借助于智能化手段,实时发现、分析、定位问题,使得整个系统更加稳定。

总结来说:

  1. 通过FaaS化建设,让业务从聚焦于服务粒度的研发转变为聚焦于函数粒度的研发,全面提升了业务的开发效率,实现了全系统全流程整体的业务效率提升;

  2. 通过智能化建设,让系统的容量基于流量动态调整,可以在追求更低资源成本的同时,追求更高的质量。智能化建设包括从零到一极致化的智能伸缩调度,还包括系统的多维度实时状态信息的分析与自愈;

效率提升

业务研发人员聚焦内容的变化:聚焦服务 -> 聚焦函数。

传统的研发需要关注服务、组件、数据、运行时环境等信息,函数时代只需要关注Function的表示,其他的(组件、数据、运行时环境)都不需要关注。

486edd2aa9e61420dc18dcb8a3013f9c.png

为实现业务研发全流程的提效,FaaS化建设包含两部分:

  1. 核心框架(FaaS本身);

  2. 业务全流程系统建设;

核心框架

核心框架是FaaS化建设的基石,对业务来说包含两部分:

  1. 极致抽象的业务框架:是核心框架的基础,提供新的开发范式同时,为后续的智能调度提供基础;

  2. 高度复用的基础框架:强大丰富的后端服务能力封装,支持业务低成本复用,降低开发成本同时提升稳定性。同时系统提供强大的编排能力,低成本支持业务从简单到复杂演进;

FaaS框架

业务框架是FaaS层代码和业务代码的载体,框架本身维护数据流语义,面向DAG的数据流,调用业务函数代码。

c5e1c8ec87be989144cdadb0e584a071.png

业务侧使用开发成本低的语言进行开发(如Python),基础框架通过C++实现,架构层面的优化策略达到服务性能和开发成本的平衡。

框架能力包括:

  • 流式计算框架:支持基础流式计算数据流语义、支持拓扑函数的编排描述,为整个FaaS提供坚实的基础底座;

  • 数据预处理:协议解析、性能优化、数据观测;

  • 进程管理&服务管理:进程管理(负责启动、维护、销毁整个子进程)、服务管理(负责初始化并维护远端RPC的client,修改超时、重试、拒绝策略等);

  • 进程同学异步数据分发:数据不丢、异常健全、下游竞争消费;

  • 业务逻辑处理:包括校验、解析、函数调用、本地优化加速几部分;

  • 数据提交:执行完后会统一推送到本地输出队列,本地队列里面信息会异步提交到远端消息队列给到后面算子消费;

高度复用的基础服务

所有基础服务的目标是通过简单配置、少量代码的方式进行服务接入。

  1. 架构通用能力:业务独有的通用能力;

  2. 基础能力:公司的各种中间件;

被封装为BaaS服务特点有两个:

  1. 简单稳定;

  2. 充分集成公司内优秀能力;

用户通过SDK调用、复用现有能力。

全流程效率提升

让业务研发聚焦于业务逻辑提升全局效率,不仅仅包括代码的开发阶段,还包括从接入、开发、调试、上线等全流程阶段,因此需要做全流程的优化提升。

  • 快速接入:权限申请流程简化;

  • 急速开发:平台完善函数内容,基于函数模板快速开发,多种函数模板,多种开发方式;

  • 快速调试:研发可以在线下环境一体化调试;

  • 问题定位:监控报警、日志;

智能化调度

通过FaaS化建设,业务全流程服务效率问题得到了巨大的改善,智能化调度则是要解决资源浪费、利用率提升的问题了。

  1. 智能化资源调度方案,节约用户资源成本,做到按需使用,有效处理流量洪峰,提高系统稳定性;

  2. 通过智能化有效处理异常问题,做到问题自动感知,快速定位、处理,降低了人力成本;

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐