Microservices 微服务体系结构松耦合复杂性
我对整个微服务潮流还相当陌生。我一直在研究好的微服务环境背后的体系结构和原则 定义微服务的主要因素之一应该是每个服务的松散耦合性质。微服务A永远不应该直接调用微服务B,否则您实际上是在创建一个单片系统,从而降低了体系结构模式提供的可伸缩性 问题/示例 如果我开发了一个返回GUID的微服务(例如),那么建议环境中的其他微服务可以在需要GUID服务时直接调用GUID服务是合理的 我知道可以使用各种排队系统将数据从一个服务传递到下一个服务,但在我看来,它们主要用于插入、删除或更新 我无法理解队列如何用于简单读取(如我的GUID示例),以及为什么不直接从另一个微服务调用GUID服务 注意:返回GUID只是一个例子,我知道大多数语言都可以在内部生成GUIDMicroservices 微服务体系结构松耦合复杂性,microservices,loose-coupling,Microservices,Loose Coupling,我对整个微服务潮流还相当陌生。我一直在研究好的微服务环境背后的体系结构和原则 定义微服务的主要因素之一应该是每个服务的松散耦合性质。微服务A永远不应该直接调用微服务B,否则您实际上是在创建一个单片系统,从而降低了体系结构模式提供的可伸缩性 问题/示例 如果我开发了一个返回GUID的微服务(例如),那么建议环境中的其他微服务可以在需要GUID服务时直接调用GUID服务是合理的 我知道可以使用各种排队系统将数据从一个服务传递到下一个服务,但在我看来,它们主要用于插入、删除或更新 我无法理解队列如何用
如果您能澄清一下,我们将不胜感激。您不应该按原样遵循每一条规则。 这条规则有许多例外,许多系统的实践证明,它并不适用于所有情况或系统 我不同意这一限制,即微服务A不应将微服务B称为一般规则,因为它并不适用于所有情况。我曾使用 微服务和我们不遵循的地方 微服务之间的通信: 您可以使用多种方式在微服务之间进行通信,如:
例如,通常您需要同步调用另一个微服务,并且您需要等待响应(取决于您的业务场景)。最好的方法是用命令/查询直接调用另一个微服务。你想的全错了。队列用于传输事件。事件描述已经发生的事情。给我一个GUID是一个命令,它是对将来发生的事情的指示。在微服务体系结构中,事件消息可用于在单个服务之间同步状态。而不是示例中的GUID。想象一个用户。创建用户时,Users服务将发布UserCreated事件。这允许任何其他服务也使用该数据。因此,不再需要调用用户服务来获取用户。而且,让微服务直接通过http相互调用也不会违反任何规则。任何要求您永远不要这样做的系统设计都是错误的。微服务架构寻求减少耦合,而不是消除耦合。直接调用有时是在服务之间传输状态的最佳方式,甚至是唯一的方式。只是在大多数情况下,增加耦合的成本是不值得的