我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
前端模式的后端
提出的解决方案结合了两种模式:1)
为了向
BFF 图案
根据
传统上,容纳多种用户界面的方法是提供单一的服务器端 API,并随着时间的推移根据需要添加更多功能,以支持新的移动交互类型。这种方法可能会带来以下挑战:
- 移动设备进行更少的调用,并且希望显示与台式机设备不同(可能更少)的数据,这意味着 API 后端需要额外的功能来支持移动接口。
-
现代应用程序 用户 界面越来越多地采用反应式策略向最终用户提供实时反馈(例如通过WebSoc kets ),不同的设备可能会实现不同的技术堆栈来支持它。 - 顾名思义,API 后端为多个面向用户的应用程序提供功能——这意味着在推出新的交付时,由于对同一个可部署工件进行了许多更改,单个 API 后端可能会成为瓶颈。
为了应对这些挑战,山姆
在山姆的建议下,像Netflix这样的公司已经采用了BFF模式,他们的安卓团队
亚马逊云科技 上事件驱动的 BFF 的组件
假设你已经有了
下图显示了架构及其消息流的高级视图。右边代表域名发布商,每个域名发行商都有自己的特定域名聚合数据库;左边是BFF订阅者,每个都有自己的用户体验特定的投影数据库。中间有一条事件总线传播域名状态的变化,允许发布商和订阅者保持分离。

图 1。消息流程图。
除了以下常用组件外,本博客文章中描述的事件驱动型 BFF 解决方案还依赖于特定技术的 API:
- 用于存储域投影表的
NoSQL 数据库 ,它还支持变更数据捕获 (CDC)。在这里,我们使用亚马逊 Dynamo DB,这是一种快速、灵活的 NoSQL 数据库服务,可在任何规模下实现个位数毫秒的性能。 - 一个
计算层 ,用于处理请求并将CDC流与API集成。在这里,我们使用的是亚马逊云科技 L am bda,这是一种无服务器、事件驱动的计算服务,可让您在不考虑服务器或集群的情况下运行代码。 - 保护 API 的身份验证和授权机制。在这里,我们使用
Amazon Cognito ,这是一项用于用户注册、登录和访问控制的简单而安全的服务。
使用 API 网关构建事件驱动的 REST BFF
以下架构图使用

图 2。使用 API 网关的 RESTful BFF 示意图。
实施步骤:
- 使用专门构建的 BFF 事件使用者从您的应用程序中捕获事件。它们负责更新 Am
azon DynamoDB 中的非标准化数据预测以供前端使用。 -
在加载界面时,前端客户端使用 亚马逊 Cognito 进行身份验证,然后通过调用使用亚马逊 API Gateway 构建的 BFF AP I 来查询数据。然后在 DynamoDB 中提取数据,可以直接通过 API 网关获取,也可以通过使用 亚马逊云科技 Lambda 构建的 BFF 查询处理程序获取。 - 前端客户端通过连接到 API Gateway 提供的 BFF
WebSocket 端点来订阅任何后续的数据更改,这会触发 “连接的客户端” 表的更新。 - 使用 BFF 事件使用器继续使用和处理应用程序中的所有相关事件。这些消费者不断实时更新BFF数据库中的非标准
化 前端数据视图。 - 使用 Amazon DynamoDB Streams
订阅 由 BFF 数据库中的数据变化产生的所有事件,然后 在 亚马逊云科技 Lambda 中注册 触发器,以便在检测到新的流记录时异步调用 BFF 流处理程序 Lambda 函数。 - 然后,你的 BFF 流处理程序会向连接到 API Gateway 的 WebSockets 的客户端推送通知。
- 当前端客户端收到来自 API Gateway 的变更通知时,他们可以刷新 UI 内容。
使用 AppSync 构建事件驱动的 GraphQL BFF
我们看到越来越多的组织选择使用 GraphQL 构建 API,因为前端开发人员能够使用单个 GraphQL 端点查询多个数据库、微服务和 API,从而帮助他们更快地开发应用程序。
以下架构图使用

图 3。使用 AppSync 的 GraphQL BFF 示意图。
实施步骤:
- 使用专门构建的 BFF 事件使用者从您的应用程序中捕获事件。它们负责在 Am
azon DynamoDB 中保持非标准化数据视图以供前端使用。 -
在加载界面时,前端客户端 使用 ,然后通过调用 亚马逊云科技 AppSync 构建的 BFF API 使用 GraphQL 查询数据。Amazon Cognito 进行身份验证然后在 DynamoDB 中提取数据,可以直接通过 亚马逊云科技 AppSync 获取,也可以通过使用 亚马逊云科技 Lambda 构建的 BFF 查询处理程序获取。 - 前端客户使用通过 WebS
ock ets 订阅 的 亚马逊云科技 AppSync 订阅来订阅任何后续数据更改。 - 使用 BFF 事件使用器继续使用和处理应用程序中的所有相关事件。这些消费者不断实时
更新 BFF数据库中的非 标准化 前端数据视图。 - 使用 Amazon DynamoDB Streams
订阅 由 BFF 数据库中的数据变化产生的所有事件,然后 在 亚马逊云科技 Lambda 中注册 触发器,以便在检测到新的流记录时异步调用 BFF 流处理程序 Lambda 函数。 -
然后,您的 BFF 流处理程序会调用 亚马逊云科技 AppSync GraphQL 架构上的空 突变 ,该变更是 专门为强制触发订阅而创建的,从而向客户发送通知。 - 当前端客户收到来自 亚马逊云科技 AppSync 的变更通知时,他们可以刷新用户界面内容。
亚马逊云科技 AppSync 提供了简化的 WebSockets 体验,包括实时数据、连接、可扩展性、扇出和广播,所有这些都由 亚马逊云科技 AppSync 服务处理,使开发人员能够专注于应用程序用例和需求,而不必处理大规模管理 WebSockets 连接所需的复杂基础设施。
步骤 6 中的 亚马逊云科技 Lambda 流处理函数是由向亚马逊 DynamoDB 表中插入新项目触发的。它读取这些项目并更新 亚马逊云科技 AppSync,提醒它注意新数据。
以下代码显示了 Lambda 函数的入口点。它接收来自 DynamoDB 的事件,该事件由流中的新数据触发。对于每个新条目,如果是已插入(而不是更新或删除)的数据,它将解析数据并调用 executeMut
ation 函数。
以下代码是 exec uteMutation
函数,它使用从 DynamoDB 流接收的新数据对 亚马逊云科技 AppSync 进行更改。它使用第三方库
突变是使用以下 GQL 代码生成的:
结论
BFF 模式是指每个用户体验都有一个后端,而不是只有一个通用 API 后端。
通过在事件驱动架构中实现 BFF 模式,当微服务引发域聚合变异事件时,您可以提供近乎实时的可视化更新,从而改善用户界面上的最终用户体验。
在这篇博客文章中,我们解释了开发人员如何将 BFF 模式应用到他们的
作者简介:
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。