【问题标题】:Why do microservices need to communicate with each other?为什么微服务需要相互通信?
【发布时间】:2021-08-27 04:10:55
【问题描述】:

我是新来的,但如果我们有前端 + 几个不同的微服务,我只是不明白为什么我们需要它们中的任何一个来相互通信,如果我们可以通过前端的 axios 在它们的数据之间进行操作。如果我们同时使用前端和后端微服务,那么事件总线和事件驱动架构的目的是什么?

好的,在我的示例中,我使用了 5 个微服务。其中有 2 个:

  • 购物车
  • 帖子

我想直接访问帖子微服务,通过事件总线传递他们的数据,这样购物车微服务就会有它的信息。原因是帖子和购物车都有不同的数据库,那么这样做的一个很好的例子,还是只是通过 axios 服务的前端?

【问题讨论】:

    标签: events microservices


    【解决方案1】:

    对于一个非常简单的应用程序,您的建议可能是正确的,它甚至不需要像微服务这样的架构。很清楚为什么服务需要通信:

    1. 某些服务在客户端甚至无法访问(出于安全等各种原因),因此必须在具有此类权限的其他后端服务中启动对它们的更改
    2. 在后端服务而非客户端中引发了一些更改,例如用于执行某些任务的 cronjob
    3. 这会质疑可重用性,因为您必须考虑到服务不仅可以供客户使用,而且可以在任何环境中使用
    4. 如果您希望您的服务被公众使用,如果他们没有有意或错误地实现部分所需的逻辑会发生什么
    5. 让客户做所有事情可能会非常复杂,并且会降低灵活性
    6. 某些服务(例如身份验证)充当确保安全的支持机制(或除主逻辑之外的任何其他服务),这些服务应直接由需要它们的服务进行通信

    至于您问题的第二部分,这取决于几个因素,例如您的业务需求和模型、所需的可扩展性、性能、可用​​性等,因此正确的答案或换句话说,适合的答案会有所不同。

    对于您的问题,使用异步事件总线不是一个好的解决方案,因为它会损害服务的一致性。相反,像 posts service 中的简单 API 调用这样的同步方式会是一个更好的主意。

    【讨论】:

    • 这是有道理的。所以我正在制作一个必须包含微服务架构的项目,并且这些微服务必须相互通信(至少相互通信),所以我更新了我的问题,您可以进行审查并更新您的答案吗?我会很感激的。
    • 是的,正如我所说,也许它看起来不像一个更复杂的应用程序,但我的整个应用程序必须包含异步方式,比如一个微服务与另一个微服务通信,所以这是一个很好的例子这两个微服务的情况还是完全没有必要以这种方式使用它们?我应该尝试使用不同的微服务吗?
    • 我不确定我知道异步调用和同步调用的主要区别,但是两个微服务可以同步通信吗?
    • 您仍然可以将事件总线用于应用程序的不同部分,但就此而言,我不建议这样做,因为它更难确保一致性(例如,posts 中的数据已更改,但是当您调用其他一些相关 API 时,shopping carts 中并未发生更改。
    • 是的,他们当然可以。我建议阅读这篇文章以了解有关docs.microsoft.com/en-us/dotnet/architecture/microservices/… 通信类型的更多信息。
    猜你喜欢
    • 2020-08-19
    • 2017-05-28
    • 2021-11-07
    • 2021-09-22
    • 2021-05-12
    • 1970-01-01
    • 2018-05-07
    • 2021-02-23
    相关资源
    最近更新 更多