Answers:
通常,隔板模式的目的是避免系统某一部分出现故障,从而使整个系统瘫痪。该术语来自将船舶划分为单独的水密舱室以避免将单个船体破损淹没整艘船舶的船舶;它只会淹没一个舱壁。
隔板模式的实现可以采用多种形式,具体取决于要保护系统免受何种类型的故障。我只会在此答案中讨论Hystrix处理的错误类型。
我认为隔板样式已由Release It一书普及了!由Michael T. Nygard撰写。
Hystrix中的隔板实现限制了对组件的并发调用次数。这样,等待组件答复的资源(通常是线程)的数量受到限制。
假设你有一个请求基础,多线程应用程序(例如,典型的web应用),其使用三个不同的部件,甲,乙,和Ç。如果对组件C的请求开始挂起,则最终所有请求处理线程将挂起,等待C的答复。这将使应用程序完全无响应。如果对C的请求处理缓慢,并且如果负载足够高,我们也会遇到类似的问题。
Hystrix的隔板模式实现限制了对组件的并行调用次数,在这种情况下可以节省应用程序。假设我们有30个请求处理线程,并且对C的并发调用限制为10个。然后调用时至多10请求处理的线程可以挂Ç,其他20个线程仍然可以处理请求和使用的组件阿和乙。
Hystrix'有两种不同的隔离方法,即线程隔离和信号隔离。
标准方法是将对组件C的所有请求移交给具有固定数量的线程且没有(或较小)请求队列的单独线程池。
另一种方法是让所有调用方在向C请求之前获得许可(超时为0)。如果无法从信号量中获取许可,则不会传递对C的调用。
线程池方法的优点是传递给C的请求可以超时,这在使用信号量时是不可能的。