前端后端 (BFF) 模式:微服务

技术 · 04-05

在当今设备多样化、应用复杂的世界里,构建高效且用户友好的用户体验至关重要。微服务架构的兴起为后端开发带来了诸多好处,但也为需要与多个后端服务交互的前端应用程序带来了挑战。这就是后端前端 (BFF) 模式的用武之地。>

BFF 模式是一种架构模式,专门设计用于通过为每个前端应用程序创建专用后端来满足不同客户端的需求。这意味着,您不需要拥有一个试图为所有客户端提供服务的通用 API,而是拥有一个充当前端和微服务之间的适配器的 BFF 层。

为什么要实现 BFF 模式?

前端后端模式在 Web 开发中提供了多种优势:

  • 优化用户体验:每个 BFF 都根据其相应前端应用程序的特定需求进行量身定制,允许前端开发人员优化用户界面和数据流。例如,移动应用程序 BFF 可能优先考虑轻量级 JSON 响应和高效的数据聚合,而 Web 应用程序 BFF 可能专注于更丰富的数据结构和更复杂的交互。
  • 简化前端开发:通过抽象微服务架构的复杂性,BFF 为前端提供了单个 API 进行交互。这减少了对单个微服务的依赖,并简化了客户端的数据获取逻辑,使前端团队可以专注于构建用户界面,而无需担心后端的复杂性。
  • 提高后端敏捷性:只要 BFF 契约保持一致,后端团队就可以独立开发其微服务,而不会影响前端。这种解耦允许后端和前端开发并行进行,从而提高敏捷性和加快开发流程。

BFF 模式实际应用:用例

假设您有一个基于微服务架构构建的大型电子商务平台。您可能拥有用于产品目录、购物车、用户帐户、推荐等的微服务。如果没有 BFF,您的前端应用程序(Web 应用程序、iOS 和 Android 移动应用程序)将需要直接与这些微服务进行交互,从而导致:

  • 增加客户端复杂性:前端应用程序需要了解每个微服务的 API 和数据结构,从而导致复杂的数据提取和错误处理逻辑。
  • 网络开销:从多个微服务获取数据可能会导致网络延迟增加并影响用户体验,尤其是在移动设备上。
  • 业务逻辑重复:如果不由集中层处理,某些业务逻辑(如数据转换或验证)可能需要在客户端应用程序之间复制。

实现 BFF 模式可以解决这些问题。每个前端应用程序都有一个专用的 BFF,充当单一联系点:

  • Web App BFF:此 BFF 汇总来自产品目录、购物车和推荐微服务的数据,为 Web 应用程序创建定制的 JSON 响应,以针对更大的屏幕和更复杂的功能进行优化。
  • 移动应用程序 BFF:适用于 iOS 和 Android 的独立 BFF 可优化较小屏幕和有限带宽的数据响应,仅从相关微服务中获取必要的信息。

实现 BFF 模式的关键注意事项

实现 BFF 模式时,请牢记以下因素:

  • API 网关:使用 API 网关根据客户端类型或请求标头将流量路由到适当的 BFF。这集中了路由逻辑并简化了后端的前端管理。
  • 身份验证:处理 BFF 层的身份验证,以确保只有授权的客户端才能访问底层微服务。
  • 缓存:利用 BFF 层的缓存来存储经常访问的数据,以减少延迟并改善用户体验。
  • Node.js:Node.js 是构建 BFF 的热门选择,因为它具有 JavaScript 运行时和对异步 I/O 操作的有效处理,非常适合聚合来自多个微服务的数据。

BFF 与 API 网关

虽然 BFF 和 API 网关都充当中介,但它们的用途不同。API 网关通常用于一般请求路由、安全实施和速率限制,而 BFF 专为前端应用程序设计,专注于数据转换、聚合和优化用户体验。在许多架构中,BFF 可能位于 API 网关后面,网关处理一般流量并路由到适当的 BFF。

BFF:微服务成功的现代设计模式

BFF 模式是一种强大的设计模式,可解决在微服务架构中开发前端应用程序的挑战。通过为每个前端创建专用的后端,您可以简化前端开发、改善用户体验并提高后端敏捷性。随着微服务继续主导软件开发,BFF 模式对于构建高效且用户友好的应用程序至关重要。

为前端实现后端的最佳实践

在实现 BFF 模式时,遵循最佳实践可确保其有效性并避免常见的陷阱:

  1. 明确职责:明确定义哪个团队(前端或后端)负责 BFF。这明确了开发和维护的责任,并确保与前端​​的特定需求保持一致。
  2. 版本控制和 API 契约:为 BFF API 实施适当的版本控制,以适应变化而不会破坏现有的前端应用程序。定义良好的 API 契约(可能使用 OpenAPI 等工具)可促进沟通并防止出现意外的兼容性问题。
  3. 安全第一:在 BFF 层处理身份验证和授权,以集中安全逻辑并保护后端服务。采用安全编码实践并进行彻底的安全测试以减轻漏洞。
  4. 采用正确的框架:选择适合您团队专业知识和 BFF 要求的框架。Node.js 是一个受欢迎的选择,因为它的 JavaScript 运行时与前端开发技能相符,并且能够高效处理 RESTful API 的 I/O 操作。但是,根据项目的需求,其他服务器端语言(如 Python 或 Go)也可能有效。
  5. 利用缓存:在 BFF 层实现缓存可以减少后端服务的负载并改善频繁请求数据的响应时间,从而显著提高性能。
  6. 针对移动设备进行优化:如果服务于移动应用程序,请针对移动带宽和数据使用限制优化 BFF 的 API 响应。考虑减少有效负载大小、使用高效的数据格式以及采用数据压缩等技术。

常见陷阱及避免方法

  1. BFF 单体:避免创建单个 BFF 来服务所有前端,因为这可能会引入新的瓶颈和紧密耦合,从而抵消该模式的优势。为每个前端设计单独的 BFF 以保持灵活性和可扩展性。
  2. 功能重叠:确保 BFF 与后端服务之间的界限清晰,以避免业务逻辑重复和职责混乱。BFF 应专注于数据聚合和转换等前端特定需求,将核心业务逻辑留给后端。
  3. 忽视安全性:未能正确保护 BFF 层可能会使后端服务面临安全风险。实施强大的身份验证、授权和输入验证机制来保护敏感数据并防止未经授权的访问。

实际应用:电子商务平台

考虑一个具有独立 Web 和移动应用程序的电子商务平台。Web 应用程序可能需要详细的产品信息和用户评论,而移动应用程序则优先考虑简洁的产品摘要和简化的结帐流程。

为每个前端(Web BFF 和移动 BFF)实现专用的 BFF 可实现定制的 API 响应,优化数据负载并确保每个平台的高效交互。BFF 可以处理以下任务:

  • 数据聚合:从多个后端服务获取产品详细信息、库存信息、用户评论和相关产品。
  • 数据转换:根据特定的 UI 要求格式化数据,例如总结移动设备的产品描述或汇总网络评论。
  • 身份验证和授权:处理用户登录、管理会话令牌以及强制执行特定操作(例如将商品添加到购物车或下订单)的权限。

未来趋势

BFF 模式随着软件开发的进步而不断发展。以下是一些未来趋势:

  1. 无服务器 BFF:将 BFF 部署为无服务器功能可提供成本效益、可扩展性和简化的部署,使其成为处理不同流量负载的理想选择。
  2. GraphQL 集成:利用 GraphQL 实现 BFF API 可以提高效率,允许前端仅请求所需的特定数据,减少数据过度获取并提高性能。
  3. 边缘计算:通过边缘计算将 BFF 部署到更靠近最终用户的地方可以显著减少延迟并改善用户体验,尤其是对于移动应用程序和实时功能。
  4. 人工智能驱动的 BFF:将人工智能功能集成到 BFF 中可以通过启用个性化内容推荐和基于用户行为的动态数据聚合等功能进一步优化用户体验。

结论

后端为前端模式已成为现代 Web 开发中一种有价值的架构模式。通过了解其优势、遵循最佳实践并适应未来趋势,组织可以利用 BFF 模式来增强其前端应用程序的性能、可扩展性和安全性,同时改善开发人员体验。

常见问题

什么是前端后端 (BFF)?

前端后端 (BFF) 是 Web 开发中的一种架构模式,其中为每个前端应用程序创建专用后端。这与试图服务所有客户端的通用 API 不同,可以优化用户体验并简化前端开发。

什么是后端用于前端模式?

BFF 模式充当前端应用程序和微服务之间的中间层。它通过聚合和转换来自多个微服务的数据来简化前端的数据获取,从而创建符合每个前端特定需求的定制 API。

后端对于前端的目的是什么?

Backend for Frontend 的目的是通过将前端与复杂的后端架构分离来提高应用程序的性能、可扩展性和可维护性。这简化了前端开发,允许在不同设备上优化用户体验,并提高了后端灵活性,因为微服务可以独立发展。

React 用于前端还是后端?

React 主要用于前端开发。它是一个用于构建用户界面的 JavaScript 库,是创建动态和交互式 Web 应用程序的热门选择。虽然它与后端没有直接关系,但 React 应用程序经常与 BFF 交互以获取和显示数据。

Node.js 用于前端还是后端?

Node.js 主要用于后端开发。它是一个 JavaScript 运行时环境,允许开发人员构建服务器端应用程序。由于其 JavaScript 特性和对异步操作的高效处理,Node.js 是创建 BFF 的热门选择。

JavaScript/TypeScript 用于前端还是后端?

JavaScript/TypeScript 既可用于前端开发,也可用于后端开发。虽然传统上 JavaScript/TypeScript 与 Web 浏览器的前端开发有关,但 Node.js 等技术已使 JavaScript/TypeScript 可用于服务器端应用程序,包括构建 BFF。这使得 JavaScript/TypeScript 成为一种适用于全栈开发的多功能语言。

本文作者:小码哥

本文链接:https://blog.wesee.club/archives/984/

版权声明:自由转载-非商用-非衍生-保持署名(cc 创意共享 3.0 许可证

Theme Jasmine by Kent Liao

粤ICP备2023052298号-1