Hystrix实现原理-熔断机制
熔断是参考电路而产生的一种保护性机制,即系统中如果存在某个服务失败率过高时,将开启熔断器,对于后续的调用,不在继续请求服务,而是进行Fallback操作。
熔断所依靠的数据即是Metrics中的HealthCount所统计的错误率。
一个命令的调用过程如图所示:
熔断器的判断流程:
1.一个命令执行前会先运行allowRequest()函数。
allowRequest()函数内部为:
- 先查看熔断器是否强制开启(ForceOpen()),如果开启则拒绝
- 再查看熔断器是否强制关闭(ForceClosed()),如果强制关闭则允许Request,否则进一步判断
- 先做isOpen(),判断熔断器是否开启,如果开启则拒绝访问,如果开启则进一步判断
-
再做allowSingleTest(),熔断器休眠期过后,允许且只允许一个请求,如果这个请求正确执行,则熔断器关闭,如果执行失败,则熔断器再次开启,进入新的熔断周期。
如何判断超时
在运行对应的command时,Hystrix会注册一个Timer到一个定时线程池中,当超时后会启用一个HystrixTimer线程来终止的执行。
线程池的管理是用ThreadPoolExecutor来实现的,当线程池和阻塞队列都满后会抛出RejectedExecutionException,捕获该异常并进行相应状态的处理。
注意:除此之外由程序错误导致的异常,断路器打开都可以导致任务失败进入Fallback
配置
注意:窗口时间必须为桶数量的整数倍,否则会抛出异常
Dashboard
1.Hystrix 自带了一个dashboard,用来监控熔断信息.
2.Dashboard可以监测哪些数据?
3.使用turbine可以监控集群.
网友评论