Hystrix面试要点总结

本文介绍了在微服务和涉及外部系统调用的场景中,Hystrix断路器如何通过资源隔离、线程池和信号量控制,防止服务故障扩散。重点讲解了熔断机制、fallback功能以及失败率统计方法,确保系统在面对故障时能提供优雅降级和有效的错误处理。
摘要由CSDN通过智能技术生成

使用场景

一般是微服务或者涉及到调用外部系统的场景(有I/O操作)。

解决了什么问题

简单来说,就是阻止某一个依赖服务的故障在整个系统中蔓延。具体有如下措施:

资源隔离

线程池隔离

可以为每个服务分配一个线程池,我们的代码是交给hystrix创建的线程执行的,而不是调用线程(比如tomcat的工作线程)。好处是当一个服务出现故障无法正常响应请求,导致线程池的线程耗尽,也不会影响当前服务对其他服务的调用。

信号量隔离

为每个服务分配一个Semaphore,这种用法感觉更像是限流,我们的代码是调用线程执行的,通过Semaphore控制并行调用微服务的线程数。

熔断机制

当所依赖的服务出现故障时,断路器能保护当前服务不会出现资源耗尽的情况,说白了就是防止线程全部阻塞在等待响应上。hystrix对每个请求都会进行记录并统计,当异常比达到50%时就会触发断路器。当断路器为打开状态时,不会去调用外部服务,而是会快速失败并执行fallback(执行降级逻辑)。

fallback

提供fallback优雅降级的支持。就算系统故障了,那也得给客户端(调用方)一个响应吧。这个降级方案中的的数据有两个来源:

  • 缓存的数据
  • 默认值

总体流程

在这里插入图片描述

断路器执行原理

Hystrix 断路器有三种状态,分别是关闭(Closed)、打开(Open)与半开(Half-Open),三种状态转化关系如下:

在这里插入图片描述

  • Closed: 断路器关闭,调用下游的请求正常通过
  • Open:断路器打开,阻断对下游服务的调用,直接走 Fallback 逻辑
  • Half-Open:断路器处于半开状态,等待SleepWindowInMilliseconds后,从Open变为Half-Open

如何统计失败率

以滑动窗口为单位来统计失败率,滑动窗口中请求数至少要达到20个才会统计,为什么?因为只有样本数量达到一定规模时统计才有参考价值。试想一下,总共就两个请求,失败一个,失败率就达到50%了,此时打开断路器显然不合适。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值