chore: build site with vitepress

This commit is contained in:
yanglbme
2025-04-13 18:44:18 +08:00
parent c6bd514016
commit 5d354f0dcd
91 changed files with 3185 additions and 3374 deletions

View File

@@ -1,4 +1,4 @@
## 深入 Hystrix 线程池隔离与接口限流
# 深入 Hystrix 线程池隔离与接口限流
前面讲了 Hystrix 的 request cache 请求缓存、fallback 优雅降级、circuit breaker 断路器快速熔断,这一讲,我们来详细说说 Hystrix 的线程池隔离与接口限流。
@@ -8,7 +8,7 @@ Hystrix 通过判断线程池或者信号量是否已满,超出容量的请求
限流是限制对后端的服务的访问量,比如说你对 MySQL、Redis、Zookeeper 以及其它各种后端中间件的资源的访问的限制,其实是为了避免过大的流量直接打死后端的服务。
### 线程池隔离技术的设计
## 线程池隔离技术的设计
Hystrix 采用了 Bulkhead Partition 舱壁隔离技术,来将外部依赖进行资源隔离,进而避免任何外部依赖的故障导致本服务崩溃。
@@ -18,7 +18,7 @@ Hystrix 采用了 Bulkhead Partition 舱壁隔离技术,来将外部依赖进
Hystrix 对每个外部依赖用一个单独的线程池,这样的话,如果对那个外部依赖调用延迟很严重,最多就是耗尽那个依赖自己的线程池而已,不会影响其他的依赖调用。
### Hystrix 应用线程池机制的场景
## Hystrix 应用线程池机制的场景
- 每个服务都会调用几十个后端依赖服务,那些后端依赖服务通常是由很多不同的团队开发的。
- 每个后端依赖服务都会提供它自己的 client 调用库,比如说用 thrift 的话,就会提供对应的 thrift 依赖。
@@ -34,7 +34,7 @@ Hystrix 对每个外部依赖用一个单独的线程池,这样的话,如果
简单来说,就是你必须默认 client 调用库很不靠谱,而且随时可能发生各种变化,所以就要用强制隔离的方式来确保任何服务的故障不会影响当前服务。
### 线程池机制的优点
## 线程池机制的优点
- 任何一个依赖服务都可以被隔离在自己的线程池内,即使自己的线程池资源填满了,也不会影响任何其他的服务调用。
- 服务可以随时引入一个新的依赖服务,因为即使这个新的依赖服务有问题,也不会影响其他任何服务的调用。
@@ -44,7 +44,7 @@ Hystrix 对每个外部依赖用一个单独的线程池,这样的话,如果
简单来说,最大的好处,就是资源隔离,确保说任何一个依赖服务故障,不会拖垮当前的这个服务。
### 线程池机制的缺点
## 线程池机制的缺点
- 线程池机制最大的缺点就是增加了 CPU 的开销。<br>
除了 tomcat 本身的调用线程之外,还有 Hystrix 自己管理的线程池。
@@ -58,7 +58,7 @@ semaphore 技术可以用来限流和削峰,但是不能用来对调用延迟
`execution.isolation.strategy` 设置为 `SEMAPHORE`,那么 Hystrix 就会用 semaphore 机制来替代线程池机制,来对依赖服务的访问进行限流。如果通过 semaphore 调用的时候,底层的网络调用延迟很严重,那么是无法 timeout 的,只能一直 block 住。一旦请求数量超过了 semaphore 限定的数量之后,就会立即开启限流。
### 接口限流 Demo
## 接口限流 Demo
假设一个线程池大小为 8等待队列的大小为 10。timeout 时长我们设置长一些20s。