文章目录
- 一、Hystrix是什么?
- 二、为什么要使用Hystrix?
- 三、在哪用?什么时候用?
- 四、Hystrix是如何实现自动服务降级和服务熔断的呢?
一、Hystrix是什么?
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,主要用于隔离访问远程系统、服务和第三方库的点,防止级联故障和提高容错能力。
二、为什么要使用Hystrix?
在微服务架构中,服务之间的调用变得越来越复杂,为了提高系统的可靠性和稳定性,我们需要对服务之间的调用进行监控和控制。Hystrix可以帮助我们实现这个目标,它可以帮助我们在服务调用出现异常时,快速地切换到备用方案,从而保证整个系统的稳定运行。
例如,当所有服务都是健康时,我们的请求流程是这样的:
当后端系统任何一个发生潜在问题时,会阻断整个用户请求。
当流量很大时,单个后端依赖关系变得潜在,可能会导致所有服务器上的所有资源在几秒钟内变得饱和。应用程序中通过网络访问或访问客户端库的每个可能导致网络请求的点都是潜在故障的根源,比故障更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,从而备份队列、线程和其他系统资源,从而导致整个系统出现更多级联故障。
而当我们使用 Hystrix 包装每个底层依赖项时,如上图所示的架构将更改为类似于下图,每个依赖项都是相互隔离的,在发生延迟时它可以让饱和的资源受到限制,并且包含在回退逻辑中,该逻辑决定当依赖项中发生任何类型的故障时要做出什么响应:
三、在哪用?什么时候用?
在微服务架构中,我们可以用hystrix来实现服务间的熔断、降级、限流等功能。当我们需要确保分布式系统中的服务调用具有高可用性和容错能力时,可以使用Hystrix。例如,当某个服务的响应时间过长或者出现故障时,Hystrix可以帮助我们快速地切换到备用方案,从而保证整个系统的稳定运行。
四、Hystrix是如何实现自动服务降级和服务熔断的呢?
- 将所有对外部系统的调用包装在 HystrixCommand 或 HystrixObservableCommand 对象中,该对象通常在单独的线程中执行。
- 超时调用时间超过定义的阈值,有一个默认值 但也可以通过“属性”自定义设置这些超时,以便它们略高于每个依赖项测量的第 99.5 个百分点的性能。当某个服务的失败率达到一定阈值时,Hystrix会自动切换到备用方案,从而防止级联故障,提高系统的可用性。
- 为每个依赖项维护一个小型线程池(或信号量),以防止一个服务的失败影响到其他服务。如果它已满,发往该依赖项的请求将立即被拒绝,而不是排队。
- 测量每次请求的成功、失败(客户端抛出的异常)、超时和线程拒绝。
- 如果服务的错误百分比超过阈值,则手动或自动触发断路器以在一段时间内停止对特定服务的所有请求。
- 当请求失败、被拒绝、超时或短路时执行回退逻辑。
- 近乎实时地监控指标和配置更改。Hystrix提供了强大的监控和配置功能,包括服务健康状况的Metrics等。
以上就是关于Hystrix相关的基础知识,下一篇我们在讲解具体的源码分析。