概述
1,什么是服务雪崩?
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用。
为了保证其高可用,单个服务通常会集群部署。
由于网络原因或者自身的原因,服务并不能保证100%可用,
如果单个服务出现问题,调用这个服务就会出现线程阻塞,
此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。
服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,
这就是服务故障的“雪崩”效应。
为了解决这个问题,业界提出了断路器模型。
2,什么是Hystrix?
Hystrix是由Netflix开源的一个延迟和容错库,Hystrix主要通过以下几点实现延迟和容错。
【1】包裹请求:使用HystrixCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用了设计模式中的“命令模式”。
【2】跳闸机制:当某服务的错误率超过一定的阈值时,Hystrix可以自动或手动跳闸,停止请求该服务一段时间。
【3】资源隔离:Hystrix为每个依赖都维护了一个独立的线程池(或者信号量)。如果该线程池已满, 发往该依赖的请求就被立即拒绝,而不是排队等待,从而加速失败判定。
【4】监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功、失败、超时、以及被拒绝的请求等。
【5】回退机制:当请求失败、超时、被拒绝,或当断路器被打开时,会自动执行回退逻辑。回退逻辑由开发人员自行提供,例如返回一个缺省值。
【6】自我修复:断路器打开一段时间后,会自动进入“半开”状态。
3,工作模式概览图
4,Feign模式如何实现熔断机制?
1,引入hystrix熔断器依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2,为启动类,添加注解@EnableCircuitBreaker
3,常用的方式,我们会结合FeignClient来配置熔断
feign:
hystrix:
enabled: true
4,编码实现熔断处理逻辑,其实就是一种降级处理
@FeignClient(name = "PRODUCT-SERVICE",fallback = ProductService.ProductServiceFallback.class)
public interface IProductService {
//这个主要跟通过 @GetMapping来进行匹配的
@GetMapping("product/list")
public List<Product> list();
@Component
static class ProductServiceFallback implements ProductService{
@Override
public List<Product> list() {
System.out.println("进入Hystrix熔断处理逻辑...");
return new ArrayList<>();
}
}
}
5,默认是1秒时间,没有收到服务端的反馈,就认为超时了,进入熔断处理逻辑
5,总结梳理
1,隔离,Hystrix会创建多个线程池,每个线程池仅仅服务于某个服务的调用,
这样就将多个服务的调用隔离开来,避免相互的影响
2,熔断,为了避免所有线程卡死,熔断就是让服务不要傻等,减少线程卡死的情况
3,降级,熔断之后,正常的业务服务没有正常调用,所以需要有一个补偿处理机制,
比如记录日志信息,然后后续人工跟进恢复数据,这就是降级
最后
以上就是勤恳铃铛为你收集整理的微服务feignclient_17,微服务熔断器Hystrix,防雪崩利器的全部内容,希望文章能够帮你解决微服务feignclient_17,微服务熔断器Hystrix,防雪崩利器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复