响应式微服务 in java 译 <十四> Circuit Breakers

Circuit Breakers

断路器(circuit breaker)是一种用于处理重复故障的模式,它保护微服务不被一次又一次地调用失败的服务,断路器是一种三种状态的自动机,交互如(图4-4)。它开始于一个封闭的状态(closed),在这种状态下,断路器会正常地执行操作。如果交互成功,什么都不会发生。但是,如果它失败了,断路器就会提示故障。一旦故障次数(或故障频率,在更复杂的情况下)超过一个阈值,断路器切换到一个开放状态(open)。在这种状态下,对断路器的调用立即失败,而不会试图执行底层交互。断路器除了执行操作,还可以执行调用返回,从而可以提供默认结果。经过配置的时间,断路器决定操作有成功的机会,因此它进入半开放状态(Half-Open)。在这种状态下,下一次对断路器的调用执行底层交互。根据此调用的结果,断路器重置并返回到关闭状态,或返回到打开状态,直到另一个超时结束。

160836_aNFI_2277632.png

Java中最著名的断路器实现是Hystrix(https://github.com/net ix/hystrix),而你可以在Vert.x微服务中使用hystrix(它使用线程池)。您需要显式地切换到 Vert.x event loop 执行不同的回调。或者,你可以使用Vert.x circuit breaker 处理异步操作,使用 Vert.x 非阻塞异步开发模型。

让我们想象一下失败的hello microservice,消费者应保护与此服务的交互,并使用断路器如下:

162550_slMq_2277632.png

在此代码中,http交互受到断路器保护,当故障数达到配置阈值时,断路器将停止调用微服务,断路器定期允许一次调用通过,以检查微服务是否回到轨道上,并采取相应的行动。断路器地使用通过一个示例,使用web client,任何交互都可以通过断路器来管理,并保护您避免出现不可靠服务、异常和其他类型的故障。

切换到开放状态(open)的断路器需要由操作团队进行监视,Hystrix 和 Vert.x circuit breaker  需要有可监控能力。

Health Checks and Failovers

当超时或者断路器允许消费者处理失败时,崩溃怎么办?面对崩溃时,故障转移策略重新启动已失败的系统部分。但是在能够实现这一点之前,我们必须能够检测出一个microservice死亡的时候。

健康检查是 Vert.x 提供的api,指示服务的状态。它告诉调用服务是否健康,调用通常使用HTTP交互,但不是必要的。调用之后,执行一组检查,并计算并返回全局状态。当检测到一个微服务不健康时,就不应该再调用它了,因为结果可能是失败的。请注意,调用健康的微服务也不能保证成功,健康检查只是表明微服务正在运行,而不是它将准确地处理您的请求或网络正确传递结果。

根据您的环境,您可能有不同水平的健康检查。例如,您可以在部署时进行准备状态检查,以确定微服务何时准备好为请求服务(当一切都已正确初始化时)。活性检查用于检测错误行为,并指示微服务是否能够成功地处理请求。当由于目标微服务没有响应而无法执行活性检查时,微服务可能已经崩溃。

在 Vert.x 应用里,实施健康检查有几种方法,您可以简单地实现返回状态的路由,甚至可以使用真正的请求。你可以使用 Vert.x健康检查模块,并组成不同的结果。下面的代码给出一个应用程序示例,提供了两个级别的健康检查:

165312_j0lP_2277632.png

完成了健康检查之后,您可以实现失败的策略。一般来说,策略只是重新启动系统死掉的部分,希望能得到最好的结果。虽然 Failover 通常由您的运行时基础设施Vert提供,当集群中的节点死亡时会触发该Failover,你不需要定制健康检查,定期 ping 集群中的节点。当Vert.X丢失节点的跟踪,Vert.X 会选择集群中的一个健康节点并重新部署死部分。

Failover 可以保持系统的运行,但不会修复根本原因--这是您的工作。当应用程序意外死亡时,应进行事后分析。

Summary

本章讨论了当您的微服务系统增长时您将面临的几个问题。正如我们所了解的那样,服务发现是任何一个系统中必须具备的,以确保位置透明性。然后,由于失败是不可避免的,我们讨论了几种模式,以提高您的系统的弹性和稳定性。

Vert.x 包括一个可插拔的服务发现模块,可以使用相同的api处理客户端服务发现和服务器端服务发现,vert.x 服务发现还可以从不同的服务发现基础设施导入和导出服务.弗特。Vert.x 包含一组弹性模式,如超时、断路器和故障转移。我们看到了这些模式的不同例子。不幸的是,处理失败是工作的一部分,我们都必须这样做。

在下一章中,我们将学习如何在OpenShift上部署Vert.x 的响应式微服务,并说明如何使用服务发现、断路器和 failover,来保障系统的健壮性。虽然这些主题特别重要,但不要低估其他需要处理的问题。在处理微服务时,例如安全性、部署、聚合日志记录、测试等。如果您想了解更多关于这些主题的信息,请查看以下资源:

  • Reactive Microservices Architecture

  • The Vert.x service discovery documentation

  • Release It! Design and Deploy Production-Ready So ware (O’Reilly) A book providing a list of recipes to make your sys‐ tem ready for production

  • Netflix Hystrix

  • The Vert.x service circuit breaker documentation

 

 

原文地址:

https://developers.redhat.com/promotions/building-reactive-microservices-in-java/

110506_9gQF_2277632.png

有什么讨论的内容,可以加我微信公众号:

223108_3TsV_2277632.png

转载于:https://my.oschina.net/u/2277632/blog/1622391

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值