hystrix熔断和降级的区别_学习笔记32-Hystrix

处理灾难性雪崩效应

1、

6438f76c839a645134b0148017272a79.png

2、

07197fa8f5ec5e955f0c69466363ee8d.png

3、

8517d512987700561fecbc4ab09accd0.png

4、

814670be70cb072600a3e0ad482731dc.png

解决灾难性雪崩效应的方法:

降级、缓存、请求合并、熔断、隔离

---降级:对服务做降级处理

创建consumer项目,添加Hystrix的坐标

a9b283aa94e641e76cf35191dd424709.png

修改启动类,开启熔断器

ad923ec4979937081ad91fac1b37a7e6.png

配置文件

a1126bf7e83ce4b48e74ca26434c4cc2.png

在Service项目中新建Product实体类,在service接口中添加方法,使用昨天的feign项目,所以provider和service项目稍作修改即可。

在新建的consumer项目中添加fallback方法

766ff2d2d20a51a49dc9e250d6b81e00.png

6a54cedd1b5ff503b19493bccd3ee883.png

启动项目,发起请求,当停止provider时继续请求将会返回托底数据。

触发fallback方法:

(1) 方法抛出非 HystrixBadRequestException 异常。

(2) 方法调用超时

(3) 熔断器开启拦截调用

(4) 线程池/队列/信号量是否跑满

--缓存:Hystrix 为了降低访问服务的频率,支持将一个请求与返回结果做缓存处理。如果再次请求的 URL 没有变化,那么 Hystrix 不会请求服务,而是直接从缓存中将结果返回。这样可以大大降低访问服务的压力。

Hystrix 自带缓存。有两个缺点:

1. 是一个本地缓存。在集群情况下缓存是不能同步的。

2. 不支持第三方缓存容器。Redis,memcache 不支持的。

可以使用 spring 的 cache。

创建一个新的consumer项目,添加Hystrix和redis的坐标

ee91d65ac29039c9a19357f267f797dc.png

配置redis

92415f95ba2b802b1f214c896cac5c08.png

修改启动类开启缓存

4545af32cc0b405f1e61c277044d8fd8.png

配置consumer项目的方法

f0b014adf87a7d8b20bb0eb2ec2b6545.png
给key-value添加前缀,开启缓存,清除缓存

启动测试

--请求合并:

没有合并的请求:

bcf24be2a6d0b8e5e813cf615ee4cff6.png

合并之后的请求:

911d372e3e478fdc2567e83490a0673f.png

使用请求合并:在微服务架构中,我们将一个项目拆分成很多个独立的模块,这些独立的模块通过远程调用来互相配合工作,但是,在高并发情况下,通信次数的增加会导致总的通信时间增加,同时,线程池的资源也是有限的,高并发环境会导致有大量的线程处于等待状态,进而导致响应延迟,为了解决这些问题,我们需要来了解 Hystrix 的请求合并。

请求合并的缺点:设置请求合并之后,本来一个请求可能 5ms 就搞定了,但是现在必须再等 10ms 看看还有没有其他的请求一起的,这样一个请求的耗时就从 5ms 增加到 15ms 了,不过,如果我们要发起的命令本身就是一个高延迟的命令,那么这个时候就可以使用请求合并了,因为这个时候时间窗的时间消耗就显得微不足道了,另外高并发也是请求合并的一个非常重要的场景。

创建新的consumer项目,修改访问的方法:

1b9cfc84b2f4f8aad460377ee36aca8a.png

请求合并参数:

723feb5bf1c8522fe11b6f992ba98b7e.png

--服务熔断:

21d4aa0b5401bde6eb19bdfeac8225f0.png

创建新的consumer项目,添加Hystrix依赖,在启动类上添加熔断器

修改consumer中的方法:

2669dbdb16f2ede4eb4d3e1501e616d6.png

参数:

0382cae270d8b90da4d85bd81307cc56.png

--隔离(线程池隔离)

5c3594c1e7ff07ee350027b32f0e2816.png

a1e46df8030138bf080b944cc8d48ec0.png

a6a6d838fd2dcaae2779c42eb53bc9b9.png

018f5a08e5a6157b9bdcba128b07ab85.png

85115488053645049684dc630994bca5.png

创建项目添加依赖开启熔断器

修改方法在注解上添加配置:

d5d27ab94eab772fefe0f7ba8c57a38c.png

参数:

3b085607e1f8c9c417d528431f2dc843.png

--隔离(信号量隔离):

18d32e3b66659dc5ef19ecab8a432761.png

创建项目添加依赖

修改方法:

70707cb670428bb1544559e425c8df98.png

参数:

5f6c1e5bac5178ee9405d211000510e1.png

线程池隔离和信号量隔离的区别:

06a4aaa89092dcba48db1fa2cc66fe90.png

可视化的数据监控:Hystrix-dashboard 是一款针对 Hystrix 进行实时监控的工具,通过 HystrixDashboard 我们可以在直观地看到各 Hystrix Command 的请求响应时间, 请求成功率等数据。

将原有的consumer项目拷贝一份,添加依赖:

562067a07867e03d2dc46b91ffab3f17.png

在启动类上加入注解开启dashboard

05ff358303afe88fcfe51d2b40d1df4f.png

接口继承provider

8dd233cf4b0405fd79bfc345ef4a9464.png

依次启动provider和consumer,访问list,触发降级,

3a19f7bc4263f61f7a30d367f447c4db.png

访问dashboard

a78cf976336b68a05ca8fb22b3c68683.png

输入要监控的地址

7d416d3a21db7c0ea1400661c8f07d85.png

153fa00504e49c2c797369b449a38e99.png

详细参数介绍

16c780aabfbdf773fd9f0d575d7ae841.png

Turbine:

c45477513890c426a80dc191e00284b3.png

Turbine 是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过turbine来监控集群服务。

可以使用RabbitMQ来收集监控数据

案例略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值