Blazor WebAssembly(托管)微服务策略

3
我的应用程序的核心由一套微服务组成,每个微服务大多使用DDD架构。
在标准的MVC解决方案中,客户端将访问我的控制器,而控制器将与我的微服务交互。
在Blazor Server设置中,方法类似。
然而,在Blazor WebAssembly(托管)设置中,我有机会直接从Blazor WebAssembly客户端引用我的微服务。
这样做明智吗?
还是说我最好在Blazor服务器上创建一个facade(该facade再访问微服务),并且只从Blazor WebAssembly客户端与该facade通信?
我的Blazor服务器也需要引用微服务,我正准备在客户端上注册微服务,但不确定这是否可行。
2个回答

4

这高度取决于您的架构及其限制,一个适当的答案需要深思熟虑。

BFF模式

您可以使用BFF(前端后端)模式,即您的facade。在这种情况下,另一个微服务将充当您的Blazor应用程序和微服务景观之间的网关。

因此,前端不需要知道哪个服务包含哪些信息。通常,这简化了前端的开发。此外,BFF还可以处理跨切面的问题,如身份验证。

但是,您引入了一个新的微服务,它并不能帮助解决您的业务问题。您正在添加另一层意外的复杂性。

此外,使用BFF会在您的服务之间创建某种依赖。如果更改或添加您的微服务的功能,则还需要更新BFF。

直接调用他们

如果您的微服务有某种HTTP(REST)API(并非每个微服务都需要),可以向公共(即您的Blazor客户端)暴露该API,并直接从客户端调用它们。

每个服务都需要自己处理跨切面的问题,例如身份验证。客户端需要跟踪多个潜在的服务连接。它们将具有不同的URL,但可能还需要不同的标头等。

结论

这取决于具体情况。您最了解自己的架构,并且有许多文章讨论BFF的优缺点。我可以推荐先阅读此文章:https://learn.microsoft.com/en-us/dotnet/architecture/microservices/architect-microservice-container-applications/direct-client-to-microservice-communication-versus-the-api-gateway-pattern

  • 我们谈论3个还是30个微服务?
  • 客户端多频繁调用微服务?
  • 客户端需要多频繁请求多个服务来生成视图?
  • 您之前使用过API网关吗?
  • 是否需要身份验证或相关问题?
  • 微服务的API有多经常更改?

希望我的回答能帮助您找到答案。:)


感谢您的评论和有用的链接。我得出结论,API-Gateway(门面)方法是正确的选择,尽管增加了一层,主要是因为我可以集中处理安全问题和微服务的编排。 - Neil W

1
大多数情况下,不会这样做。 在客户端运行的代码通常与API-Gateway进行通信,无论是JavaScript SPA、移动应用程序还是现在的Blazor WebAssembly。
原因如下:
- 当任何一个微服务发生变化时,更新缓存在客户端上的代码比更新服务器代码更困难。 - 防火墙后面的客户端可能无法访问微服务的通信协议(例如AMPQ、gRPC)或端口。 - 客户端可能具有较慢的互联网连接。对多个微服务进行多次请求可能导致用户体验差。 - 在每个微服务中处理客户端授权可能会带来问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接