zoukankan      html  css  js  c++  java
  • hystrix两种隔离模式分析

    hystrix隔离模式目前有两种方式:信号量模式和线程池模式。

    但信号量并不支持超时,当被调服务发生问题时,有少部分用户会长时间无法得到响应。

    另外,使用线程池模式无法传递Header,我估计是由于线程切换,参数传递过程中被去掉了。

    信号量和线程池对比:

     

    是否有线程切换

    是否支持异步

    是否支持超时

    是否支持熔断

    开销大小

    是否支持限流

    信号量

    线程池

    目前hystrix熔断器支持的隔离策略主要是信号量和线程池两种方式

    信号量的使用示意图如下图所示,当n个并发请求去调用一个目标服务接口时,都要获取一个信号量才能真正去调用目标服务接口,但信号量有限,默认是10个,可以使用maxConcurrentRequests参数配置,如果并发请求数多于信号量个数,就有线程需要进入队列排队,但排队队列也有上限,默认是 5,如果排队队列也满,则必定有请求线程会走fallback流程,从而达到限流和防止雪崩的目的。

    信号量模式从始至终都只有请求线程自身,是同步调用模式,不支持超时调用,不支持直接熔断,由于没有线程的切换,开销非常小。

    线程池的使用示意图如下图所示,当n个请求线程并发对某个接口请求调用时,会先从hystrix管理的线程池里面获得一个线程,然后将参数传递给这个线程去执行真正调用。线程池的大小有限,默认是10个线程,可以使用maxConcurrentRequests参数配置,如果并发请求数多于线程池线程个数,就有线程需要进入队列排队,但排队队列也有上限,默认是 5,如果排队队列也满,则必定有请求线程会走fallback流程。

    线程池模式可以支持异步调用,支持超时调用,支持直接熔断,存在线程切换,开销大。

  • 相关阅读:
    控制流测试与条件测试
    12306的“短信公众号”到底是个啥?
    ISTQB名词辨析
    ISTQB TA
    启动Chrome时自动开启开发者模式
    LoadRunner Community Edition 12.60 无法获取Community License
    用言的活用声调变化规则
    ISTQB TTA大纲中提到的参考书目
    Java调用方法参数究竟是传值还是传址?
    Java中的Lambda表达式简介及应用
  • 原文地址:https://www.cnblogs.com/java-synchronized/p/7927726.html
Copyright © 2011-2022 走看看