使用Netflix Hystrix编写弹性可容错的应用程序

  • 时间:
  • 浏览:0

弹性指的是在僵化 网络环境下,面对各种故障和挑战,仍能提供和维持一另有一一个多要能接受的服务水平,并正常运作。

-来自Wikipedia

同去,断路器只是断地发送一另有一一个多请求,以确认供应商系统是是否恢复。不可能 是从前搞笑的话,断路器将闭合电路,允许其余的调用正常执行,从而有效地消除网络拥塞和长时间停留的问题。

eBay有一系列的内内外部和内外部的API服务。所有哪几种服务都有通过令牌认证,安全令牌服务作为令牌的发行人和验证。所有的令牌服务现在都升级并使用基于Hytrix断路器,它使安全令牌服务高可用。当有一另有一一个多服务在繁忙时,该服务的断路器打开,不想对令牌服务造成压力,同去允许有些服务功能正常。

断路器在适当的后后前要注意跳闸了的依赖服务。一另有一一个多更僵化 的系统前要持续保持警惕,以选则依赖调用是是否可用,不可能 没问题,则让依赖调用继续下去。

Hystrix Github上有一另有一一个多全面的文档介绍怎么才能 才能 使用Hystrix。这很简单,倘若使用Hystrix库创建类并调用服务。

当一另有一一个多系统运行平稳,成功情况计数器用于测量弹性系统的稳定性,而故障表用于跟踪任何故障。该设计确保当达到故障的阈值时,断路器断开电路,以外理进一步的资源请求。

对于一另有一一个多前要编排依赖的服务,每次调用都有昂贵的,失败会原因降低用户体验,有点儿是当试图从失败中恢复时。将对后端服务造成更大的压力

AUTO_MARK_DOWN是第有一种法律土辦法 ,其中,电路在这么任何恢复的情况下被关闭,并依靠错误识别问题。

在eBay,有些应用不可能 结束了英语 使用Hystrix,要么作为一另有一一个多独立的库或使用亲戚亲戚朋友的平台包装。亲戚亲戚朋友平台包装的版本,通过JMX beans法律土辦法 暴露Hystrix配置,方便集中管理。对于关键系统,亲戚亲戚朋友包装的版本还注入自定义Hystric插件实现捕获实时被发布的metrics,并feed到亲戚亲戚朋友的监控系统。

Hystric的dashboard作为核心服务器监控系统的一累积,使团队要能查看亲戚亲戚朋友的应用系统进程不同去期的依赖情况。

Hystrix是一另有一一个多要能为延迟和故障提供更强大的容错能力的库,通过隔离访问远程系统、服务和第三方库的节点,阻止级联故障,从而使僵化 的分布式系统更具弹性。

– Netflix

使用中间的电子商务网站为例,在一另有一一个多弹性系统中,断路器持续对系统进行故障评估,在付款外理器处于故障时,发现不可能 供应商而造成的长时间停留。在有一种情况下,它打破了电路,并快速失败。其结果是,用户被告知系统故障,供应商有足够的时间来恢复。

在有一种时刻,每一另有一一个多依赖调用是短路的,并抛出HystrixRuntimeException异常,伴随SHORTCIRCUIT失败类型,给出异常明确的原因。一旦停留时间后后,Hystrix断路器移到半开放情况。

然而,自动检查系统和MARK_UP设施并都有内嵌到应用系统,只是处于内外部。不可能 这么关于请求量和故障率的持续不断的反馈,会再次出现一另有一一个多未经验证就被标记为MARK_UP的系统依赖异常。依托有一种设置也原因了误报,不可能 自动检查系统是客户端之外,无法评估失败的连续性。

第二种法律土辦法 是一另有一一个多更僵化 的机制,不可能 它不允有些个调用同去执行,不可能 调用不可能 前要很长的时间来执行或者仍然失败。然而,只允许一另有一一个多单一的调用执行,需确保越快的执行,从而实现了系统电路的恢复和越快的收敛。

断路器是有一种简单的设计特征,它时常保持警惕,对故障进行监控。在上述情况下,当断路器发现在调用供应商接口时,处于了长停留时间,这么使用fail fast策略,向用户返回一另有一一个多错误响应,而都有使系统进程长时间停留。或者,断路器要能外理用户停留时间过长。

自从2012成立以来,Hystrix成为有些试图为系统提高外理能力和外理故障的外理法律土辦法 。它有一另有一一个多相当心智心智心智心智心智开花结果的搞笑的话的接口和一另有一一个多强度可调的配置系统,使应用系统进程开发人员要能提供最佳的服务依赖调用。

考虑一另有一一个多典型的使用案例:一另有一一个多电子商务网站,在黑色星期五时服务器超载,不可能 压力过大,供应商提供的付款系统脱机了几秒钟。不可能 高并发请求,用户结束了英语 看得人结帐时长时间的无响应。哪几种条件也原因了所有的应用系统进程服务器都被阻塞,而哪几种阻塞系统进程正在停留接收来自供应商的响应。经过漫长的停留时间,最终的结果是失败。

在很早后后,亲戚亲戚朋友使用一另有一一个多简单的设置方案名为AUTO_MARK_DOWN,用于外理漫长的依赖调用停留问题。通过将失败的调用短路,直到亲戚亲戚朋友通过MARK_UP标记恢复。自动检查系统定期检查各种机器每一另有一一个多依赖的AUTO_MARK_DOWN情况,并执行MARK_UP。

哪几种事件原因了无效的购物车,用户试图更新或重新下订单,进一步扩大了应用服务器的负载,应用服务器上不可能 堆积了小量停留系统进程,原因网络拥塞。

从前该设计的主要过低是,这么律土辦法 对所有应用系统进程的依赖做全面的,实时的监控。有一种旧系统是缓慢和不稳定的,这么持续的遥测,盲目标记所有系统的auto_mark_down,假定应用系统进程的依赖将进一步产生故障。其结果是不可预测的,难以正确评估。

下面的情况图,描述了中断路器生命周期中不同情况下弹性可容错系统的运作情况。

断路器是Hystrix库默认提供的一另有一一个多功能。断路器的功要要能概括如下:

1. 断路器对所有调用情况进行验证。

2. 电路的Closed情况允许请求通过。

3. 一另有一一个多Open情况失败所有请求。

4. 一另有一一个多Half-Open情况(当sleep停留时间完成),允许一另有一一个多请求通过,并在成功或失败时,转再加Closed的或Open的情况。

自从长期服务和最近的微服务被亲戚亲戚朋友熟知和使用,越来太久越来太久 应用系统进程开发人员不可能 将整体式的API,转再加简单的、功能单一的微服务。然而,从前的转换,原原因了保证一致的响应时间和弹性,依赖关系变得不可用时,造成额外的损耗。这类,一另有一一个多单体式的web应用系统进程,执行一次重试,在一定程度上是弹性的,不可能 它要能在有些依赖关系(如数据库或有些服务)不可用时恢复。有一种恢复能力这么任何附加的网络损耗或代码僵化 度。

在有一种情况下,由Hystrix负责发送第一另有一一个多请求,检查系统的可用性,让有些的请求快速失败,直到得到依赖的响应。不可能 调用是成功的,断路器被重置为Closed情况;不可能 处于故障,系统返回Open情况,或者整个过程继续循环。

Reference: https://github.com/Netflix/Hystrix/wiki/Getting-Started

一另有一一个多和谐的系统,应有一另有一一个多理想的断路器,实时监测,要能快速恢复故障,使应用系统进程达到真正的弹性可容错。

Hystrix提供的execution hook是系统整合的一另有一一个多关键组成累积,不可能 它能够实时监测/预警,尤其是错误和回退失败的各种故障,从而帮助亲戚亲戚朋友更越快的调查和外理问题,几乎这么造成任何对用户的影响。

在内内外部,有一种类利用rxjava库异步执行服务依赖的调用。此设计使用应用系统进程的系统进程,最大化系统进程性能,并智能管理服务资源调用。对于使用延迟调用的法律土辦法 执行并行外理管理依赖关系的应用系统进程开发人员,Hystrix也提供Future

断路器肩上的基本思想是很简单的。在断路器对象中,中有 一另有一一个多受保护的函数调用,并由该断路器对象进行故障监测。一旦故障再次出现,并达到一定的阈值,断路器跳闸,断路器中剩下的调用都将返回一另有一一个多错误,而都有将所有步骤继续执行下去。通常,不可能 断路器跳闸,你还前要进一步的监控和告警。

– Martin Fowler

有一种行为要能用2种法律土辦法 实现:

1. 允许所有调用执行,在一另有一一个多正常的时间间隔内执行并检查错误。

2. 允许一另有一一个多单一的调用执行,更频繁的强度来衡量可用性。

恢复时间对底层资源至关重要,有了一另有一一个多快速失败的断路器,保护了超载的系统,使下游服务能快速恢复。

断路器是老要活跃在系统中,时刻监视系统的依赖调用。为了外理高故障率,断路器在很短的时间内便能停止失败调用的扩散,而都有仅仅返回一另有一一个多标准的错误。

断路器 + 实时监测 + 恢复 = 弹性可容错

– 匿名

Hystrix不仅仅是一另有一一个多断路器,也是一另有一一个多具有丰富监控功能的完正的库,要能很容易地植入到现有系统。亲戚亲戚朋友不可能 结束了英语 为未来的使用情况探索,使用该库的请求崩溃请求缓存的功能。当然,还有有些有些的Java实现,如Akka和Spring断路器,然而,根据亲戚亲戚朋友弹性环境中,关键应用运行情况,Hystrix不可能 被证明是一另有一一个多心智心智心智心智心智开花结果的搞笑的话的库,提供任啥后后间段内的高可用性。