您的位置:首页 > 其它

Hystrix学习(4)熔断

2016-04-23 14:48 183 查看
熔断模式

该模式借鉴了电路熔断的理念,如果一条线路电压过高,保险丝会熔断,防止火灾。

如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

还是之前的银行柜员的例子,假定处理每个业务的时间是5分钟,当某个柜员的处理速度降低了,超过了5分钟,或者干脆去吃午饭等等原因根本不在座位上,此时熔断机制将不会允许再有客户到其窗口前排队(如果有排队的也无法正常办理业务,只能造成阻塞的发生)。

下面来看看Hystrix是如何熔断的。

熔断器:Circuit Breaker

前一节我们了解了Hystrix利用线程池实现了对服务的隔离。

熔断器是位于线程池之前的组件。

用户请求某一服务之后,Hystrix会先经过熔断器,此时如果熔断器的状态是打开(跳起),则说明已经熔断,这时将直接进行降级处理,不会继续将请求发到线程池。

套用银行柜员的例子,柜员相当于服务,窗口前排队的是线程池,大堂经理则可以看成是熔断器。通常的流程是:客户进门,告诉大堂经理要办什么业务,这时他会判断客户请求的窗口是否在正常处理业务,如果正常,他就会让客户到该窗口排队(也就是进入了线程池),如果不正常,他根本不会让客户去排队。

熔断器相当于在线程池之前的一层屏障。

下面来看一下熔断器的工作原理



每个熔断器默认维护10个bucket

每秒创建一个bucket

每个blucket记录成功,失败,超时,拒绝的次数

当有新的bucket被创建时,最旧的bucket会被抛弃

熔断算法

判断是否进行熔断的依据是:

根据bucket中记录的次数,计算错误率。

当错误率超过预设的值(默认是50%)且10秒内超过20个请求,则开启熔断。

熔断恢复

对于被熔断的请求,并不是永久被切断,而是被暂停一段时间(默认是5s)之后,允许部分请求通过,若请求都是健康的(RT<250ms)则对请求健康恢复(取消熔断),如果不是健康的,则继续熔断。

服务调用的各种结果(成功,异常,超时,拒绝),都会上报给熔断器,计入bucket参与计算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: