上一篇:SpringCloud—(6)Feign调用服务
1.Hystrix是什么?
当用户调用服务A的时候,这个服务A可能还会与服务B进行交互,服务B可能还会与服务C进行交互,然后最终取得数据并返回,现在服务C因为某个原因无法正常使用了。那么该请求就会一直等待数据响应,直到请求超时。此时因为此请求堵塞了,那么后面其他用户的请求可能也就会进行排队阻塞……在高并发的场景下,这种情况很容易拖垮服务。
Hystrix可以很好的处理这种情况,假设服务C崩了无法正常响应数据了,使用Hystrix之后,我们可以设定一个备份响应
,也就是说:虽然正常的响应数据因为服务崩掉无法获取到,但此时可以响应回去一个我们提前设定好的备份数据
告诉用户我们的服务崩了……避免了因请求长时间的等待而导致的线程短缺、延迟增加以及资源紧张等情况。
1.Hystrix能干啥?
- 服务熔断
服务熔断是为了避免出现上述的请求雪崩效应的一种微服务链路保护机制。
Hystrix会去监控请求链路上的服务调用情况,当失败的调用到达一定的阈值,默认是5s内20次调用失败就会启动服务熔断机制,启动该机制后,会快速返回错误的响应信息,当服务调用正常之后,该条链路恢复正常使用。
服务熔断是发生在服务端。 - 服务降级
举个栗子说明一下什么是服务降级:
马上过年了,大人要给小孩儿发红包,虽然移动支付很方便,但这种情况不能直接拿手机给小孩子微信转账吧。所以很多大人就会到银行柜台去取现金,现在有3个窗口,1号之前一直是专门办理取钱业务的,所以此时窗口1排了大量的队伍。窗口2和3基本上没啥压力。所以此时让窗口2号和3号也开始办理取钱业务,那么1号窗口的压力就会减少很多。等1号窗口度过这个洪峰之后,2号和3号窗口再恢复以前的业务。
服务降级是发生在客户端。 - 服务限流
- 仪表盘实时监控
在pom.xml
文件中导入下面的依赖就可以使用hystrix的仪表盘监控了
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
导入依赖之后,再在项目的启动类上添加注解:@EnableHystrixDashboard
,开启对监控仪表盘的支持
仪表盘的页面及标识注释:
我们可以从Hystrix的仪表盘中清晰监控当前服务调用得情况。