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

Circuit Breakers

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

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

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

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

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

Health Checks and Failovers

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

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

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

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

完成了健康检查以后,您能够实现失败的策略。通常来讲,策略只是从新启动系统死掉的部分,但愿能获得最好的结果。虽然 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/

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

相关文章
相关标签/搜索