Hystrix使用的隔板图案是什么?


Answers:


193

一般

通常,隔板模式的目的是避免系统某一部分出现故障,从而使整个系统瘫痪。该术语来自将船舶划分为单独的水密舱室以避免将单个船体破损淹没整艘船舶的船舶;它只会淹没一个舱壁。

隔板模式的实现可以采用多种形式,具体取决于要保护系统免受何种类型的故障。我只会在此答案中讨论Hystrix处理的错误类型。

我认为隔板样式已由Release It一书普及了由Michael T. Nygard撰写。

Hystrix解决了什么

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

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

Hystrix的隔板模式实现限制了对组件的并行调用次数,在这种情况下可以节省应用程序。假设我们有30个请求处理线程,并且对C的并发调用限制为10个。然后调用时至多10请求处理的线程可以挂Ç,其他20个线程仍然可以处理请求和使用的组件

Hystrix的方法

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

线程隔离

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

信号量隔离

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

差异性

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


10
另外,在最初的Hystrix Wiki中现在对这两种方法进行了详细说明:github.com/Netflix/Hystrix/wiki/How-it-Works
Dmitry

1
断路器和隔板之间有什么区别?
voipp

4
@voipp断路器是完全不同的事情。它们检测服务何时处于不正常状态,并将调用者移至“快速失败”状态,在此状态下,他们不会调用不健康的服务,而是返回错误代码,直到服务再次正常为止。这样可以避免不正常的服务过载,以便可以恢复,并且可以防止级联失败,因为不会降低呼叫者的速度。
K Erlandsson '18

1

这是一个受Netflix Hystrix启发的Resilience4j中隔板的运行时说明好例子

下面的示例配置可以使用法更加清晰。

配置示例:在任何给定时间最多允许5个并发呼叫。让其他呼叫等待,直到正在进行中的5个并发之一完成或最多2秒为止。

想法是不给任何系统负担过多的负担。如果传入负载大于消耗,则请等待合理的时间或仅等待超时并转到备用路径。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.