3. EntBFF 架构总览:企业级 BFF 的整体架构分层、与微服务、API Gateway 的关系

企业级 BFF(EntBFF)并非一个孤立的中间层,而是嵌入在微服务架构体系中的关键枢纽。理解 EntBFF 的架构分层及其与上下游组件(API Gateway、微服务)的协作关系,是设计业务接口领域边界的前提。本章从宏观视角拆解 EntBFF 的层次结构,并明确其在整个调用链中的定位。

3.1 整体架构分层

EntBFF 采用四层逻辑架构,从外到内依次为:接入层、编排层、领域聚合层、基础设施层。每一层职责清晰,边界严格,确保业务逻辑不泄露。

层次 核心职责 典型组件/技术 关键约束
接入层 协议适配、认证鉴权、流量控制、请求/响应转换 Spring Cloud Gateway、Kong、自定义 Filter 不包含任何业务逻辑,仅做透传与安全校验
编排层 跨微服务的数据聚合、流程编排、事务补偿 编排引擎、工作流、异步消息 只负责组合,不修改领域数据;无状态
领域聚合层 业务规则校验、领域对象组装、接口语义映射 DDD 聚合根、领域服务、Repository 接口 核心业务逻辑所在,禁止直接依赖外部服务
基础设施层 微服务调用、缓存、数据库、消息队列 Feign Client、Redis、MyBatis、RocketMQ 技术实现细节,对上层提供 SPI 接口
架构原则:每一层只能依赖其直接下层。例如,编排层可以调用领域聚合层,但不能直接调用基础设施层的 Feign Client。这种分层隔离保证了业务逻辑与技术实现的解耦。

3.2 EntBFF 与 API Gateway 的关系

API Gateway 与 EntBFF 在微服务架构中承担不同角色,常被混淆。下表从多个维度进行对比:

对比维度 API Gateway EntBFF
关注点 基础设施与安全 业务编排与领域语义
路由粒度 URL 路径、Header、方法 业务场景、用户角色、设备类型
状态管理 无状态,纯代理 可持有会话状态(如用户上下文)
业务逻辑 禁止包含 核心业务编排与聚合
典型部署 集群边缘,独立部署 业务域内,与微服务同集群
变更频率 低(配置变更为主) 高(随业务需求迭代)

在实际部署中,API Gateway 位于 EntBFF 之前,作为流量的统一入口。Gateway 完成安全校验与路由分发后,将请求转发至对应的 EntBFF 实例。EntBFF 再根据业务场景调用下游微服务。

3.3 EntBFF 与微服务的关系

EntBFF 是微服务的“业务门面”,而非简单的代理。其核心差异在于:

  • 接口语义化:微服务暴露的是资源型接口(如 /orders/{id}),EntBFF 将其转化为业务语义接口(如 /checkout)。
  • 数据聚合:一个 EntBFF 接口可能聚合 3~5 个微服务的数据,并完成字段裁剪、格式转换。
  • 业务规则下沉:EntBFF 的领域聚合层承载了跨微服务的业务规则(如“下单前校验用户信用额度”),这些规则不适合放在微服务内部。
常见误区:不要将 EntBFF 视为“微服务的 API 聚合器”。如果 EntBFF 只是简单调用多个微服务并拼接 JSON,那它退化为一个无价值的透传层。EntBFF 必须包含领域逻辑,才能体现其业务边界价值。

3.4 架构总览图

下图展示了 EntBFF 在微服务架构中的完整位置与内部分层:

EntBFF 架构总览图 EntBFF 架构总览:分层与上下游关系 客户端 API Gateway EntBFF 实例 接入层(协议适配/鉴权) 编排层(聚合/编排) 领域聚合层(业务规则) 基础设施层(Feign/Redis) 订单微服务 用户微服务 支付微服务 库存微服务 说明 • Gateway 负责安全与路由 • EntBFF 负责业务编排 • 微服务提供原子能力

3.5 调用链路示例

以一个典型的“用户下单”场景为例,展示 EntBFF 如何串联各层与微服务:

  1. 客户端请求 → POST /api/v1/orders 到达 API Gateway。
  2. API Gateway 校验 Token、限流,根据路径前缀 /api/v1/orders 路由至 EntBFF 实例。
  3. EntBFF 接入层 解析 Header 中的用户 ID 与设备信息,构建请求上下文。
  4. EntBFF 编排层 调用领域聚合层的 CreateOrderService,该服务内部:
    • 通过基础设施层调用 用户微服务 校验信用额度。
    • 调用 库存微服务 锁定商品库存。
    • 调用 订单微服务 创建订单记录。
    • 调用 支付微服务 生成支付链接。
  5. 领域聚合层 将各微服务返回的数据组装为统一的 OrderCreateResponse 对象。
  6. EntBFF 接入层 将响应序列化为 JSON,返回给客户端。
关键设计点:在上述链路中,EntBFF 的领域聚合层承担了“信用校验”这一业务规则,该规则不属于任何一个微服务的原子能力,而是跨微服务的业务约束。这正是 EntBFF 作为业务接口领域边界的核心价值。

3.6 架构分层与微服务的关系图

下图进一步细化 EntBFF 内部各层与微服务之间的依赖关系,突出“领域聚合层”作为业务规则中心的地位:

EntBFF 分层与微服务依赖关系 EntBFF 分层与微服务依赖关系 接入层 编排层 领域聚合层(业务规则) 基础设施层 订单微服务 用户微服务 支付微服务 库存微服务 依赖规则 • 领域聚合层不直接 依赖微服务 • 所有外部调用通过 基础设施层 SPI

3.7 关键设计原则

  • 单向依赖:EntBFF 内部各层严格单向依赖,避免循环引用。领域聚合层不直接持有 Feign Client 或 RedisTemplate,而是通过基础设施层定义的接口进行调用。
  • 无状态编排:编排层不保存业务状态,所有状态(如用户会话、事务上下文)由领域聚合层管理或透传。
  • 接口契约优先:EntBFF 与微服务之间的接口定义(DTO、Feign 接口)应作为独立契约管理,变更时需同步版本号,避免运行时断裂。
  • 可观测性:每一层都需要输出结构化日志与指标,便于在分布式追踪中定位瓶颈。EntBFF 的调用链跨度通常比普通微服务更长,更需关注。
实践建议:在项目初期,先定义 EntBFF 与微服务之间的接口契约(OpenAPI 或 Protobuf),再分别实现。这能有效避免后期因接口不一致导致的联调返工。