Hystrix

在分布式环境中,许多服务依赖项不可避免地会失败。Hystrix是一个库,呀通过添加延迟容忍和容错逻辑来帮助控制这些分布式服务之间的交互。Hysteix通过隔离服务之间的访问点,停止他们之间的级联故障以及提供后背选择来实现这一点,所有这些都可以提高系统的整体弹性。

服务雪崩
在微服务之间进行服务调用是由于某一个服务故障,导致级联服务故障的现象,称为雪崩效应。雪崩效应描述的是提供方不可用,导致消费方不可用并将不可用逐渐放大的过程。

图解雪崩效应
在这里插入图片描述
当serviceA的流量波动很大的时候,流量经常会突然性增加,那么在这种情况下,就算serviceA能扛得住需求,serviceB和C未必能抗得住这突发的请求。如果C扛不住,那么B的请求也会阻塞,慢慢耗尽B的线程资源,B就会变得不可用。之后A也会变得不可用。
在这里插入图片描述
服务熔断(对调用链路的保护)
当某个服务单元发生故障之后,通过断路器的故障监控,某个异常条件被触发,直接熔断整个服务。向调用方法返回一个符合预期的,可处理的备选响应,而不是长时间的等待或者抛出调用方法无法处理的异常,就保证了服务调用方的线程不会被长时间占用,避免故障在分布式系统中蔓延,乃至雪崩。如果目标服务情况好转则恢复调用。
在这里插入图片描述

当满足一定的阈值的时候或者当失败率达到一定的时候,断路器便会打开,当断路器打开的时候,所有的请求都不会进行转发,一段时间之后,这时候断路器是半开的状态,会让其中一个请求进行转发。如果成功,断路器就会关闭。若失败,断路器打开。
在这里插入图片描述

服务降级(对整个服务的保护)
服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此缓解服务器的压力,以保证核心任务的进行。同时保证部分甚至大部分任务客户能得到正确的响应。也就是当前的请求处理不了了或者出错了,给一个默认的返回。
通俗:关闭系统中边缘服务,保证系统核心服务的正常运行

在这里插入图片描述
降级和熔断总结
共同点:
1.目的一直,都是从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃所采用的技术手段。
2.最终让用户体验到的是某些功能暂时不可达或不可用
3.粒度一般都是服务级别
不同点:

1.触发原因不一样,服务熔断一般是某个服务故障而引起的,而服务降级一般是从整体负荷考虑的。
2.管理目标的层次不太一样,熔断其实是一个框架级别的处理,而降级一般需要对业务有层级之分

熔断必会触发降级,所以熔断也是降级的一种,区别在于熔断是对调用链路的保护而降级是对系统过载的一种保护
服务端以及客户端的降级和熔断的fallback返回值类型必须保持一致

服务熔断的实现
1.引入hystrix的依赖
在这里插入图片描述
2.在相应的方法上添加注解hystrixcommand(也可以更改fallbackmethod为默认的,所有的方法熔断之后会进行fallback的返回)在这里插入图片描述
3.编写fallback方法
在这里插入图片描述
服务降级的实现
1.客户端openfeign+hystrix实现服务降级实现
引入hystrix依赖,配置文件开启feign支持hystrix
在feign客户端调用加入fallback指定降级处理
开发降级处理方法
2.开启openfeign支持服务降级

feign.hystrix.enabled=true

3.在openfeign客户端中加入属性在这里插入图片描述
4.开发fallback处理类
在这里插入图片描述

### Hystrix Circuit Breaker Java Library Usage Examples Hystrix 是 Netflix 开源的一个延迟和容错库,用于隔离远程服务之间的访问点,防止级联失败并提高系统的弹性。以下是关于如何使用 Hystrix 的一些核心概念以及示例代码。 #### 1. 基本原理 Hystrix 使用断路器模式来保护系统免受外部依赖的影响。当某个请求超过设定的时间阈值或者错误率过高时,断路器会自动跳闸,阻止后续请求流向该依赖[^4]。 #### 2. 添加依赖项 为了在项目中集成 Hystrix,需先引入 Maven 或 Gradle 中的相应依赖: 对于 Maven 用户: ```xml <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.18</version> </dependency> ``` 对于 Gradle 用户: ```gradle implementation 'com.netflix.hystrix:hystrix-core:1.5.18' ``` #### 3. 创建 Command 类 通过继承 `HystrixCommand` 并实现其逻辑可以定义一个简单的熔断操作。 ```java public class ExampleCommand extends HystrixCommand<String> { private final String name; protected ExampleCommand(String name) { super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup")); this.name = name; } @Override protected String run() throws Exception { // 实际业务调用逻辑 (可能涉及网络请求或其他耗时操作) return "Hello " + name; } @Override protected String getFallback() { // 当发生异常或超时时返回回退逻辑 return "fallback"; } } ``` #### 4. 调用 Command 执行任务 创建实例并通过 `.execute()` 方法触发实际运行流程;如果需要异步支持,则可改用 `.queue().get()` 来获取 Future 对象的结果。 ```java public static void main(String[] args) throws InterruptedException, ExecutionException { ExampleCommand command = new ExampleCommand("World"); try { System.out.println(command.execute()); // 同步执行方式 } catch (Exception e) { e.printStackTrace(); } Future<String> futureResult = command.queue(); // 异步执行方式 System.out.println(futureResult.get()); } ``` #### 5. 配置参数调整行为 可以通过设置不同的属性来自定义 Hystrix 的工作特性,比如超时时间、线程池大小等。这些配置通常放在 application.properties 文件里完成指定。 ```properties hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=2000 hystrix.threadpool.default.coreSize=10 ``` 以上展示了基本的 Hystrix 应用场景及其简单实现过程[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值