gpt4 book ai didi

design-patterns - Hystrix 使用的 Bulkhead 模式是什么?

转载 作者:行者123 更新时间:2023-12-03 04:59:43 25 4
gpt4 key购买 nike

Hystrix 是一个用于复杂分布式系统中延迟和容错的 Netflix API,使用 Bulkhead Pattern线程隔离技术。有人可以详细说明一下吗?

最佳答案

一般

一般来说,隔板模式的目标是避免系统某一部分出现故障而导致整个系统瘫痪。该术语来自于船舶,其中船舶被分成单独的水密舱,以避免单个船体破裂导致整艘船被淹没;它只会淹没一个舱壁。

隔板模式的实现可以采取多种形式,具体取决于您想要保护系统免受哪种故障的影响。我只会在这个答案中讨论 Hystrix 处理的故障类型。

我认为舱壁图案是由 Michael T. Nygard 所著的Release It!一书普及的。

Hystrix 解决什么问题

Hystrix 中的隔板实现限制对组件的并发调用数量。这样,等待组件回复的资源(通常是线程)的数量就受到限制。

假设您有一个基于请求的多线程应用程序(例如典型的 Web 应用程序),该应用程序使用三个不同的组件:ABC 。如果对组件C的请求开始挂起,最终所有请求处理线程都将挂起,等待C的答复。这将使应用程序完全无响应。如果对 C 的请求处理缓慢,如果负载足够高,我们也会遇到类似的问题。

Hystrix 的隔板模式实现限制了对组件的并发调用数量,并且在这种情况下可以保存应用程序。假设我们有 30 个请求处理线程,并且对 C 的并发调用限制为 10 个。那么最多 10 个请求处理线程在调用 C 时可以挂起,其他 20 个线程仍然可以处理请求并使用组件 AB

Hystrix 的方法

Hystrix' 有两种不同的隔离方法:线程隔离和信号量隔离。

线程隔离

标准方法是将所有对组件C的请求移交给一个单独的线程池,该线程池具有固定数量的线程,并且没有(或很小)请求队列。

信号量隔离

另一种方法是让所有调用者在向 C 发出请求之前获得许可(超时时间为 0)。如果无法从信号量获取许可,则不会传递对 C 的调用。

差异

线程池方法的优点是传递给C的请求可以超时,这是使用信号量时不可能实现的。

关于design-patterns - Hystrix 使用的 Bulkhead 模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30391809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com