如何减少前端应用程序与微服务之间的闲聊

时间:2019-12-10 06:32:44

标签: microservices

我们有一个漂亮的标准(我想考虑)的架构,如下所示:

  • 客户端(iOS,Android,Web)
  • 微服务(公开REST API端点)
  • API网关(从客户端到微服务的路由)

现在,一些繁重的客户端页面需要从大约5个微服务中获取数据(某些调用可以是并行的)。您可以想象,这可能会导致问题。

想到了一些解决方案,希望人们可以考虑一下,或者提供替代方案:

  

将数据从微服务复制到第一个服务,这意味着只需调用一次

在这种情况下,这对我来说没有意义,因为服务是独立的..那么,此信息的“守护者”是谁?我们复制给谁?他们为什么要承担这项责任,而不是其他服务?

  

缓存(网络)

这听起来是最好的解决方案,并且易于实现。但是,如果数据经常更改,我们仍然可能会遇到问题。

  

聚合层

我们已经有了这个(GraphQL)。但是,尽管网络性能更好,但瓶颈只会使瓶颈更进一步。但是,即使它们是并行的,这仍然需要进行5次调用。

  

缓存数据库

拥有一个由每个团队管理的DB / API,这些团队从微服务订阅更新。因此,他们只需要拨打1个电话即可。但是,这对我来说,克服了聚合层(即GraphQL),的问题,这意味着前端团队需要了解微服务和事件(而API网关应对此加以保护)。当然,我们可以让后端团队来解决这个问题-但是,我们又在图GraphQL / BFF的意义上败了,因为我们现在在后端创建另一个BFF。

非常欢迎您提供想法,建议和替代选择!

1 个答案:

答案 0 :(得分:0)

您的第一个选择的变种。

enter image description here

具有单独的viewmodel服务,该服务可以为您提供满足UX需求所需的所有数据。当其他微服务的资源状态发生变化时,视图模型会保持同步,