Hystrix解决的问题
在复杂的分布式系统中,存在多个服务相互依赖的情况,如果某个服务因为某些原因不可用,例如机房的不可靠性、网络服务商的不可靠性等,系统对外界提供的整个功能都将不可用。
在高并发的情况下,单个服务的延迟会导致整个请求都处于延迟状态,可能在几秒内就使得整个服务处于线程负载饱和的状态;
雪崩效应:某个服务的单点故障,导致用户的请求处于阻塞状态,最终结果是整个服务的线程资源消耗殆尽。由于服务的依赖性,会导致依赖于该故障服务的其他服务也处于线程阻塞状态,最终导致这些服务的线程资源消耗,服务不可用,从而导致整个微服务系统都不可用。
Hystrix的设计原则
- 防止单个服务的故障耗尽整个服务的Servlet容器的线程资源;
- 快速失败机制;
- 提供回退方案;
- 使用熔断机制,防止故障扩散到其他服务;
- 提供熔断器的监控组件HyStrix Dashboard,实时监控熔断器的状态
服务集成hystrix
添加jar包依赖
<dependency> |
启动类添加注解@EnableHystrix 开启熔断器功能
如果已经集成feign的话,只需要配置接口实现类和绑定fallback操作
如果集成的是ribbon,则需要在方法上注解@HystrixCommand并指定fallback方法
集成hystrix dashboard
熔断器监控使用hystrix dashboar监控
添加jar包依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency> |
启动类添加注解@EnableHystrixDashboard
通过http://localhost:8764/hystrix进行访问
集成turbine
每个服务都集成Hystrix DashBoard不利于统一管理,使用turbine收集信息能够更好的管理服务的熔断器
引入jar包依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>
|
启动类添加注解@EnableTurbine
配置监控内容
动服务后访问任意服务的hystrix dashboard 监控turbine.stream流
《深入理解ng cloud与微服务构建》