学习主题: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时,将忽略错误
2. 解决灾难性雪崩效应-隔离机制-线程池隔离-创建项目
(1) 什么是线程池隔离?
正常访问时
如果接口A因为压力太大而瘫痪或导致整个 consumer瘫痪
如果开启了线程池隔离 ,当接口A 挂了的时候不会影响整个 consumer的运行
(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的作用是什么?
线程存活时间: 设置存活时间,单位: 分钟
4. 解决灾难性雪崩效应-隔离机制-信号量隔离-创建项目
(1) 什么是信号量隔离?
就是设置可以请求到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) 线程池隔离与信号量隔离有什么区别?
(2) 什么情况下使用线程池隔离?
请求并发量大,并且耗时长(请求耗时长一般是计算量大,或读数据库) ; 采用线程隔离策略,这样的话,可以保证大量的容器(tomcat)线程可用,不会因为服务原因,一直处于阻塞或等待状态,快速失败返回
(3) 什么情况下使用信号量隔离?
请求并发量大,并且耗时端(请求耗时短可能是计算量小,或读缓存) :采用信号量隔离策略,因为这类服务的返回通常会非常的快.不会占用容器线程太长时间,而且也减少了线程切换的一些开销,提供了缓存服务的效率
7. Feign的服务降级处理-创建项目
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) 启动服务测试效果。
9. 服务降级后的异常记录
(1) 为什么要记录降级后的异常信息。
根据异常信息诊断服务为为什么没有响应
10. 在项目中开启可视化的数据监控Hystrix-dashboard
(1) 什么是Hystrix-dashboard?
HyStrix-dashboard 是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard 我们可以在直观的看到个Hystrix Command的请求响应时间,请求成功率等数据
(2) @EnableHystrix注解的作用是什么?
启动熔断降级服务
(3) @EnableHystrixDashboard注解的作用是什么?
开启可视化数据监控 dashboard
11. 搭建Hystrix-dashboard数据监控中心
(1) 创建数据监控中心服务。
(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) 按照启动顺序启动服务。
(5) 访问HystrixDashboard服务,查看数据。
12. 创建Turbine聚合服务器
(1) Turbine的作用是什么?
Turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过turbine来监控集群服务
(2) @EnableTurbine注解的作用是什么?
开启Turbine
13. 使用Turbine对多个服务进行监控
(1) Turbine默认监听端口是多少?
9101
(2) @EnableHystrixDashboard注解的作用是什么?
开启数据监控中心
14. 使用Turbine监控集群
(1) 通过Turbine查看集群监控。
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。