1. BFF 架构概述
1.1 BFF 模式的定义
BFF(Backend For Frontend,服务于前端的后端) 是一种架构模式,由 Sam Newman 与 Phil Calçado 在 2015 年前后提出。其核心思想是:为每一种前端客户端(Web、iOS、Android、小程序等)分别构建一个专属的后端服务,该服务负责聚合下游微服务的数据、裁剪响应字段、适配客户端协议,从而让前端不再直接面对复杂的微服务网络。
关键认知: BFF 不是一种新技术栈,而是一种职责分离的组织方式。它把“前端需要什么数据”的编排逻辑从通用后端中剥离,交给离前端最近的中间层处理。
1.2 BFF 在微服务架构中的位置
在典型的微服务架构中,BFF 位于客户端网关与下游业务微服务之间,充当“中间协调层”。下图展示了 BFF 在整体架构中的位置与交互关系:
从图中可以看出:
- 客户端层:Web、iOS、Android 各自拥有不同的屏幕尺寸、交互逻辑和数据需求。
- BFF 层:每个客户端对应一个专属 BFF,负责调用下游服务并组装响应。
- API Gateway:作为统一入口,处理跨切面关注点(认证、限流、日志),再将请求路由到对应的 BFF。
- 微服务层:业务能力提供者,不感知前端差异。
1.3 BFF 与 API Gateway 的区别
BFF 和 API Gateway 经常被混淆,但它们在职责、粒度、数量和组织方式上有本质区别。下表从多个维度进行对比:
| 对比维度 | BFF(Backend For Frontend) | API Gateway |
|---|---|---|
| 核心职责 | 数据聚合、字段裁剪、协议适配、UI 编排 | 统一入口、路由转发、认证鉴权、限流熔断 |
| 服务粒度 | 细粒度,面向特定客户端(Web / iOS / Android) | 粗粒度,面向所有客户端或外部系统 |
| 部署数量 | 通常与前端客户端数量一致(2~5 个) | 通常全局 1~2 个(主备或分区) |
| 变更频率 | 高,随前端 UI 迭代频繁调整 | 低,基础设施层变更需谨慎 |
| 团队归属 | 前端团队或全栈团队维护 | 中间件或基础设施团队维护 |
| 是否包含业务逻辑 | 包含编排逻辑,但不包含核心业务规则 | 不包含业务逻辑,纯基础设施能力 |
| 典型技术 | Node.js(Express / Koa)、Java(Spring Cloud Gateway 作为 BFF) | Kong、Zuul、Spring Cloud Gateway、Envoy |
实践要点: 在大型微服务架构中,API Gateway 和 BFF 通常分层共存。API Gateway 处理全局横切关注点,BFF 处理前端专属编排。不要试图让 API Gateway 承担 BFF 的职责,否则会导致 Gateway 变得臃肿且难以维护。
1.4 为什么需要 BFF?—— 典型痛点场景
在没有 BFF 的架构中,前端直接调用多个微服务会面临以下问题:
- 网络开销大:一个页面需要 5~8 次 HTTP 调用才能获取完整数据。
- 数据过载:微服务返回的通用模型包含大量前端不需要的字段。
- 协议不匹配:后端使用 gRPC/Thrift,前端需要 REST/GraphQL。
- 认证逻辑分散:每个前端都要重复实现 token 刷新、签名逻辑。
- 变更影响面大:后端接口重构会同时影响所有前端。
引入 BFF 后,上述问题得到有效解决:
- BFF 将多次调用合并为一次,减少网络往返。
- BFF 只返回前端需要的字段,降低传输量。
- BFF 在内部调用 gRPC,对外暴露 REST/JSON。
- BFF 统一处理认证逻辑,前端只需传递 token。
- 后端接口变更时,只需修改 BFF 的适配层,前端无感知。
注意: BFF 不是银弹。引入 BFF 会增加运维节点数量、引入额外的网络延迟(一跳),并且要求团队具备全栈能力。在小型项目或单体应用中,BFF 的收益可能不足以抵消其复杂度。
1.5 BFF 的常见实现模式
根据团队技术栈和场景需求,BFF 通常有以下三种实现模式:
| 模式 | 描述 | 适用场景 | 示例技术 |
|---|---|---|---|
| 纯聚合层 | BFF 只做数据聚合与转发,不包含任何业务逻辑 | 前端团队技术栈以 Node.js 为主,后端微服务成熟 | Node.js + http-proxy-middleware |
| 轻编排层 | BFF 包含简单的条件判断、数据转换、字段裁剪 | 需要为不同客户端定制响应格式 | Express / Koa + axios |
| GraphQL BFF | BFF 暴露 GraphQL 端点,由前端按需查询 | 前端数据需求变化频繁,希望减少接口版本管理 | Apollo Server / Yoga |