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

  • 时间:
  • 浏览:9
  • 来源:UU直播快三官方_大发UU直播快3

Hystrix是四个还还可不里能为延迟和故障提供更强大的容错能力的库,通过隔离访问远程系统、服务和第三方库的节点,阻止级联故障,从而使错综复杂的分布式系统更具弹性。

– Netflix

断路器在适当的以前还还可不里能 注意跳闸了的依赖服务。四个更错综复杂的系统还还可不里能 持续保持警惕,以选取依赖调用是与否可用,可能没问題,则让依赖调用继续下去。

在这类情况报告下,由Hystrix负责发送第四个请求,检查系统的可用性,让也不的请求快速失败,直到得到依赖的响应。可能调用是成功的,断路器被重置为Closed情况报告;可能发生故障,系统返回Open情况报告,而且整个过程继续循环。

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

在很早以前,朋友使用四个简单的设置方案名为AUTO_MARK_DOWN,用于处置漫长的依赖调用停留问題。通过将失败的调用短路,直到朋友通过MARK_UP标记恢复。自动检查系统定期检查各种机器每四个依赖的AUTO_MARK_DOWN情况报告,并执行MARK_UP。

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

– Martin Fowler

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

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

这类行为还还可不里能 用2种土辦法 实现:

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

2. 允许四个单一的调用执行,更频繁的深层来衡量可用性。

自从长期服务和最近的微服务被朋友熟知和使用,也不应用进程开发人员可能将整体式的API,转再加简单的、功能单一的微服务。然而,不能自己 的转换,原意味着了保证一致的响应时间和弹性,依赖关系变得不可用时,造成额外的损耗。这类,四个单体式的web应用进程,执行一次重试,在一定程度上是弹性的,可能它还还可不里能 在也不依赖关系(如数据库或也不服务)不可用时恢复。这类恢复能力不能自己 任何附加的网络损耗或代码错综复杂度。

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

– 匿名

在这类时刻,每四个依赖调用是短路的,并抛出HystrixRuntimeException异常,伴随SHORTCIRCUIT失败类型,给出异常明确的意味着。一旦停留时间以前,Hystrix断路器移到半开放情况报告。

Hystrix提供的execution hook是系统整合的四个关键组成次责,可能它有有利于实时监测/预警,尤其是错误和回退失败的各种故障,从而帮助朋友更很慢的调查和处置问題,几乎不能自己 造成任何对用户的影响。

对于四个还还可不里能 编排依赖的服务,每次调用都有昂贵的,失败会意味着降低用户体验,特别是当试图从失败中恢复时。将对后端服务造成更大的压力

那此事件意味着了无效的购物车,用户试图更新或重新下订单,进一步扩大了应用服务器的负载,应用服务器上可能堆积了血块停留进程,意味着网络拥塞。

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

AUTO_MARK_DOWN是第五种土辦法 ,其中,电路在不能自己 任何恢复的情况报告下被关闭,并依靠错误识别问題。

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

断路器是五种简单的设计內部,它时常保持警惕,对故障进行监控。在上述情况报告下,当断路器发现在调用供应商接口时,发生了长停留时间,不能自己 使用fail fast策略,向用户返回四个错误响应,而都有使进程长时间停留。而且,断路器还还可不里能 处置用户停留时间过长。

然而,自动检查系统和MARK_UP设施并都有内嵌到应用系统,也不发生內部。可还还可不里能自己 关于请求量和故障率的持续不断的反馈,会出现四个未经验证就被标记为MARK_UP的系统依赖异常。依托这类设置也意味着了误报,可能自动检查系统是客户端之外,无法评估失败的连续性。

断路器是Hystrix库默认提供的四个功能。断路器的功还还可不里里能 概括如下:

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

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

3. 四个Open情况报告失败所有请求。

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

考虑四个典型的使用案例:四个电子商务网站,在黑色星期五时服务器超载,可能压力过大,供应商提供的付款系统脱机了几秒钟。可能高并发请求,用户刚现在刚开始看后结帐时长时间的无响应。那此条件也意味着了所有的应用进程服务器都被阻塞,而那此阻塞进程正在停留接收来自供应商的响应。经过漫长的停留时间,最终的结果是失败。

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

Hystrix Github上有四个全面的文档介绍怎样使用Hystrix。这很简单,假如有一天使用Hystrix库创建类并调用服务。

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

一并,断路器也不断地发送四个请求,以确认供应商系统是与否恢复。可能是不能自己 语录,断路器将闭合电路,允许其余的调用正常执行,从而有效地消除网络拥塞和长时间停留的问題。

第二种土辦法 是四个更错综复杂的机制,可能它不允也不个调用一并执行,可能调用可还还可不里里能 很长的时间来执行而且仍然失败。然而,只允许四个单一的调用执行,需确保放慢的执行,从而实现了系统电路的恢复和放慢的收敛。

Hystric的dashboard作为核心服务器监控系统的一次责,使团队还还可不里能查看朋友的应用进程不一并期的依赖情况报告。

Hystrix不仅仅是四个断路器,也是四个具有丰沛 监控功能的删改的库,还还可不里能 很容易地植入到现有系统。朋友可能刚现在刚开始为未来的使用情况报告探索,使用该库的请求崩溃请求缓存的功能。当然,还有也不也不的Java实现,如Akka和Spring断路器,然而,根据朋友弹性环境中,关键应用运行情况报告,Hystrix可能被证明是四个心智心智成熟 的库,提供任什么时间间段内的高可用性。

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

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

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

自从2012成立以来,Hystrix成为也不试图为系统提高处置能力和处置故障的处置土辦法 。它有四个相当心智心智成熟 的接口和四个深层可调的配置系统,使应用进程开发人员还还可不里能提供最佳的服务依赖调用。

弹性指的是在错综复杂网络环境下,面对各种故障和挑战,仍能提供和维持四个还还可不里能 接受的服务水平,并正常运作。

-来自Wikipedia

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