mirror of
https://github.com/doocs/advanced-java.git
synced 2026-08-18 10:43:29 +08:00
chore: build site with vitepress
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
## Hystrix 隔离策略细粒度控制
|
||||
# Hystrix 隔离策略细粒度控制
|
||||
|
||||
Hystrix 实现资源隔离,有两种策略:
|
||||
|
||||
@@ -7,7 +7,7 @@ Hystrix 实现资源隔离,有两种策略:
|
||||
|
||||
对资源隔离这一块东西,其实可以做一定细粒度的一些控制。
|
||||
|
||||
### execution.isolation.strategy
|
||||
## execution.isolation.strategy
|
||||
|
||||
指定了 HystrixCommand.run() 的资源隔离策略:`THREAD` or `SEMAPHORE`,一种基于线程池,一种基于信号量。
|
||||
|
||||
@@ -29,7 +29,7 @@ HystrixCommandProperties.Setter().withExecutionIsolationStrategy(ExecutionIsolat
|
||||
|
||||
而使用信号量的场景,通常是针对超大并发量的场景下,每个服务实例每秒都几百的 `QPS`,那么此时你用线程池的话,线程一般不会太多,可能撑不住那么高的并发,如果要撑住,可能要耗费大量的线程资源,那么就是用信号量,来进行限流保护。一般用信号量常见于那种基于纯内存的一些业务逻辑服务,而不涉及到任何网络访问请求。
|
||||
|
||||
### command key & command group
|
||||
## command key & command group
|
||||
|
||||
我们使用线程池隔离,要怎么对**依赖服务**、**依赖服务接口**、**线程池**三者做划分呢?
|
||||
|
||||
@@ -47,7 +47,7 @@ public CommandHelloWorld(String name) {
|
||||
|
||||
command group 是一个非常重要的概念,默认情况下,就是通过 command group 来定义一个线程池的,而且还会通过 command group 来聚合一些监控和报警信息。同一个 command group 中的请求,都会进入同一个线程池中。
|
||||
|
||||
### command thread pool
|
||||
## command thread pool
|
||||
|
||||
ThreadPoolKey 代表了一个 HystrixThreadPool,用来进行统一监控、统计、缓存。默认的 ThreadPoolKey 就是 command group 的名称。每个 command 都会跟它的 ThreadPoolKey 对应的 ThreadPool 绑定在一起。
|
||||
|
||||
@@ -64,7 +64,7 @@ public CommandHelloWorld(String name) {
|
||||
}
|
||||
```
|
||||
|
||||
### command key & command group & command thread pool
|
||||
## command key & command group & command thread pool
|
||||
|
||||
**command key** ,代表了一类 command,一般来说,代表了下游依赖服务的某个接口。
|
||||
|
||||
@@ -84,7 +84,7 @@ command key -> 自己的 thread pool key
|
||||
|
||||
说白点,就是说如果你的 command key 要用自己的线程池,可以定义自己的 thread pool key,就 ok 了。
|
||||
|
||||
### coreSize
|
||||
## coreSize
|
||||
|
||||
设置线程池的大小,默认是 10。一般来说,用这个默认的 10 个线程大小就够了。
|
||||
|
||||
@@ -92,7 +92,7 @@ command key -> 自己的 thread pool key
|
||||
HystrixThreadPoolProperties.Setter().withCoreSize(int value);
|
||||
```
|
||||
|
||||
### queueSizeRejectionThreshold
|
||||
## queueSizeRejectionThreshold
|
||||
|
||||
如果说线程池中的 10 个线程都在工作中,没有空闲的线程来做其它的事情,此时再有请求过来,会先进入队列积压。如果说队列积压满了,再有请求过来,就直接 reject,拒绝请求,执行 fallback 降级的逻辑,快速返回。
|
||||
|
||||
@@ -104,7 +104,7 @@ HystrixThreadPoolProperties.Setter().withCoreSize(int value);
|
||||
HystrixThreadPoolProperties.Setter().withQueueSizeRejectionThreshold(int value);
|
||||
```
|
||||
|
||||
### execution.isolation.semaphore.maxConcurrentRequests
|
||||
## execution.isolation.semaphore.maxConcurrentRequests
|
||||
|
||||
设置使用 SEMAPHORE 隔离策略的时候允许访问的最大并发量,超过这个最大并发量,请求直接被 reject。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user