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

  • 时间:
  • 浏览:0

你这人 事件原困了无效的购物车,用户试图更新或重新下订单,进一步扩大了应用服务器的负载,应用服务器上只要堆积了大量听候系统进程,原困网络拥塞。

Hystrix不仅仅是有2个断路器,也是有2个具有丰富监控功能的完正的库,还也能很容易地植入到现有系统。我门歌词 只要开始英文了了英语 为未来的使用清况 探索,使用该库的请求崩溃请求缓存的功能。当然,还有许多许多的Java实现,如Akka和Spring断路器,然而,根据我门歌词 弹性环境中,关键应用运行清况 ,Hystrix只要被证明是有2个心智心智性性性心智成熟期 图片 是什么是什么的语录的语录的库,提供任哪天间段内的高可用性。

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

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

在你这人 清况 下,由Hystrix负责发送第有2个请求,检查系统的可用性,让许多的请求快速失败,直到得到依赖的响应。只要调用是成功的,断路器被重置为Closed清况 ;只要占据 故障,系统返回Open清况 ,只要整个过程继续循环。

对于有2个也能 编排依赖的服务,每次调用时会昂贵的,失败会原困降低用户体验,怪怪的是当试图从失败中恢复时。将对后端服务造成更大的压力

在很早我想要 ,我门歌词 使用有2个简单的设置方案名为AUTO_MARK_DOWN,用于解决漫长的依赖调用听候疑问图片。通过将失败的调用短路,直到我门歌词 通过MARK_UP标记恢复。自动检查系统定期检查各种机器每有2个依赖的AUTO_MARK_DOWN清况 ,并执行MARK_UP。

一齐,断路器只要断地发送有2个请求,以确认供应商系统不是恢复。只只我想要 应该 语录,断路器将闭合电路,允许其余的调用正常执行,从而有效地消除网络拥塞和长时间听候的疑问图片。

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

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

– Netflix

自从长期服务和最近的微服务被我门歌词 熟知和使用,就说 系统进程开发人员只要将整体式的API,转添加简单的、功能单一的微服务。然而,我想要 的转换,原困为了保证一致的响应时间和弹性,依赖关系变得不可用时,造成额外的损耗。类似于于,有2个单体式的web系统进程,执行一次重试,在一定程度上是弹性的,只要它还也能在许多依赖关系(如数据库或许多服务)不可用时恢复。你这人 恢复能力没人任何附加的网络损耗或代码繁杂度。

自从2012成立以来,Hystrix成为许多试图为系统提高解决能力和解决故障的解决办法 。它有有2个相当心智心智性性性心智成熟期 图片 是什么是什么的语录的语录的接口和有2个深度可调的配置系统,使系统进程开发人员也能提供最佳的服务依赖调用。

AUTO_MARK_DOWN是第某种办法 ,其中,电路在没人任何恢复的清况 下被关闭,并依靠错误识别疑问图片。

你这人 行为还也能用2种办法 实现:

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

2. 允许有2个单一的调用执行,更频繁的效率来衡量可用性。

eBay有一系列的组织组织结构和组织组织结构的API服务。所有你这人 服务时会通过令牌认证,安全令牌服务作为令牌的发行人和验证。所有的令牌服务现在都升级并使用基于Hytrix断路器,它使安全令牌服务高可用。当有有2个服务在繁忙时,该服务的断路器打开,不需要对令牌服务造成压力,一齐允许许多服务功能正常。

在你这人 时刻,每有2个依赖调用是短路的,并抛出HystrixRuntimeException异常,伴随SHORTCIRCUIT失败类型,给出异常明确的原困。一旦听候时间我想要 ,Hystrix断路器移到半开放清况 。

断路器是某种简单的设计社会形态,它时常保持警惕,对故障进行监控。在上述清况 下,当断路器发现在调用供应商接口时,占据 了长听候时间,没人使用fail fast策略,向用户返回有2个错误响应,而时会使系统进程长时间听候。只要,断路器还也能解决用户听候时间过长。

第二种办法 是有2个更繁杂的机制,只要它不允许多个调用一齐执行,只要调用只要也能 很长的时间来执行只要仍然失败。然而,只允许有2个单一的调用执行,需确保快一点 的执行,从而实现了系统电路的恢复和快一点 的收敛。

使用里面的电子商务网站为例,在有2个弹性系统中,断路器持续对系统进行故障评估,在付款解决器占据 故障时,发现只要供应商而造成的长时间听候。在你这人 清况 下,它打破了电路,并快速失败。其结果是,用户被告知系统故障,供应商有足够的时间来恢复。

在eBay,许多应用只要开始英文了了英语 使用Hystrix,要么作为有2个独立的库或使用我门歌词 的平台包装。我门歌词 平台包装的版本,通过JMX beans办法 暴露Hystrix配置,方便集中管理。对于关键系统,我门歌词 包装的版本还注入自定义Hystric插件实现捕获实时被发布的metrics,并feed到我门歌词 的监控系统。

弹性指的是在繁杂网络环境下,面对各种故障和挑战,仍能提供和维持有2个还也能接受的服务水平,并正常运作。

-来自Wikipedia

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

Hystrix提供的execution hook是系统整合的有2个关键组成部分,只要它利于实时监测/预警,尤其是错误和回退失败的各种故障,从而帮助我门歌词 更迅速的调查和解决疑问图片,几乎没人造成任何对用户的影响。

在组织组织结构,你这人 类利用rxjava库异步执行服务依赖的调用。此设计使用系统进程的系统进程,最大化系统进程性能,并智能管理服务资源调用。对于使用延迟调用的办法 执行并行解决管理依赖关系的系统进程开发人员,Hystrix也提供Future

我想要 该设计的主要不够是,没人 对所有系统进程的依赖做全面的,实时的监控。你这人 旧系统是缓慢和不稳定的,没人持续的遥测,盲目标记所有系统的auto_mark_down,假定系统进程的依赖将进一步产生故障。其结果是不可预测的,难以正确评估。

然而,自动检查系统和MARK_UP设施并时会内嵌到应用系统,只要占据 组织组织结构。只要没人关于请求量和故障率的持续不断的反馈,会老会 出现有2个未经验证就被标记为MARK_UP的系统依赖异常。依托你这人 设置也原困了误报,只要自动检查系统是客户端之外,无法评估失败的连续性。

断路器是Hystrix库默认提供的有2个功能。断路器的功能还也能概括如下:

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

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

3. 有2个Open清况 失败所有请求。

4. 有2个Half-Open清况 (当sleep听候时间完成),允许有2个请求通过,并在成功或失败时,转添加Closed的或Open的清况 。

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

– 匿名

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

– Martin Fowler

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

Hystric的dashboard作为核心服务器监控系统的一部分,使团队也能查看我门歌词 的系统进程不一齐期的依赖清况 。

考虑有2个典型的使用案例:有2个电子商务网站,在黑色星期五时服务器超载,只要压力过大,供应商提供的付款系统脱机了几秒钟。只要高并发请求,用户开始英文了了英语 看得人结帐时长时间的无响应。你这人 条件也原困了所有的系统进程服务器都被阻塞,而你这人 阻塞系统进程正在听候接收来自供应商的响应。经过漫长的听候时间,最终的结果是失败。

断路器在适当的我想要 也能 注意跳闸了的依赖服务。有2个更繁杂的系统也能 持续保持警惕,以挑选依赖调用不是可用,只要没疑问图片,则让依赖调用继续下去。

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

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