迪卡侬采用后端为前端(BFF)模式赋能前端团队

Decathlon 采用 Backend For Frontend (BFF) 架构模式

Decathlon 作为一家全球零售公司,拥有庞大且复杂的技术平台,结合了面向客户的电子商务平台和许多后台系统。为了应对多个前端应用在微服务架构上的需求,Decathlon 引入了 Backend For Frontend (BFF) 架构模式,并制定了全公司范围内的采用指南。

BFF 架构模式的引入与优势

BFF 模式的核心思想是前端团队拥有并维护一个后端中间件服务,处理特定于其需求的数据编排和聚合。这种新的抽象层带来了以下优势:

  • 更好的关注点分离:BFF 层可以处理数据操作、协议灵活性、安全性和服务器端渲染(SSR)等多种需求。
  • 减少前端复杂度:避免了将数据获取、反规范化和聚合逻辑推入前端应用,降低了前端代码的复杂性,减少了网络使用、JavaScript 包大小和浏览器计算资源。

BFF 模式的挑战与应对策略

尽管 BFF 模式带来了诸多好处,但 Decathlon 也面临一些挑战:

  • 业务逻辑重复或不一致:BFF 层可能会在不同服务之间重复实现业务逻辑,或错误地将业务逻辑放在不合适的层级。为此,Decathlon 成立了架构委员会,定期讨论这些问题,并使用架构决策记录(ADR)来捕获相关决策。
  • 故障容错与优雅降级:为了确保 BFF 服务能够优雅处理错误并避免下游服务过载,团队采用了断路器(Circuit Breaker)和隔离舱(Bulkhead)模式。在出现故障时,BFF 会返回缓存数据或空数据,以实现用户体验的优雅降级。

BFF 的替代方案

Decathlon 也探讨了 BFF 的替代方案,包括:

  • 空中部署(OTA):适用于需要快速更新的场景。
  • HATEOAS 与 HAL:通过超媒体 API 实现客户端与服务器的解耦。
  • 服务器驱动 UI(SDUI):适用于需要动态调整 UI 的场景。这些替代方案各有优缺点,适用于不同类型的前端应用和组织规模。

Decathlon 的经验与挑战

Decathlon 的 Staff Engineer Raphaël Tahar 在接受 InfoQ 采访时分享了公司采用 BFF 模式的经验:

  • 最大挑战:在组织内(数千个项目)建立统一标准,考虑到功能和技术用例的广泛多样性,包括内部用户与客户、浏览器与移动设备、技术组合的复杂性以及团队拓扑结构的差异。
  • BFF 与 GraphQL 的关系:GraphQL 更多是一种查询语言和协议,而非架构模式,它可以与 BFF 模式结合使用,但并非互斥关系。
  • 微前端架构(MFA)的采用:Decathlon 已在使用构建时和运行时的微前端架构,例如基于 Web Components 和 single-spa 框架的技术。

总结

Decathlon 通过引入 BFF 模式,成功解决了前端应用在微服务架构下的复杂需求。尽管面临业务逻辑重复和故障容错等挑战,公司通过架构委员会和 ADR 等机制有效应对。同时,Decathlon 也探索了 BFF 的替代方案,并根据实际需求灵活选择适合的技术架构。

阅读 18
0 条评论