我有两个微型服务。
我的目标是提供一个移动应用程序的单一界面,我们的用户将使用它来查看统计数据。应根据用户的角色向用户显示统计数据。
我认为带有前端后端的API网关变体是必须建立的东西。
API流将是这样的。
[Mobile App] [API Gateway] [User Microservice] [Stats Microservice]
| | | |
1---------Get Metrics---->| | |
2--------- Get User Roles -------------->| |
3----------------------------Get Stats According to Roles-------------------->|
4(Wrap data in FrontEnd json)
<---Send JSON to App------5我正在考虑为此使用nodejs,因为我们的大多数团队成员都已经开发了nodejs。有一些很好的API网关,比如ExpressGateway,nodejs中的快速网关。但它们都没有提供数据聚合(合并和转换来自多个服务的数据)功能。
我可以理解数据聚合可能变得非常特定于用例,因此这些开放源码API网关没有提供多少支持,但是我没有找到任何关于如何使用API网关实现这一点的指导方针。
如果我编写定制的聚合插件/代码来调用微服务,我想知道如何利用API网关提供的缓存机制。
我还想知道如何利用API网关提供的故障处理,当统计微服务关闭时。
发布于 2020-04-20 07:06:45
您曾经说过,您可能必须为不同的前端实现单独的后端。您还注意到,现有的API网关不太支持数据聚合。我个人并不认为后端到前端(BFF)模式是API网关的一个变种。在我看来,BFF可以包含业务逻辑(例如,聚合不同数据源以向前端提供丰富的信息),而API网关通常不包含业务逻辑。因此,API网关是可重用的,但是BFF是不可重用的。对于其余的答案,我假设您想要遵循BFF模式。
我的理解是,您希望将来自前端的请求缓存到BFF,以避免重载用户服务和统计服务。这意味着您希望缓存聚合数据。
缓存可以作为一个单独的层来实现,例如,在移动应用程序和BFF之间设置一个反向代理,将请求缓存到BFF API。反向代理将减少开发工作量,并可用于TLS终端。缺点是增加了操作的复杂性。
如果您希望每个BFF有一个缓存,或者为所有BFF选择一个缓存(就像API Gateway :),则由您决定。
如果前端向后端发送不易被反向代理(例如WebSocket连接、GraphQL API)处理的请求,则缓存可以作为BFF的一部分实现。这将降低操作复杂性,但您必须为每个BFF单独实现缓存。
的停机时间
如果前端请求未缓存的用户统计信息,且统计信息服务不可用,则您别无选择,只能向前端发送错误响应。将依赖关系从BFF分解到统计服务将是一个重大的架构更改。
https://softwareengineering.stackexchange.com/questions/408993
复制相似问题