Hystrix学习(3)隔离

来源:互联网 发布:跑步软件修改器 编辑:程序博客网 时间:2024/06/05 18:18

隔离模式

 一个形象的解释是:对系统请求按类型划分成若干个的小岛,当某个小岛被火少光了,不会影响到其他的小岛。

Hystrix依赖的隔离架构,如下图:

这里写图片描述

Hystrix在用户请求和服务之间加入了线程池。

Hystrix为每个依赖调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败判定时间。线程数是可以被设定的。

原理

用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,则会进行降级处理,用户的请求不会被阻塞,至少可以看到一个执行结果(例如返回友好的提示信息),而不是无休止的等待或者看到系统崩溃。

其本质是将服务视为资源,当请求该资源的数量超过了线程池中的数量限制时则不可以再对该资源进行访问,从而保护该资源不会过载而造成阻塞。

例如:将银行的柜员窗口看成服务,窗口外是排队办理业务的客户,假定每个客户的业务需要5分钟,则越靠后的用户等待时间越长。同时,排队的人越多,占用的空间越多(银行大厅被挤爆,导致想去别的窗口办理业务的人根本无法进入大厅,甚至排队排到了大厅门外,此时已经雪崩)。线程池则规定了每个窗口前可以排队的人数上限(例如10人),此时新来的第11人是不可以再到这个窗口前排队的,从而保证该窗口不会因为排队人数过多而阻塞。第11人获得的返回结果可以是去其他窗口办理,或者是无法办理。这时大厅内还有足够的空间留给其他窗口办理业务的人员进出。A窗口排满了, 但是不影响B窗口的正常使用。这就是隔离的效果。如果不隔离,则会发生所有资源都被A窗口占用,其他窗口根本无法正常运作。

0 0
原创粉丝点击