百度搜索中台新一代内容架构:FaaS化和智能化实战
流式计算框架: 我这边是直接基于百度StreamCompute流式计算框架开发,该框架原生支持基础流式计算数据流语义、支持拓扑函数的编排描述,为整个FaaS提供坚实的基础底座。大家实际使用过程中可以选取合适的流式计算框架开发。数据预处理: 这里包含的功能比较多,从大体上协议解析、性能优化和数据观测等三个方面的工作- 协议解析: 这里主要说明的框架的基础通信协议的定义解析,为了各业务数据通用性定义为 入参 和 出参均为原始字符串;
- 性能优化: 接入数据流框架本身,通过批量顺序读写、数据压缩的方式提高数据穿入过程中的服务吞吐;
- 数据观测: 进行基础指标汇报包括QPS、延时、内部队列等一系列信息,和异步的Trace信息(进入到Kafka中)。
进程管理&服务管理: 并不在数据的主通道上,主要是应对整个容器内部进程和服务的管理。- 进程管理: 伴生服务,负责启动、维护、销毁整个子进程的生命周期。
- 服务管理: 伴生服务,负责初始化并且维护远端的rpc 的client,修改访问参数,如超时、重试、下游访问策略等。负责新进程的创建、回收,以及进程间交互信息的维护。
进程通信异步数据分发: 这里有三个关键点: 数据不丢 、异常健全 和支持下游竞争消费。调研了包括数据管道通信、共享内存、系统队列和RPC等操作方式,考虑到稳定性、扩展性和实现成本等因素选择基于Baidu-RPC框架实现进程异步数据分发;- 单进程模式: 当进程个数为1的时候则跳过进程通信,直接在本进程内部进行方法调用;
- 多进程模式:每个进程完全独立启动,业务视角隔离,但是公用一套业务代码环境。子进程处理完成后将请求结果反馈给父进程。
业务逻辑处理: 主要包括校验解析&函数调用&本地优化加速几部分,如上图左边就是业务逻辑处理的展开图。- 解析&校验&优化: 每个线程内会进行参数解析协议校验,为了方便老业务迁移,支持多用户协议解析,线程并发优化;
- 执行引擎: 函数接口是真正函数调用地方,支持不同语言的调用引擎。eg: 如果业务使用Python,使用pybind。
数据提交: 执行完成后会统一推送到本地输出队列,本地队列里面的信息会异步提交到远端的消息队列里面给后续算子消费。