我是靠谱客的博主 专注金鱼,最近开发中收集的这篇文章主要介绍服务容错保护:Spring Cloud Hystrix1、简介2、原则3、特性3、原理4、脑图,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、简介

Hystrix,是由Netflix开源的一个延迟和容错,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性、容错性与局部应用的弹性,是一个实现了超时机制和断路器模式的工具类库。

2、原则

1)切断:防止单独的依赖耗尽线程资源;过载立即切断并快速失败,防止扎堆排队。

2)回调:提供有效返回,以保护用户免受故障。

3)隔离:使用隔离技术(例如隔板,泳道和断路器模式)来限制任何一个依赖的影响。

4)监控:通过实时的指标,监控和告警,确保故障被及时发现。

5)恢复:通过动态修改配置属性,确保故障及时恢复。

6)防止整个依赖客户端执行失败,而不仅仅是网络通信。

3、特性

3.1、请求熔断

1)当Hystrix Command请求后端服务失败数量超过一定比例(缺省50%),断路器会切换到开路状态(Open)。 此时,所有请求会直接失败不会发送到后端服务

2)断路器保持在开路状态一段时间后(缺省5秒),自动切换到半开路状态(HALF-OPEN)。此时会判断下一次请求的返回情况,如果请求成功,断路器切回闭路状态(CLOSED),否则重新切换到开路状态(OPEN)。

Hystrix的断路器,就像电路保险丝,一旦后端服务不可用, 断路器会直接切断请求链,,避免发送大量无效请求影响系统吞吐量;并且断路器有自我检测并恢复的能力.

3.2、服务降级

Fallback相当于是降级操作。对于查询操作, 可实现一个fallback方法,当请求后端服务出现异常的时,使用fallback方法的返回值。fallback方法的返回值一般是设置的默认值或者来自缓存。告知后面的请求服务不可用,不要再请求。

3.3、依赖隔离

在Hystrix中,主要通过线程池来实现资源隔离。通常在使用的时候我们会根据调用的远程服务划分出多个线程池。比如说,一个服务调用两外两个服务,你如果调用两个服务都用一个线程池,那么如果一个服务卡在哪里,资源没被释放后面的请求又来了,导致后面的请求都卡在哪里等待,导致你依赖的A服务把你卡在哪里,耗尽了资源,也导致了你另外一个B服务也不可用了。这时如果依赖隔离,某一个服务调用A B两个服务,如果这时我有100个线程可用,我给A服务分配50个,给B服务分配50个,这样就算A服务挂了,我的B服务依然可以用。

3.4、请求缓存

比如一个请求过来请求我userId=1的数据,你后面的请求也过来请求同样的数据,这时我不会继续走原来的那条请求链路了,而是把第一次请求缓存过了,把第一次的请求结果返回给后面的请求。

3.5、请求合并

请求依赖于同一服务,要调用N次,比如说查数据库,发了N条请求发了N条SQL然后拿到一堆结果,这时候我们可以把多个请求合并成一个请求,发送一个查询多条数据的SQL的请求,这样我们只需查询一次数据库,提升了效率

3、原理

1)使用命令模式将所有对外部服务(或依赖关系)的调用包装在HystrixCommand或HystrixObservableCommand对象中,并将该对象放在单独的线程中执行。

2)每个依赖都维护着一个线程池(或信号量),线程池被耗尽则拒绝请求(而不是让请求排队)。

3)记录请求成功,失败,超时和线程拒绝。

4)服务错误百分比超过了阈值,熔断器开关自动打开,一段时间内停止对该服务的所有请求。

5)请求失败,被拒绝,超时或熔断时执行降级逻辑。

6)近实时地监控指标和配置的修改。

当使用Hystrix封装每个基础依赖项时,每个依赖项彼此隔离,受到延迟时发生饱和的资源的限制,并包含回退逻辑,该逻辑决定了在依赖项中发生任何类型的故障时做出什么响应。

4、脑图

 

最后

以上就是专注金鱼为你收集整理的服务容错保护:Spring Cloud Hystrix1、简介2、原则3、特性3、原理4、脑图的全部内容,希望文章能够帮你解决服务容错保护:Spring Cloud Hystrix1、简介2、原则3、特性3、原理4、脑图所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(127)

评论列表共有 0 条评论

立即
投稿
返回
顶部