一、前言
在分布式系统架构中多个系统之间通常是通过远程RPC调用进行通信,也就是 A 系统调用 B 系统服务,B 系统调用 C 系统的服务。当尾部应用 C 发生故障而系统 B 没有服务降级时候可能会导致 B,甚至系统 A 瘫痪,这种现象被称为雪崩现象。所以在系统设计时候要使用一定的降级策略,来保证当服务提供方服务不可用时候,服务调用方可以切换到降级后的策略进行执行。
二、Hystrix 中基于自反馈调节熔断状态的算法原理
我们可以把熔断器想象为一个保险丝,在电路系统中,一般在所有的家电系统连接外部供电的线路中间都会加一个保险丝,当外部电压过高,达到保险丝的熔点时候,保险丝就会被熔断,从而可以切断家电系统与外部电路的联通,进而保障家电系统不会因为电压过高而损坏。
Hystrix提供的熔断器就有类似功能,当在一定时间段内服务调用方调用服务提供方的服务的次数达到设定的阈值,并且出错的次数也达到设置的出错阈值,就会进行服务降级,让服务调用方之间执行本地设置的降级策略,而不再发起远程调用。但是Hystrix提供的熔断器具有自我反馈,自我恢复的功能,Hystrix会根据调用接口的情况,让熔断器在closed,open,half-open三种状态之间自动切换。
open状态说明打开熔断,也就是服务调用方执行本地降级策略,不进行远程调用。
closed状态说明关闭了熔断,这时候服务调用方直接发起远程调用。
half-open状态,则是一个中间状态,当熔断器处于这种状态时候,直接发起远程调用。
三种状态的转换:
open->half-open:当服务接口对应的熔断器状态为open状态时候,所有服务调用方调用该服务方法时候都是执行本地降级方法,那么什么时候才会恢复到远程调用那?Hystrix提供了一种测试策略,也就是设置了一个时间窗口,从熔断器状态变为open状态开始的一个时间窗口内,调用该服务接口时候都委托服务降级方法进行执行。如果时间超过了时间窗口,则把熔断状态从open->half-open,这时候服务调用方调用服务接口时候,就可以发起远程调用而不再使用本地降级接口,如果发起远程调用还是失败,则重新设置熔断器状态为open状态,从新记录时间窗口开始时间。
half-open->closed: 当熔断器状态为half-open,这时候服务调用方调用服务接口时候,就可以发起远程调用而不再使用本地降级接口,如果发起远程调用成功,则重新设置熔断器状态为closed状态。
那么有一个问题,用来判断熔断器从closed->open转换的数据是哪里来的那?其实这个是HystrixCommandMetrics对象来做的,该对象用来存在HystrixCommand的一些指标数据,比如接口调用次数,调用接口失败的次数等等,后面我们会讲解。
图中流程的说明:
注意:熔断是否开启熔断器主要由依赖调用的错误比率决定的,依赖调用的错误比率=请求失败数/请求总数。Hystrix中断路器打开的默认请求错误比率为50%(这里暂时称为请求错误率),还有一个参数,用于设置在一个滚动窗口中,打开断路器的最少请求数(这里暂时称为滚动窗口最小请求数),这里举个具体的例子:如果滚动窗口最小请求数为默认20,在一个窗口内(默认10秒,统计滚动窗口的时间可以设置),收到19个请求,即使这19个请求都失败了,此时请求错误率高达95%,但是断路器也不会打开。对于被熔断的请求,并不是永久被切断,而是被暂停一段时间(默认是5000ms)之后,允许部分请求通过,若请求都是健康的(ResponseTime<250ms)则对请求健康恢复(取消熔断),如果不是健康的,则继续熔断。(这里很容易出现一种错觉:多个请求失败但是没有触发熔断。这是因为在一个滚动窗口内的失败请求数没有达到打开断路器的最少请求数)
三、总结
系统设计时候要使用一定的降级策略,来保证当服务提供方服务不可用时候,服务调用方可以切换到降级后的策略进行执行,Hystrix作为熔断器组件使用范围还是很广泛的.
学过分布式、微服务知识的朋友们对熔断机制都不会陌生的,即使没有系统化的学习过理论知识,在实际项目开发中也使用过,熔断机制其实就是一种补救措施,不至于一个节点服务宕机了,整个服务系统全部完蛋,从业务层面上看,增强了用户体验,运营角度看,不至于太难看。
Spring Cloud Hystrix熔断机制原理剖析
二、Hystrix 中基于自反馈调节熔断状态的算法原理 我们可以把熔断器想象为一个保险丝,在电路系统中,一般在所有的家电系统连接外部供电的线路中间都会加一个保险丝,当外部电压过高,达到保险丝的熔点时候,保险丝就会被熔断,从而可以切断家电系统与外部电路的联通,进而保障家电系统不会因为电压过高而损坏。
大白话详解Spring Cloud服务降级与熔断
Spring Cloud服务降级与熔断详解复杂分布式系统中的服务不可避免会遇到依赖故障,例如超时、异常等,这可能导致整个系统崩溃。为了解决这一问题,引入了服务降级与熔断机制,如Hystrix,以提高系统的弹性和高可用性。服务降级与服务熔断服务降级是指在遇到依赖服务故障时,提供一个友好的兜底响应,而不是长时间...
SpringCloud微服务的熔断机制和熔断的意义?
Spring Cloud Hystrix提供了一种实现服务熔断的方式,通过HystrixCommand和HystrixObservableCommand等类处理依赖隔离。服务熔断机制的意义在于,即使系统中存在故障,通过熔断机制可以保障整体系统的可用性和容错性。分布式服务的容错通常通过重试机制或断路器模式实现。断路器模式提供稳定性,帮助系统快速从故障中恢复...
【SpringCloud】服务降级与服务熔断:Hystrix
服务降级与服务熔断是SpringCloud Hystrix的重要特性,它们旨在应对服务器异常,保护系统稳定。服务降级在异常发生时提供备用方案,而服务熔断则在多次降级后自动拒绝请求,避免雪崩效应。JMeter是一个多线程压力测试工具,可以用于评估系统承受压力的能力,但本文将主要关注Hystrix的实现方法。服务降级在Hystrix中可...
springcloud-熔断Hystrix
跳闸机制 :当某服务的错误率超过一定阈值时,Hystrix可以自动或者手动跳闸,停止请求该服务一段时间。资源隔离 :Hystrix为每个依赖都维护了一个小型的线程池(或者信号量)。如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等候,从而加速失败判定。监控 :Hystrix可以近乎实时地监控运行指标...
springcloud熔断机制说法错误的是
熔断机制是微服务架构中的一种重要策略,用于防止级联故障,并确保系统的整体稳定性。在Spring Cloud中,熔断机制通常通过Hystrix这样的库来实现。Hystrix提供了熔断器模式,当某个服务调用失败率达到一定阈值时,熔断器会打开,后续的调用将不再转发到目标服务,从而快速失败,避免持续的、不必要的请求增加系统...
把Spring Cloud 给拆了!你知道每个组件的原理吗?
Hystrix是Spring Cloud中的服务熔断和断路器库,用于处理分布式系统的延迟和容错。Hystrix通过监控微服务间调用的状况,当失败的调用达到一定阈值时,启动熔断机制,避免级联故障。Spring Cloud Config是一个解决分布式系统配置管理的方案。Config Server提供配置文件的存储,而Config Client则通过接口获取配置文件并...
Spring Cloud的5大核心组件详解:Eureka+Hystrix+Zuul+Ribbon
Hystrix提供熔断器功能,容错管理工具,旨在控制服务和第三方库节点的延迟和故障,避免分布式系统中服务间的雪崩效应。通过熔断机制,当某个服务单元发生故障,向调用方返回备选响应,避免长时间等待或异常,确保服务调用方不会长时间占用资源,防止故障蔓延。Zuul是Spring Cloud全家桶中的微服务API网关,所有请求...
SpringCloud组件知识总结(微服务扛把子)
Feign则提供了一种轻量级的HTTP客户端,以接口方式调用远程服务,结合Ribbon和Hystrix实现服务调用的负载均衡和熔断。Feign支持全局和特定服务配置,以及日志和压缩功能。最后,Spring Cloud Gateway作为高性能的API网关,提供统一路由管理,支持动态路由和过滤器,是微服务架构中的重要组成部分。配置中心如Config ...
Spring Cloud中Hystrix仪表盘学习(笔记)
Spring Cloud中的Hystrix是一个关键的故障管理和延迟处理工具,它由Netflix开源,旨在增强系统可用性和容错性。核心功能包括请求包装、资源隔离、实时监控和回退机制。Hystrix Dashboard充当一个可视化平台,允许用户实时查看各Hystrix Command的性能数据,如响应时间、成功率等。在实践单体应用监控时,首先在...