第 64 期 - 携程酒店前端 BFF 的实践与效能提升
摘要
文章介绍了携程酒店前端 BFF 层在架构迁移和效能提升中面临的挑战与应对方案,包括 BFF 模式对比、云函数平台助力 BFF 研发效能、前端动态化能力规划等内容
一、BFF 实践的背景
- 随着用户需求的多样化和后端微服务化,BFF 模式被提出。传统 API 层由后端维护视图和业务逻辑,BFF 承担视图逻辑,业务逻辑下沉到微服务层。在携程酒店业务 BFF 架构实践中有“一码一端”和“一码多端”两种模式。
// 这里可以看作是对 BFF 相关逻辑的简单示意,假设是 JavaScript 代码
const bffService = {
viewLogic: function() {
// 视图逻辑相关操作
},
callDownstreamService: function() {
// 调用下游服务逻辑
}
};
二、“一码一端”与“一码多端”模式
(一)一码一端
- 针对特定客户端提供单体 BFF 应用,如在 Ctrip 小程序端使用过。其优点是能快速部署、独立迭代,适合小团队运维和快速上线。
- 缺点是会出现单体巨型应用,架构臃肿,且针对同一产品需求各端的 BFF 应用内部会重复开发视图控制逻辑,不利于提高人效。
// 假设这是一码一端模式下 BFF 应用的部分逻辑
const oneCodeOneEndBFF = {
provideAllServices: function() {
// 提供所有服务能力的逻辑
},
handleSingleClient: function() {
// 处理单个客户端相关逻辑
}
};
(二)一码多端
- 将预定主流程划分为若干关键阶段,不同 BFF 提供服务且一个 BFF 能服务多端并处理端的差异性。避免了重复开发,提升研发效率,架构更清晰,迭代更灵活。
- 实践结果表明“一码多端”更符合微服务职责划分原则,当前酒店 BFF 层实践方向主要采用该模式,曾经“一码一端”的 BFF 应用也将向其重构迁移。
// 一码多端模式下可能的 BFF 逻辑示例
const oneCodeMultiEndBFF = {
divideProcess: function() {
// 划分流程逻辑
},
serveMultiEnds: function() {
// 服务多端逻辑
}
};
三、基于 NestJS 的多端架构
- 选择 NestJS 作为酒店 BFF 基础框架二次开发。NestJS 有诸多优势,如强大的模块化和可扩展性、内置依赖注入容器、支持 TypeScript、使用装饰器和元数据反射、支持微服务、提供测试工具、可与其他库集成等。
// NestJS 框架相关代码示例,比如定义一个模块
import { Module } from '@nestjs/common';
@Module({
// 模块相关配置
})
export class HotelBFFModule {}
- 在 Nest 框架的 IOC 能力基础上构建了专用于“一码多端”研发场景的 BFF 服务框架,提供标准开发模板,提高代码可维护性,促使开发者考虑一致性与差异性。
四、多端开发模式降低协作成本
- 为降低“一码多端”迁移过程中的协作成本,提出一种多端开发模式。通过多端策略模式分流不同端的处理逻辑,将接口逻辑内对下游的整体链路横向拆分,减少冲突发生,多个端侧团队可高效协同开发。
// 多端策略模式下接口逻辑拆分示例
const multiEndInterface = {
splitLogic: function() {
// 拆分逻辑操作
},
handleEachEnd: function() {
// 处理每个端逻辑操作
}
};
五、云函数平台
(一)云函数平台概述
- 携程 Node.js 云函数平台已立项四年,具备轻量化运行时、中间件能力等。
- 轻量化运行时体现在基础镜像、业务代码、发布运维三个方面,例如基础镜像更轻量,函数代码结构简化等。
// 云函数平台相关逻辑示例,比如定义一个云函数
exports.handler = async (event) => {
// 云函数处理逻辑
return "result";
};
(二)函数能力
- 包括触发器(如可生成函数 URL,有多种触发器满足不同业务场景)、层管理(打包依赖库成层以减少部署镜像大小等)、弹性扩缩(支持快速弹性伸缩,可按多种指标进行)、版本和流量切换(如蓝绿部署、灰度发布等)、微型实例(最小规格可达 0.125C 和 128MB 内存)、函数场景(有多种基础场景和定制化场景)等。
(三)研发流程和函数生态
- 迭代管理具有研发流程一体化特点,包括研发流程可视化、详细开发引导、更专一的开发体验。
- 运维监控和故障诊断方面,云函数平台提供监控面板,集成 Node.js Astro 监控面板,还有 Docker 化本地开发工具 Mars 等。
六、前端动态化能力
- 在 BFF 单体应用多端框架能力基础上设计了动态业务网关,动态网关层可处理“接口间组合差异”,支持多种能力。
- “多端模式” + “动态网关”组合架构模式在应用内和应用间处理多端视图控制逻辑差异。
七、One More Thing
- 提到了从“一码一端”到“一码多端”的前端能效变革背景下的 BFF 整体解决方案,除支持 BFF 合并外,还能提供强大的 UI 动态化能力,结合跨端组件库可支持多种用户场景,实现组件复用。同时阐述了 BFF 架构提升前端性能、云函数实现 BFF 层优势以及前端性能优化的多方面考虑和持续性能监控优化的重要性。
Made by 捣鼓键盘的小麦 / © 2025 Front Talk 版权所有