Hystrix服务熔断

1.1对于Hystrix服务熔断我们首先要知道什么是Hystrix

Hystrix是一个应用于处理分布式系统的延迟和容错的开源库,Hystrix可以保证在一个依赖出问题的情况下,不会导致整个体系服务失败,提高了分布式系统的弹性

1.2Hystrix致力于解决的问题--服务雪崩

在分布式架构中会有多个为你服务层级调用而形成的调用链路,例如:在这个链路中某个服务发生异常,请求阻塞,用户的请求就不会得到响应,则tomcat这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞。

2.1Hystrix解决服务雪崩的手段

①线程隔离

②服务降级

往往这两种手段是同时进行的

2.2Hystrix解决服务雪崩的原理

①Hystrix为每一个调用服务分配小的线程构成一个线程池,如果线程池已满 Hystrix会立即开启熔断调用服务将立即被拒绝,默认情况不会采用线程排队加速判定时间

②用户的请求将不直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,请求超时,则会进行降级处理

  1. 断路器状态监控:Hystrix 会监控对远程服务或依赖的调用情况,包括请求成功率、失败率等指标。当失败率超过一定阈值时,Hystrix 断路器会打开,停止向远程服务发送请求。

  2. 快速失败:一旦断路器打开,所有对该服务的请求将立即失败,而不是等待超时。这可以减轻对故障服务的负载,避免大量请求同时涌入导致服务雪崩。

  3. 降级处理:在断路器打开的情况下,Hystrix 提供了降级处理机制,可以执行备选逻辑或返回默认值,以确保系统能够继续提供有限的服务能力。

  4. 半开状态恢复:当断路器打开一段时间后,Hystrix 会尝试进入半开状态,允许部分请求通过并检测服务是否已经恢复。如果发现服务正常,断路器将关闭;否则,继续保持打开状态。

  5. 熔断器自我修复:断路器在触发后会经过一段时间后自动重置(半开状态),并允许少量流量通过以测试服务的恢复情况。这种自我修复机制有助于避免服务长时间处于不可用状态。

*降级服务会优先保证核心服务

Hystrix服务降级的情况为 线程池已满或者更请求超时

接下进行代码演示:

引入依赖:

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
		</dependency>

 开启熔断:在启动类上添加@EnableCirCuitBreaker注解:

@EnableFeignClients
@EnableCircuitBreaker
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AccountApplication {

	public static void main(String[] args) {
		SpringApplication.run(AccountApplication.class, args);
	}

}

编写降级逻辑:给用户一个友好提示

@FeignClient(name = "statistics-service", fallback = StatisticsServiceClientFallback.class)//fallback = StatisticsServiceClientFallback.class 表示当Feign客户端调用失败时,将会使用StatisticsServiceClientFallback 类中的方法作为降级处理

public interface StatisticsServiceClient {

	@RequestMapping(method = RequestMethod.PUT, value = "/statistics/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
	void updateStatistics(@PathVariable("accountName") String accountName, Account account);
	
fallback = StatisticsServiceClientFallback.class 表示当Feign客户端调用失败时,将会使用StatisticsServiceClientFallback 类中的方法作为降级处理

在StatisticsServiceclientFallback这个类中编写降级后的处理:

@Component
public class StatisticsServiceClientFallback implements StatisticsServiceClient {
    private static final Logger LOGGER = LoggerFactory.getLogger(StatisticsServiceClientFallback.class);
    @Override
    public void updateStatistics(String accountName, Account account) {
        LOGGER.error("Error during update statistics for account: {}", accountName);
    }
}

熔断器的三个状态:1.关闭状态 2.打开状态 3.半开状态

1.关闭状态 : 服务一切运行正常

2.打开状态 :服务熔断

3.半开状态  : 当服务熔断一段时间之后,熔断会进入半开状态对服务进行试探 判断服务是否可以重新正常进行,在配置文件中可以设置这段时长。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值