【问题标题】:Microservice Circuit Breaker and Discovery Service patterns微服务断路器和发现服务模式
【发布时间】:2018-11-14 03:39:11
【问题描述】:

我是微服务的新手,我怀疑谷歌并没有真正帮助我。 我知道一个微服务必须是独立的,所以即使它的对应物之一下线,一个应该保持正常工作。

考虑到这一点,我无法真正理解断路器甚至服务发现,比如我应该把它放在哪里?由于我对任何微服务的每次调用都会通过断路器,假设我的断路器服务的服务器离线,所以我的整个应用程序注定要失败,直到我修复它。如何解决这个问题?

最重要的是,我应该将断路器放在哪里,以及微服务中?

【问题讨论】:

    标签: microservices circuit-breaker


    【解决方案1】:

    当您进行远程调用时,您应该使用断路器模式

    如果您不使用它,那么在某些情况下(例如,当某些微服务关闭时)您的系统会像受到自我 DOS 攻击一样运行。当您链接同步调用时,这种情况就会显现出来。例如,如果您有以下情况:A -> B -> C(A 调用 B,B 调用 C)。如果 C 没有响应而 A 继续调用,则 B 可能会因管理来自 A 的等待调用而不堪重负,并且无法响应通常会成功的其他服务的合法调用。

    使用断路器最常见的地方是在 API 网关中,大部分远程调用都在此处进行(这是它的主要职责)。您也可以在客户端中使用该模式,强制它们不断停止并重复调用死微服务。

    虽然微服务在弹性方面是独立的(即使在其他服务出现故障时它们也可以正常工作),但这并不意味着它们不会相互通信。它们可以以异步方式进行通信,即当一个微服务想要在后台进程中使用来自另一个微服务的数据更新其自己的本地缓存时。

    【讨论】:

    • 非常感谢您的回复。就像我想的那样,断路器需要在 API 上实现。但是请耐心等待,如果断路器的服务下线了怎么办?这就是我感到困惑的地方。就像,对我的 API 的所有调用都缩小到这条浅水道,所以如果发生某些事情并且它关闭了,那么我的应用程序将无法运行。真的是这样吗,还是我错过了什么?
    • @VandersonAssis 是的,如果电路打开,那么应用程序将不再工作但它仍然无法工作。上游服务无论如何都不起作用。但是由于电路现在是开放的(它不转发请求但快速失败),缺陷上游服务具有更大的恢复可能性。此外,API 仍然可以转发对其他健康的上游服务的请求。如果没有断路器,API 也会因为对缺陷上游服务的等待调用过多而死。
    • [1 ]不,我不是说它会打开,我的意思是它会离线。断路器也不过是一项服务,对吧?我的问题是,如果断路器本身脱机怎么办,那么对它的所有调用都将失败,因此我的应用程序将不再工作,直到我修复它。据我所知,微服务是独立的,即使有一个或多个其他微服务下线,也应该能正常运行。真的很好,我喜欢这个主意。但是读了很多关于断路器的东西我仍然有疑问,就像所有对我的微服务的调用都通过断路器一样。
    • [2] 因此,如果断路器失败,那么我的所有应用程序也会失败,因为它不再能够转发请求,因为它处于脱机状态。这不会破坏拥有独立服务的整个想法吗?
    • 感谢您的帮助!现在更有意义了。 =]
    猜你喜欢
    • 2021-08-19
    • 2017-04-10
    • 2021-09-19
    • 2017-07-17
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多