天天看点

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时,将忽略错误

hystrix熔断和降级的区别_Hystrix 详解
2. 解决灾难性雪崩效应-隔离机制-线程池隔离-创建项目

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

正常访问时

hystrix熔断和降级的区别_Hystrix 详解
如果接口A因为压力太大而瘫痪或导致整个 consumer瘫痪
hystrix熔断和降级的区别_Hystrix 详解
如果开启了线程池隔离 ,当接口A 挂了的时候不会影响整个 consumer的运行
hystrix熔断和降级的区别_Hystrix 详解
hystrix熔断和降级的区别_Hystrix 详解

(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的作用是什么?

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

hystrix熔断和降级的区别_Hystrix 详解
4. 解决灾难性雪崩效应-隔离机制-信号量隔离-创建项目

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

hystrix熔断和降级的区别_Hystrix 详解
就是设置可以请求到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) 线程池隔离与信号量隔离有什么区别?

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

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

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

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

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

7. Feign的服务降级处理-创建项目
hystrix熔断和降级的区别_Hystrix 详解
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(); } @Component public class ProductServiceFallback implements ProductServiceuser { //能够返回托底数据的 fallback 方法 @Override public List<Product> findAll() { List<Product> list = new ArrayList<>(); list.add(new Product(-1, "我是托底数据")); return list; } }

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

hystrix熔断和降级的区别_Hystrix 详解
9. 服务降级后的异常记录

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

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

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

(1) 什么是Hystrix-dashboard?

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

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

启动熔断降级服务

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

开启可视化数据监控 dashboard

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

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

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

(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 @EnableHystrixDashboard public class SpringBootStarter { public static void main(String[] args) { SpringApplication.run(SpringBootStarter.class,args); } }

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

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

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

hystrix熔断和降级的区别_Hystrix 详解
12. 创建Turbine聚合服务器

(1) Turbine的作用是什么?

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

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

开启Turbine

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

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

9101

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

开启数据监控中心

14. 使用Turbine监控集群

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

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

分享/讲解/扩展思考

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