SpringCloud-Hystrix-创新互联

一.什么是Hystrix?

成都创新互联总部坐落于成都市区,致力网站建设服务有成都网站设计、做网站、网络营销策划、网页设计、网站维护、公众号搭建、小程序设计、软件开发等为企业提供一整套的信息化建设解决方案。创造真正意义上的网站建设,为互联网品牌在互动行销领域创造价值而不懈努力!

Hystrix,英文直译为豪猪。

在这里,指由Netflix(网飞)公司研发的断路器和降级的技术方案。

从2011年开始研发,至2018年底正式宣布进入维护模式,已经成熟完整且地提供了熔断、隔离、降级、请求合并、缓存、监控等功能。

二.Hystrix有哪些功能?

常用:

1.熔断(Circuit Break)

源自于股市的一种概念,达到一定条件,限制请求,限制一段时间后,开始恢复,恢复是逐步进行的;

2.隔离(IsoLation)

包装指定指令;上下文无关;可替换;线程或信号量

3.降级(FallBack)

当请求失败时能响应;快速;不会/不应报错;保证服务在一定程度上可用

不常用:

1.请求合并(Collapsing)

降低系统开销;总体平均性能提升;单次请求性能可能下降;须结合实际情况选择使用

2.缓存

相同参数直接返回;降低调用响应时间;降低开销;需要精细控制

3.监控(Monitor)

监控请求状态;定位问题所在;限制一段时间后,开始恢复,恢复是逐步进行的

三.为什么选择Hystrix

功能足够,性能足够,文档足够,支持足够

除了Hystrix外的选择

四.如何使用Hystrix?

  1. 开启Feign的Hystrix的支持(openFeign默认支持)

  1. 添加POM的依赖

  1. 开启Hystrix

五、Hystrix的一些概念

1.Commands

Command是Hystrix中的被隔离的一个最小指令。Hystrix的所有隔离、熔断、降级、缓存、合并、监控都是基于某个最小指令。每个Command都有其唯一的名字,可以用这个名字调整每个指令的对应属性。

绝大多数的配置,是针对于一个指令(Command)的,具体可以参阅Hystrix的官方文档说明。如果知道了一个指令(Command)的名字,那么可以针对于这个指令,调整它的配置。

如果Feign启用了Hystrix支持,那么产生的Command名字默认由feign.Feign#configKey(java.lang.Class, java.lang.reflect.Method)产生。

如果直接使用@HystrixCommand注解,那么Command的名字是被直接定义出来的。

2.ThreadPool

ThreadPool是Hystrix中的默认指令隔离方式。除此之外,还有信号量机制。

Hystrix中的线程池与Java的线程池概念类似。可以设定其最小值,大值,队列,回收速度。

当线程池达到大值后,再继续添加请求,会触发fallback,此fallback会被记录为请求错误。

线程池并非只有一个,对于Feign,每一组相同name的client属于同一个组,默认情况下,同一个组共享同一个线程池,也可以修改指定的指令(Commond)使用指定的线程池。

3.Circuit Breaker

Circuit Breaker(断路器)是Hystrix中的核心功能。断路器有开启、关闭、半开状态。

断路器(Circuit Breaker)的开启条件:在关闭状态下,首先要达到最小请求数,其次,这些请求中,请求错误的比例达到设定值,那么才会开启。

断路器开启后,所有请求都会直接降级(fallback)。

断路器开启后,经过一段时间的“休眠”,进入半开状态,会有一个指令进行实际请求,如果这个请求成功,那么断路器会关闭。否则,断路器继续打开。

如果需要,断路器可以禁用,也可以强行打开或关闭。

六.Hystrix如何工作?

例子:

设定总请求时间窗口为10秒,分为10个bucket,即,每个计数时间段为1秒。

设定请求计数门槛为20,断路器开启百分比为60%,断路器“休眠”时间5秒。

线程池容量40。

七.Hystrix有哪些坑?

1.如何精确设定Hystrix的参数?

通过设定对应指令(Command)的参数,可以覆盖默认的default参数。具体的参数配置可以参考官网。

2.指令使用哪个线程池,由什么决定?

每个Hystrix指令,都有一个对应的group,group在监控中是一个最小单元,默认情况下,此指令的线程池与group对应,每个group有唯一对应的线程池。也可以通过配置threadPoolKeyOverride,进行单独设定。

3.那么,指令使用哪个group呢?

对于Feign,group的名字默认是FeignClient注解的name值,可以通过调整feign.hystrix.SetterFactory来调整。

对于HystrixCommand注解,group的名字可以直接指定。

4.线程池方式下,hystrix如何计算是否开启断路器?

在单位时间内,如果请求达到一定数量,且失败比例高于设定值,则开启断路器。

单位时间由

参数: metrics.rollingStats.timeInMilliseconds

参数: metrics.rollingStats.numBuckets

共同指定,两者能整除时,单位时间为两者的商。

最低计算数由circuitBreaker.requestVolumeThreshold决定

最低失败比例由circuitBreaker.errorThresholdPercentage决定

5.hystrix线程池如何调优?

按官方文档,线程池中coreSize的建议值为

请求的qps*99线执行时间+预留空间

例如,某请求预估每秒请求300次,执行时间为200ms,

则coreSize应为300*0.2+10=70, 默认的coreSize为10

对于Feign,每个name对应相同的group,相同group默认使用同一个线程池,如果有多个调用量较小的微服务被调用端,可以考虑让他们共享同一个线程池。同理,反则反之,如果FeignClient的某个方法(对应一个指令Command)调用量较大,也可以给这个指令设置独享的线程池。

于Feign,每次请求,只要对应的http请求没有结束,线程是一直被占用的,请尽量保证快速释放线程资源。

此外,通过调整maxQueueSize,在一定程度上,可以达到“削峰填谷”作用。但需注意的是,等待执行也会被timeout处理。

6.FeignClient创建的Hystrix请求是如何包装的?

大部分情况下:

1.Sleuth层(如果有)

2.Hystrix层(如果有)

3.Ribbon层(如果有)

4.client层(必有,n选1)

因为Hystrix是包装在Ribbon层和client之上,所以超时和线程池会有一些微妙的关系

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

网站栏目:SpringCloud-Hystrix-创新互联
URL地址:https://www.cdcxhl.com/article16/djpedg.html

成都网站建设公司_创新互联,为您提供网站制作网站营销外贸网站建设响应式网站小程序开发品牌网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设