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参与计算。
该模式借鉴了电路熔断的理念,如果一条线路电压过高,保险丝会熔断,防止火灾。
如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。
还是之前的银行柜员的例子,假定处理每个业务的时间是5分钟,当某个柜员的处理速度降低了,超过了5分钟,或者干脆去吃午饭等等原因根本不在座位上,此时熔断机制将不会允许再有客户到其窗口前排队(如果有排队的也无法正常办理业务,只能造成阻塞的发生)。
下面来看看Hystrix是如何熔断的。
熔断器:Circuit Breaker
前一节我们了解了Hystrix利用线程池实现了对服务的隔离。
熔断器是位于线程池之前的组件。
用户请求某一服务之后,Hystrix会先经过熔断器,此时如果熔断器的状态是打开(跳起),则说明已经熔断,这时将直接进行降级处理,不会继续将请求发到线程池。
套用银行柜员的例子,柜员相当于服务,窗口前排队的是线程池,大堂经理则可以看成是熔断器。通常的流程是:客户进门,告诉大堂经理要办什么业务,这时他会判断客户请求的窗口是否在正常处理业务,如果正常,他就会让客户到该窗口排队(也就是进入了线程池),如果不正常,他根本不会让客户去排队。
熔断器相当于在线程池之前的一层屏障。
下面来看一下熔断器的工作原理
每个熔断器默认维护10个bucket
每秒创建一个bucket
每个blucket记录成功,失败,超时,拒绝的次数
当有新的bucket被创建时,最旧的bucket会被抛弃
熔断算法
判断是否进行熔断的依据是:
根据bucket中记录的次数,计算错误率。
当错误率超过预设的值(默认是50%)且10秒内超过20个请求,则开启熔断。
熔断恢复
对于被熔断的请求,并不是永久被切断,而是被暂停一段时间(默认是5s)之后,允许部分请求通过,若请求都是健康的(RT<250ms)则对请求健康恢复(取消熔断),如果不是健康的,则继续熔断。
服务调用的各种结果(成功,异常,超时,拒绝),都会上报给熔断器,计入bucket参与计算。
相关文章推荐
- PHP预定义变量9大超全局数组用法详解
- JQuery日期插件datepicker的使用
- LeetCode *** 306. Additive Number
- Qt实现基于G.729A(G729A)的语音聊天
- 处理mysqldump导出文件案例之文件大小为0
- 2016SDAU编程练习二1010
- shape标签总结
- 简易通讯录
- windows上安装RabbitMQ
- PHP加速器eaccelerator导致php-fpm进程卡死原因分析
- Exercise(5):最大子矩阵
- Linux字符设备注册与注销
- 正则
- 216. Combination Sum III
- 209. Minimum Size Subarray Sum
- java jsp实现网站访问量的统计
- SAR成像基础知识急救箱(零)关于傅里叶变换的几个小困惑
- Android源码分析之——下载并编译源码
- 写出ELGamal公钥密码算法的加密、解密过程
- Docker基础技术:DeviceMapper