hystrix熔断和降级的区别_Hystrix 详解

学习主题:Hystrix

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

1. 解决灾难性雪崩效应-服务熔断-服务熔断处理

(1) 熔断参数circuitBreaker.enabled的作用是什么?

是否开启熔断 默认时TRUE 开启

(2) 熔断参数circuitBreaker.requestVolumeThreshold的作用是什么?

一个统计窗口内熔断触发的最小个数/10s 默认20个

10s内请求数大于20个的时候就启动熔断器.当请求符合熔断条件时将触发getFallback()

(3) 熔断参数circuitBreaker.sleepWindowInMiliseconds的作用是什么?

熔断多少秒后去尝试请求 5000ms

(4) 熔断参数circuitBreaker.errorThresholdPercentage的作用是什么?

失败率达到多少百分比后熔断 默认配置下采样周期为10s,失败率为50%

请求错误大于50% 时就熔断,然后for循环发起请求,当请求符合熔断条件时将触发getFallback()

(5) 熔断参数circuitBreaker.forceOpen的作用是什么?

是否强制开启熔断 默认 false 不强制

设置为true 时.所有请求都将被拒绝,直接返回fallback

(6) 熔断参数circuitBreaker.forceClosed的作用是什么?

是否强制关闭熔断 默认 false 不强制

置为true时,将忽略错误

70d8c4b7cb359da1e768957592666d58.png

2. 解决灾难性雪崩效应-隔离机制-线程池隔离-创建项目

(1) 什么是线程池隔离?

正常访问时

19f5bc73ce591e3133ba52160caffdb1.png

如果接口A因为压力太大而瘫痪或导致整个 consumer瘫痪

5fe25989a5f9baa204a81be0fe97c02e.png

如果开启了线程池隔离 ,当接口A 挂了的时候不会影响整个 consumer的运行

6eaff0d2765a09a253c40dfb267445b0.png

8d3e728f0d3206688c0ec66c4d5c008c.png

(2) 线程池隔离的优点是什么?

1. 使用线程池隔离可以完全隔离依赖的服务.请求线程可以快速放回

2. 当线程池出现问题时,线程池隔离是独立的,不会影响其他服务和接口

3. 当失败的服务再次变得可用时,线程池将清理并可立即恢复,而不需要一个长时间的恢复

4. 独立的线程池提高了并发性

(3) 线程池隔离的缺点是什么?

线程池隔离的主要缺点是它们增加计算开销(CPU) ,每个命令的执行涉及到排队.调度和上下文切换都是在一个单独的线程上运行的

3. 解决灾难性雪崩效应-隔离机制-线程池隔离-线程池隔离处理

(1) @HystrixCommand注解中的threadPoolProperties属性的作用是什么?

配置线程池隔离的参数

(2) @HystrixProperty注解的作用是什么?

配置具体的参数

(3) 线程池隔离参数groupKey的作用是什么?

服务名(相同服务用同一个名称,如商品,用户等等)

(4) 线程池隔离参数commandKey的作用是什么?

接口(服务下面的接口,如购买商品)

(5) 线程池隔离参数threadPoolkey的作用是什么?

线程池的名称:配置全局唯一标识线程池的名称,相同线程池名称的线程池是同一个

(6) 线程池隔离参数coreSize的作用是什么?

线程池大小: 这是最大的并发执行数量

(7) 线程池隔离参数maxQueueSize的作用是什么?

最大队列长度 :设置BlockingQueue 的最大长度

(8) 线程池隔离参数queueSizeRejectionThreshold的作用是什么?

拒绝请求:设置拒绝请求的临界值

(9) 线程池隔离参数keepAliveTimeMinutes的作用是什么?

线程存活时间: 设置存活时间,单位: 分钟

0578c1ce303ba839ca4466ffbc08d266.png

4. 解决灾难性雪崩效应-隔离机制-信号量隔离-创建项目

(1) 什么是信号量隔离?

e1095f166297844bdf5ad36c4bc647c8.png

就是设置可以请求到provider的请求的个数

5. 解决灾难性雪崩效应-隔离机制-信号量隔离-信号量隔离处理

(1) 信号量隔离参数execution.isolation.strategy的作用是什么?

隔离策略配置项 默认 THREAD 只有两种THREAD和SEMAPHONE

(2) 信号量隔离参数execution.isolation.thread.timeoutInMiliseconds的作用是什么?

超时时间 1000ms

1. 在THREAD模式下,达到超时时间,自动中断

2. 在SEMAPHONE模式下,会等待执行完成后,再去判断是否超时

(3) 信号量隔离参数execution.isolation.thread.interruptOnTimeout的作用是什么?

是否打开超时线程终端 默认为 TRUE

(4) 信号量隔离参数execution.isolation.semaphore.maxConcurrentRequests的作用是什么?

信号量最大并发度 默认10

(5) 信号量隔离参数fallback.isolation.semaphore.maxConcurrentRequests的作用是什么?

Fallback最大并发度 默认10

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第244次(Hystrix)

学习主题:Hystrix

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

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

(1) 线程池隔离与信号量隔离有什么区别?

badda667e549ca78f25da355986cba17.png

(2) 什么情况下使用线程池隔离?

请求并发量大,并且耗时长(请求耗时长一般是计算量大,或读数据库) ; 采用线程隔离策略,这样的话,可以保证大量的容器(tomcat)线程可用,不会因为服务原因,一直处于阻塞或等待状态,快速失败返回

(3) 什么情况下使用信号量隔离?

请求并发量大,并且耗时端(请求耗时短可能是计算量小,或读缓存) :采用信号量隔离策略,因为这类服务的返回通常会非常的快.不会占用容器线程太长时间,而且也减少了线程切换的一些开销,提供了缓存服务的效率

7. Feign的服务降级处理-创建项目

cf1a715f4bb52d5337f3e392d7c6d532.png

8. Feign的服务降级处理-服务降级处理

(1) 修改业务层代码,在Feign中配置服务降级。

//fallbackFactory 指定返回托底数据的类@FeignClient(name = "eureka-provider",fallbackFactory = ProductServiceuser.class)public interface ProductServiceuser {@RequestMapping(value="/product/findall",method = RequestMethod.GET)public List<Product> findAll();}

@Componentpublic class ProductServiceFallback implementsProductServiceuser {//能够返回托底数据的 fallback 方法@Overridepublic List<Product> findAll() { List<Product> list = new ArrayList<>();list.add(new Product(-1, "我是托底数据")); return list; } }

(2) 启动服务测试效果。

507eb4857a55a2af6ea0c8f7550dd521.png

9. 服务降级后的异常记录

(1) 为什么要记录降级后的异常信息。

根据异常信息诊断服务为为什么没有响应

10. 在项目中开启可视化的数据监控Hystrix-dashboard

(1) 什么是Hystrix-dashboard?

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

(2) @EnableHystrix注解的作用是什么?

启动熔断降级服务

(3) @EnableHystrixDashboard注解的作用是什么?

开启可视化数据监控 dashboard

11. 搭建Hystrix-dashboard数据监控中心

(1) 创建数据监控中心服务。

c5b497bfb962613162159f69e4081bd5.png

(2) 修改POM文件,添加actuator启动器,添加hystrix启动器、hystrix-dashboard启动器。

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency>

(3) 需改启动类添加开启Hystrix与HystrixDashboard。

@EnableFeignClients@EnableDiscoveryClient@SpringBootApplication@EnableHystrix@EnableHystrixDashboardpublic class SpringBootStarter {public static void main(String[] args) { SpringApplication.run(SpringBootStarter.class,args);}}

(4) 按照启动顺序启动服务。

253d29e4c525f362fd64362c3e698e0c.png

f1628bfd737ecd3449414940e3bf3f19.png

(5) 访问HystrixDashboard服务,查看数据。

de2544cc25d0d122dec575545c9c9944.png

12. 创建Turbine聚合服务器

(1) Turbine的作用是什么?

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

(2) @EnableTurbine注解的作用是什么?

开启Turbine

13. 使用Turbine对多个服务进行监控

(1) Turbine默认监听端口是多少?

9101

(2) @EnableHystrixDashboard注解的作用是什么?

开启数据监控中心

14. 使用Turbine监控集群

(1) 通过Turbine查看集群监控。

b71a4bc28b4fb15328ecb9feeb2b5596.png

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值