diff --git a/README.md b/README.md index 841b91c..672c34e 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ - [如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试?](/docs/distributed-system/dubbo-service-management.md) - [分布式服务接口的幂等性如何设计(比如不能重复扣款)?](/docs/distributed-system/distributed-system-idempotency.md) - [分布式服务接口请求的顺序性如何保证?](/docs/distributed-system/distributed-system-request-sequence.md) -- [如何自己设计一个类似 Dubbo 的 rpc 框架?](/docs/distributed-system/dubbo-rpc-design.md) +- [如何自己设计一个类似 Dubbo 的 RPC 框架?](/docs/distributed-system/dubbo-rpc-design.md) ### 分布式锁 - [Zookeeper 都有哪些应用场景?](/docs/distributed-system/zookeeper-application-scenarios.md) @@ -89,6 +89,7 @@ - [基于 request cache 请求缓存技术优化批量商品数据查询接口](/docs/high-availability/hystrix-request-cache.md) - [基于本地缓存的 fallback 降级机制](/docs/high-availability/hystrix-fallback.md) - [深入 Hystrix 断路器执行原理](/docs/high-availability/hystrix-circuit-breaker.md) +- [深入 Hystrix 线程池隔离与接口限流](/docs/high-availability/hystrix-thread-pool-current-limiting.md) ### 高可用系统 - 如何设计一个高可用系统? diff --git a/docs/high-availability/hystrix-circuit-breaker.md b/docs/high-availability/hystrix-circuit-breaker.md index f6247e5..5fd28a8 100644 --- a/docs/high-availability/hystrix-circuit-breaker.md +++ b/docs/high-availability/hystrix-circuit-breaker.md @@ -172,7 +172,7 @@ ProductInfo(id=1, name=iphone7手机, price=5599.0, pictureList=a.jpg,b.jpg, spe 之后的 9 次请求,都不会执行 run() 方法,也就不会打印以下信息。 -``` +```c 调用接口查询商品数据,productId=-1 ``` diff --git a/docs/high-availability/hystrix-introduction.md b/docs/high-availability/hystrix-introduction.md index 5497d52..cfe80e2 100644 --- a/docs/high-availability/hystrix-introduction.md +++ b/docs/high-availability/hystrix-introduction.md @@ -1,4 +1,5 @@ ## 用 Hystrix 构建高可用服务架构 +参考 [Hystrix Home](https://github.com/Netflix/Hystrix/wiki#what)。 ### Hystrix 是什么? 在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是**依赖服务**,有的时候某些依赖服务出现故障也是很正常的。 diff --git a/docs/high-availability/hystrix-thread-pool-current-limiting.md b/docs/high-availability/hystrix-thread-pool-current-limiting.md new file mode 100644 index 0000000..9994821 --- /dev/null +++ b/docs/high-availability/hystrix-thread-pool-current-limiting.md @@ -0,0 +1,19 @@ +## 深入 Hystrix 线程池隔离与接口限流 +前面讲了 Hystrix 的 request cache 请求缓存、fallback 优雅降级、circuit breaker 断路器快速熔断,这一讲,我们来详细说说 Hystrix 的线程池隔离与接口限流。 + +![hystrix-process](/img/hystrix-process.png) + +Hystrix 通过判断线程池或者信号量是否已满,超出容量的请求,直接 Reject 走降级,从而达到限流的作用。 + +限流是限制对后端的服务的访问量,比如说你对 MySQL、Redis、Zookeeper 以及其它各种后端中间件的资源的访问的限制,其实是为了避免过大的流量直接打死后端的服务。 + +### 线程池隔离技术的设计 +Hystrix 采用了 Bulkhead Partition 舱壁隔离技术,来将外部依赖进行资源隔离,进而避免任何外部依赖的故障导致本服务崩溃。 + +> **舱壁隔离**,是说将船体内部空间区隔划分成若干个隔舱,一旦某几个隔舱发生破损进水,水流不会在其间相互流动,如此一来船舶在受损时,依然能具有足够的浮力和稳定性,进而减低立即沉船的危险。 + +![bulkhead-partition](/img/bulkhead-partition.jpg) + +Hystrix 对每个外部依赖用一个单独的线程池,这样的话,如果对那个外部依赖调用延迟很严重,最多就是耗尽那个依赖自己的线程池而已,不会影响其他的依赖调用。 + +### Hystrix 应用线程池机制的场景 diff --git a/docs/high-availability/img/bulkhead-partition.jpg b/docs/high-availability/img/bulkhead-partition.jpg new file mode 100644 index 0000000..15c9915 Binary files /dev/null and b/docs/high-availability/img/bulkhead-partition.jpg differ diff --git a/img/bulkhead-partition.jpg b/img/bulkhead-partition.jpg new file mode 100644 index 0000000..15c9915 Binary files /dev/null and b/img/bulkhead-partition.jpg differ diff --git a/index.html b/index.html index 2df609e..ce85ae5 100644 --- a/index.html +++ b/index.html @@ -53,6 +53,7 @@ +