`

hystrix基础学习

 
阅读更多

Hystrix主要通过隔离服务之间的访问点,阻止他们之间的级联故障以及提供回退选项来实现容错.

  Hystrix的容错方法主要:

  1 资源隔离

  2 熔断

  3 降级

1 资源隔离主要指对主线程的隔离,Hystrix提供了2种线程隔离的方式:线程池 和 信号量

线程池隔离 

   Hystrix通过命令的形式将发送请求的对象和执行请求的对象进行隔离,将不同命令的业务请求封装成对应的命令请求。并且为每个command配置一个线程池,当创建一个command时,根据一个配置创建一个线程池,并放入到ConcurrentHashMap,后续相同类型的请求创建command时,将会重用已创建的线程池。

通过将发送请求线程与执行请求的线程分离,可有效防止发生级联故障。当线程池或请求队列饱和时,Hystrix将拒绝服务,使得请求线程可以快速失败,从而避免依赖问题扩散。

优点:

 

  • 保护应用程序以免受来自依赖故障的影响,指定依赖线程池饱和不会影响应用程序的其余部分。
  • 当引入新客户端lib时,即使发生问题,也是在本lib中,并不会影响到其他内容。
  • 当依赖从故障恢复正常时,应用程序会立即恢复正常的性能。
  • 当应用程序一些配置参数错误时,线程池的运行状况会很快检测到这一点(通过增加错误,延迟,超时,拒绝等),同时可以通过动态属性进行实时纠正错误的参数配置。
  • 如果服务的性能有变化,需要实时调整,比如增加或者减少超时时间,更改重试次数,可以通过线程池指标动态属性修改,而且不会影响到其他调用请求。
  • 除了隔离优势外,hystrix拥有专门的线程池可提供内置的并发功能,使得可以在同步调用之上构建异步门面(外观模式),为异步编程提供了支持(Hystrix引入了Rxjava异步框架)
  • 注意:尽管线程池提供了线程隔离,我们的客户端底层代码也必须要有超时设置或响应线程中断,不能无限制的阻塞以致线程池一直饱和。

    缺点:

    线程池的主要缺点是增加了计算开销。每个命令的执行都在单独的线程完成,增加了排队、调度和上下文切换的开销。因此,要使用Hystrix,就必须接受它带来的开销,以换取它所提供的好处。

    通常情况下,线程池引入的开销足够小,不会有重大的成本或性能影响。但对于一些访问延迟极低的服务,如只依赖内存缓存,线程池引入的开销就比较明显了,这时候使用线程池隔离技术就不适合了,我们需要考虑更轻量级的方式,如信号量隔离

   线程隔离- 信号量

上面提到了线程池隔离的缺点,当依赖延迟极低的服务时,线程池隔离技术引入的开销超过了它所带来的好处。

 

https://blog.csdn.net/loushuiyifan/article/details/82702522

 

 

 

 

 

 

 

 

 

   

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics