同步通信微服务
Synchronous communication microservices
我知道微服务是分离上下文并允许我们创建更小模型的好方法。实现解耦的方法之一是微服务之间的异步publish/subscribe通信。
假设微服务 A 负责处理请求,为此它需要存储在微服务 B[= 中的信息26=]。
解决这个问题的方法之一是,让微服务 A 订阅来自微服务 B 的事件,复制需要的部分数据到它的数据存储并将其用于将来的处理。
现在,如果用户向微服务A发送请求去处理一些东西,而微服务A最近没有处理来自微服务的事件 B,使用同步通信并直接请求那部分数据是否更好?如果是,那是否被视为 "violation" 当前设计和耦合?
是不是也算造型错误?例如 - 如果在 A 上下文中需要数据,那么它从一开始就应该是该上下文的一部分。
Could it also be considered as a wrong modeling? Such as - if the data were needed in A context, then it should have been part of that context from start.
是的,可能是。
总而言之,如果微服务 B 是您在此用例中所需数据的技术权威,那么微服务 B 应该提供该功能。
is that considered a "violation" of current design and coupling?
在那个设计中,如果微服务B不可用,那么微服务A就无法提供价值。这听起来像是对我的耦合。
我猜,如果您陷入这种模式,将与 B 同步通信,但在 B 不可用的情况下使用本地数据缓存。
如果共享的数据是不可变的,一些问题就会消失。
This of course works only when working with cached data is allowed by business, otherwise A would need to own the data or throw an exception
如果数据的写入者是B,那么A看到的任何数据都是缓存的数据;服务 B 可能正在更改数据,而 A 正在查看数据。如果 A 正在做出需要 B 写入的数据的实时副本的决定,那么您会遇到更大的问题——您的服务边界位于错误的位置。
我知道微服务是分离上下文并允许我们创建更小模型的好方法。实现解耦的方法之一是微服务之间的异步publish/subscribe通信。
假设微服务 A 负责处理请求,为此它需要存储在微服务 B[= 中的信息26=]。 解决这个问题的方法之一是,让微服务 A 订阅来自微服务 B 的事件,复制需要的部分数据到它的数据存储并将其用于将来的处理。
现在,如果用户向微服务A发送请求去处理一些东西,而微服务A最近没有处理来自微服务的事件 B,使用同步通信并直接请求那部分数据是否更好?如果是,那是否被视为 "violation" 当前设计和耦合?
是不是也算造型错误?例如 - 如果在 A 上下文中需要数据,那么它从一开始就应该是该上下文的一部分。
Could it also be considered as a wrong modeling? Such as - if the data were needed in A context, then it should have been part of that context from start.
是的,可能是。
总而言之,如果微服务 B 是您在此用例中所需数据的技术权威,那么微服务 B 应该提供该功能。
is that considered a "violation" of current design and coupling?
在那个设计中,如果微服务B不可用,那么微服务A就无法提供价值。这听起来像是对我的耦合。
我猜,如果您陷入这种模式,将与 B 同步通信,但在 B 不可用的情况下使用本地数据缓存。
如果共享的数据是不可变的,一些问题就会消失。
This of course works only when working with cached data is allowed by business, otherwise A would need to own the data or throw an exception
如果数据的写入者是B,那么A看到的任何数据都是缓存的数据;服务 B 可能正在更改数据,而 A 正在查看数据。如果 A 正在做出需要 B 写入的数据的实时副本的决定,那么您会遇到更大的问题——您的服务边界位于错误的位置。