微服务断路器和发现服务模式
Microservice Circuit Breaker and Discovery Service patterns
我是微服务的新手,我怀疑 google 并没有真正帮助我。
我知道一个微服务必须是独立的,所以即使它的一个对应的服务掉线了,它也应该保持正常工作。
考虑到这一点,我真的无法理解断路器甚至服务发现,比如我应该把它放在哪里?由于我对任何微服务的每次调用都会通过断路器,假设我的断路器服务的服务器离线,所以我的整个应用程序注定要失败,直到我修复它。如何解决这个问题?
最重要的是,我也应该在微服务中将断路器放在哪里?
只要有远程调用,就应该使用断路器模式。
如果你不使用它,那么在某些情况下(即当某些微服务关闭时)你的系统会像在自我 DOS 攻击下一样运行。当您链接同步调用时,这种情况就会显现出来。例如,如果您有以下内容:A -> B -> C(A 调用 B,B 调用 C)。如果 C 没有响应而 A 一直在呼叫,那么 B 可能会因管理来自 A 的等待呼叫而不知所措,并且无法响应通常会成功的来自其他服务的合法呼叫。
最常使用断路器的地方是 API 网关,大多数远程调用都在这里进行(这是它的主要职责)。您也可以在客户端中使用该模式,强制它们不断停止并重复调用死掉的微服务。
虽然微服务在弹性方面是独立的(即使在其他服务失败时它们也可以运行),但这并不意味着它们不相互通信。它们可以以异步方式进行通信,即当一个微服务想要在后台进程中使用来自另一个微服务的数据更新自己的本地缓存时。
我是微服务的新手,我怀疑 google 并没有真正帮助我。 我知道一个微服务必须是独立的,所以即使它的一个对应的服务掉线了,它也应该保持正常工作。
考虑到这一点,我真的无法理解断路器甚至服务发现,比如我应该把它放在哪里?由于我对任何微服务的每次调用都会通过断路器,假设我的断路器服务的服务器离线,所以我的整个应用程序注定要失败,直到我修复它。如何解决这个问题?
最重要的是,我也应该在微服务中将断路器放在哪里?
只要有远程调用,就应该使用断路器模式。
如果你不使用它,那么在某些情况下(即当某些微服务关闭时)你的系统会像在自我 DOS 攻击下一样运行。当您链接同步调用时,这种情况就会显现出来。例如,如果您有以下内容:A -> B -> C(A 调用 B,B 调用 C)。如果 C 没有响应而 A 一直在呼叫,那么 B 可能会因管理来自 A 的等待呼叫而不知所措,并且无法响应通常会成功的来自其他服务的合法呼叫。
最常使用断路器的地方是 API 网关,大多数远程调用都在这里进行(这是它的主要职责)。您也可以在客户端中使用该模式,强制它们不断停止并重复调用死掉的微服务。
虽然微服务在弹性方面是独立的(即使在其他服务失败时它们也可以运行),但这并不意味着它们不相互通信。它们可以以异步方式进行通信,即当一个微服务想要在后台进程中使用来自另一个微服务的数据更新自己的本地缓存时。