服务降级熔断 - 熔断降级

Hystrix实现原理-熔断机制

熔断是参考电路而产生的一种保护性机制,即系统中如果存在某个服务失败率过高时,将开启熔断器,对于后续的调用,不在继续请求服务,而是进行Fallback操作。

熔断所依靠的数据即是Metrics中的HealthCount所统计的错误率。

一个命令的调用过程如图所示:

服务降级熔断 - 熔断降级_第1张图片

熔断器的判断流程:

1.一个命令执行前会先运行allowRequest()函数。
allowRequest()函数内部为:

  • 先查看熔断器是否强制开启(ForceOpen()),如果开启则拒绝
  • 再查看熔断器是否强制关闭(ForceClosed()),如果强制关闭则允许Request,否则进一步判断
  • 先做isOpen(),判断熔断器是否开启,如果开启则拒绝访问,如果开启则进一步判断
  • 再做allowSingleTest(),熔断器休眠期过后,允许且只允许一个请求,如果这个请求正确执行,则熔断器关闭,如果执行失败,则熔断器再次开启,进入新的熔断周期。


    服务降级熔断 - 熔断降级_第2张图片
服务降级熔断 - 熔断降级_第3张图片
服务降级熔断 - 熔断降级_第4张图片

如何判断超时

在运行对应的command时,Hystrix会注册一个Timer到一个定时线程池中,当超时后会启用一个HystrixTimer线程来终止的执行。

服务降级熔断 - 熔断降级_第5张图片

线程池的管理是用ThreadPoolExecutor来实现的,当线程池和阻塞队列都满后会抛出RejectedExecutionException,捕获该异常并进行相应状态的处理。

注意:除此之外由程序错误导致的异常,断路器打开都可以导致任务失败进入Fallback

配置

服务降级熔断 - 熔断降级_第6张图片
服务降级熔断 - 熔断降级_第7张图片

注意:窗口时间必须为桶数量的整数倍,否则会抛出异常

Dashboard

1.Hystrix 自带了一个dashboard,用来监控熔断信息.
2.Dashboard可以监测哪些数据?
3.使用turbine可以监控集群.

服务降级熔断 - 熔断降级_第8张图片

使用Turbine聚合的服务器集群

服务降级熔断 - 熔断降级_第9张图片

你可能感兴趣的:(服务降级熔断 - 熔断降级)