第 76 期 - 携程酒店前端 BFF 实践中的能效变革
logoFRONTALK AI/1月8日 16:31/阅读原文

摘要

携程酒店前端 BFF 层在架构迁移与效能提升时面临挑战,本文阐述应对方案,包括 BFF 模式对比、云函数平台助力、前端动态化能力规划等内容

一、BFF 相关概念与背景

1.1 BFF 模式的产生背景

随着互联网和移动设备的发展,用户对应用需求多样化,后端微服务化变革中后端开发人员面临诸多问题,如无法专注于领域模型抽象、难以适应不同 UI 差异等。BFF 模式作为“面向前端的后端服务”被提出,它隔离了领域服务层和前端 UI 层,改变了开发人员的角色分工,使得后端专注于领域服务,BFF 开发人员(可能是前端兼任)与前端紧密合作提供合适的接口和数据结构。

1.2 两种 BFF 模式对比

一码一端

这一模式针对特定客户端提供单体 BFF 应用,如在 Ctrip 小程序端使用过。它能充分控制端差异,独立开发部署,具有快速部署和独立迭代的优点,适合小团队运维和快速上线。但也存在问题,会形成单体巨型应用,架构臃肿,且针对同一产品需求,各端的 BFF 应用内部会重复实现相似视图控制逻辑,不利于提高人效。

// 假设一码一端模式下的 BFF 应用代码结构示例
const bffOneCodeOneEnd = {
    // 包含大量功能逻辑的单体应用结构
    service: {
        list: function() { /*... */ },
        detail: function() { /*... */ },
        fill: function() { /*... */ }
    }
};

一码多端

该模式将预定主流程划分为关键阶段,不同 BFF 提供服务且一个 BFF 能服务多端并处理端的差异性。这样避免了重复开发,提升了研发生产效率,按页面流程维度进行微服务划分使得架构更清晰,迭代更灵活。实践结果表明这种模式更符合微服务职责划分原则,更有利于提高研发人效,当前酒店 BFF 层实践方向主要采用此模式。

二、基于 Nest 的多端架构

2.1 NestJS 框架优势

选择 NestJS 作为酒店 BFF 基础框架进行二次开发。NestJS 是构建 NodeJs 服务器端应用的框架,具有以下优势:

// NestJS 中依赖注入示例
import { Injectable, Inject } from '@nestjs/common';

@Injectable()
class MyService {
    constructor(@Inject('Dependency') private dependency) { }
}

2.2 基于 Nest 的 BFF 服务框架

在 Nest 框架的 IOC 能力基础上构建了专用于“一码多端”的 BFF 服务框架,它有以下作用:

三、云函数平台

3.1 函数能力

轻量化运行时

中间件能力

其他函数能力

3.2 研发流程和函数生态

迭代管理

运维监控和故障诊断

四、前端动态化能力

在 BFF 单体应用多端框架能力基础上,设计了动态业务网关。多端框架处理应用内“接口内逻辑差异”,动态网关层处理“接口间组合差异”,支持跨应用接口组装裁剪、白名单及灰度发布、场景动态能力等。“多端模式” + “动态网关”组合架构模式在应用内和应用间两个层级处理多端视图控制逻辑差异。例如在携程酒店某一级页面技改项目中采用此架构方案,实现多端功能模块收口落地 BFF 层,提高研发能效。

五、One More Thing

“一码一端”到“一码多端”的前端能效变革背景下的 BFF 整体解决方案(应用内多端 + 动态网关 + 云函数能力)除了支持 BFF 合并,还能提供强大的 UI 动态化能力,结合正在研发的跨端组件库,可支持多种用户场景,实现组件跨场景和跨端复用。

 

扩展阅读

Made by 捣鼓键盘的小麦 / © 2025 Front Talk 版权所有