【发布时间】:2019-11-01 02:31:21
【问题描述】:
我对整个微服务潮流还很陌生。我一直在研究良好的微服务环境背后的架构和原则。
定义微服务的主要内容之一应该是每个服务的松散耦合性质。 微服务 A 不应该直接调用 微服务 B,否则您实际上是在创建一个失去架构模式提供的可扩展性的单体系统。
问题/示例
如果我开发了一个返回 GUID 的微服务(例如),建议环境中的其他微服务在需要时直接调用 GUID 服务是合理的。
我了解可以使用多种排队系统将数据从一项服务传递到另一项服务,但在我看来,它们主要用于插入、删除或更新。
我无法理解如何将队列用于简单读取(例如我的 GUID 示例)以及为什么不直接从另一个微服务调用 GUID 服务。
注意:返回 GUID 只是一个示例,我知道大多数语言都能够在内部生成它们
我们将不胜感激。
【问题讨论】:
-
你想的都是错的。队列用于传输事件。事件描述已经发生的事情。 Get me a GUID 是一个command,它是未来发生某事的指令。在微服务架构中,事件消息可用于同步各个服务之间的状态。而不是您示例中的 GUID。想象一个用户。创建用户时,用户服务会发布 UserCreated 事件。这也允许任何其他服务使用该数据。因此,不再需要调用用户服务来获取用户。
-
此外,让微服务直接通过 http(s) 相互调用也不会违反任何规则。任何要求您永远不应该这样做的系统设计都是错误的。微服务架构旨在减少耦合,而不是消除它。直接调用有时是在服务之间传输状态的最佳方式,甚至是唯一方式。只是大多数时候,增加耦合所付出的代价是不值得的。
-
感谢您的回复@tomredfern,这让事情变得更清楚了。我认为需要对事件消息方面进行更多研究。
标签: microservices loose-coupling