Hystrix的线程隔离和熔断 解决雪崩问题

Hystix,英文意思是豪猪,全身是刺,看起来就不好惹,是一种保护机制。
Hystix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败。

就是当服务没有响应的时候,能快速给用户响应

雪崩问题

微服务中,服务间调用关系错综复杂,一个请求,可能需要调用多个微服务接口才能实现,多个微服务可能还会调用别的服务,会形成非常复杂的调用链路.

如果一个服务出现了问题,请求会阻塞, 用户不会得到响应,tomcat不会释放这个线程 会一致堆积下去越来越多, 我们知道服务器的并发和线程有限, 一直堆积下去 服务器的资源就会耗尽,从而导致其他的微服务也都不可用,形成雪崩效应.

Hystix解决雪崩问题的手段主要是服务降级

	1.线程隔离 
	2.服务熔断

1.线程隔离

Hystrix为每个服务调配一个小的线程池,如果线程池已满,调用这个服务将被立即拒绝.

用户的请求不再直接访问服务,而是而是通过分配的线程池里面的空闲线程来访问服务,如果线程池已满或者请求超时, 则会进行降级处理 给用户返回一个友好的信息,这样就不会造成阻塞,更不会无休止的等待或者看到系统崩溃.
在这里插入图片描述

	**当目标服务的调用出现故障,我们希望快速失败,
	给用户一个友好提示。因此需要提前编写好失败时的降级处理逻辑,
	要使用HystixCommond来完成:**
@GetMapping("{id}")
@HystrixCommand(fallbackMethod = "queryByIdFallBack")
public String queryById(@PathVariable("id") Long id){
    String url = "http://user-service/user/" + id;
    String user = restTemplate.getForObject(url, String.class);
    return user;
}

public String queryByIdFallBack(Long id){
    log.error("查询用户信息失败,id:{}", id);
    return "对不起,网络太拥挤了!";
}

2.服务熔断

熔断器的三种状态 :

闭合 : 闭合时 一切请求都可以正常访问不会受到任何影响,但是他会统计服务的异常情况,默认统计20次请求, 如果超过50%异常,他会认为这个服务有问题…就会从闭合状态到打开状态, 一旦打开状态 一切请求都会被阻塞 .

打开 : 一旦打开状态 这个服务的一切请求都会被阻塞,他会启用定时器默认休眠5秒,这五秒内一切请求都会被阻塞

半开 : 休眠时间过后, 他会从打开状态 到 半开, 在半开状态时 他会 允许一个请求通过,如果可以正常访问这个服务 他就会闭合熔断 一切请求就都可以正常访问. 如果这个请求还是不行, 他就会再到 打开熔断的状态 重新计时5秒再到半开状态 一直循环.

再加上@HystrixCommand注解的那一刻 熔断器已经生效了…所以不需要实现

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NoBugsBoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值