三、Hystrix特性之限流

本文介绍了Hystrix中的两种限流方式:线程隔离和信号量隔离,并详细解释了如何通过配置参数来实现这两种限流。对于线程隔离,可以通过设置线程池大小和队列大小来达到限流目的;而对于信号量隔离,则直接设置最大并发请求数即可。
限流在日常生活中很常见,比如节假日你去一个旅游景点,为了不把景点撑爆,管理部门通常会在外面设置拦截,限制景点的进入人数(等有人出来之后,再放新的人进去)。

对应到计算机中,比如要搞活动、秒杀等,通常都会限流。

在Hystrix中:
1、如果是线程隔离,可以通过线程数+队列大小限制。参数如下:
hystrix.threadpool.default.coreSize
hystrix.threadpool.default.maxQueueSize
hystrix.threadpool.default.queueSizeRejectionThreshold
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds

2、如果是信号量隔离,可以设置最大并发请求数。参数如下:
hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests
### Hystrix限流、熔断与降级机制 Hystrix 是 Netflix 开源的一个延迟和容错库,旨在通过添加延迟容忍和容错逻辑来帮助分布式系统应对不可避免的失败。以下是关于 Hystrix限流、熔断以及降级的具体原理及其使用方法。 #### 一、Hystrix 熔断机制 Hystrix 提供了一种称为 **断路器模式** 的保护机制,其核心目的是防止服务雪崩效应的发生。当某个微服务调用频繁失败时,断路器会自动切换到打开状态,阻止后续对该服务的所有请求,并快速返回失败响应,从而避免资源耗尽[^1]。 断路器的工作流程如下: - 当请求成功率达到设定阈值以上时,断路器保持关闭状态。 - 如果失败率超过预设比例,则触发断路器进入开启状态。 - 在一段时间后(通常为几秒),断路器进入半开状态,允许少量试探性请求验证目标服务是否恢复正常运行。 配置断路器参数可以通过 `hystrix.command.default.circuitBreaker.errorThresholdPercentage` 和其他属性完成[^3]。 #### 二、Hystrix 限流机制 虽然 Hystrix 主要关注于熔断和降级,但它也支持一定程度上的流量控制。这种限流主要体现在以下几个方面: 1. **线程池隔离** 每个命令都分配独立的线程池或信号量资源,以此限制并发请求数目。如果超出最大容量,额外的请求会被拒绝并直接执行 fallback 方法[^2]。 2. **信号量隔离** 对于那些不需要异步操作或者 I/O 密集型的任务,可以采用信号量代替线程池来进行更轻量化的资源管理。 设置线程池大小可通过以下配置项调整: ```properties hystrix.threadpool.<thread-pool-key>.coreSize=10 ``` 对于信号量数量则有对应的选项: ```properties hystrix.command.<command-key>.execution.isolation.semaphore.maxConcurrentRequests=5 ``` #### Hystrix 降级机制 当远程服务不可用或其他异常情况发生时,Hystrix 能够优雅地处理这些场景,即所谓的“降级”。具体来说,在定义好业务逻辑的同时还需要指定一个 fallback 函数作为备选方案。一旦主路径出现问题,就会转向此函数获取替代结果。 下面给出一段 Java 实现的例子演示如何创建带有降级策略的 HystrixCommand 类实例: ```java public class ExampleCommand extends HystrixCommand<String> { private final String name; public ExampleCommand(String name) { super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))); this.name = name; } @Override protected String run() throws Exception { // 正常情况下访问外部服务 return "Hello " + name; } @Override protected String getFallback() { // 发生错误后的回退逻辑 return "Fallback Hello"; } } ``` 上述代码片段展示了如何利用继承自 `HystrixCommand<T>` 的类构建具有基本功能和服务降级特性的组件[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值