Hystrix系列之属性配置

Hystrix常用属性配置总结如下,详解介绍查看:https://github.com/Netflix/Hystrix/wiki/Configuration#intro
这里写图片描述
几个关键参数下面会进行详细介绍。

线程池大小

  估算原则:线程池大小尽可能小,以便当发生阻塞时最小化对系统的影响。
  估算公式:线程池大小N=峰值QPS * 99%请求处理延时 + 冗余线程M;

隔离策略

策略1:THREAD

  特点:命令由专门的线程池执行,线程池的大小决定了并发请求的上限;
  优点:超时或阻塞时能够资源隔离,不影响业务线程;
  缺点:线程池有额外的调度和线程上线文切换开销;
  适用场景:延时高、网络不稳定(有阻塞)的场景;

策略2:SEMAPHORE

  特点:命令由当前调用线程执行,Semaphore的大小决定了并发请求的上限;
  适用场景:延时低、高并发、无阻塞的场景;
   这里写图片描述

总结

  当请求的服务网络开销比较大的时候,或者是请求比较耗时的时候,我们最好是使用线程隔离策略,这样的话,可以保证大量的容器(tomcat)线程可用,不会由于服务原因,一直处于阻塞或等待状态,快速失败返回。而当我们请求缓存这些服务的时候,我们可以使用信号量隔离策略,因为这类服务的返回通常会非常的快,不会占用容器线程太长时间,而且也减少了线程切换的一些开销,提高了缓存服务的效率。

代码示例

HystrixCommandProperties设置
public HystrixCommandProperties.Setter getCommandPropertiesSetter() {
        HystrixCommandProperties.Setter cs = HystrixCommandProperties.Setter()
                .withCircuitBreakerErrorThresholdPercentage(30).withCircuitBreakerRequestVolumeThreshold(20)
                .withCircuitBreakerSleepWindowInMilliseconds(5);
        return cs;
    }
HystrixThreadPoolProperties设置
    public HystrixThreadPoolProperties.Setter getThreadPoolPropertiesSetter() {
        HystrixThreadPoolProperties.Setter ths = HystrixThreadPoolProperties.Setter().withCoreSize(4).withMaximumSize(4)
                .withQueueSizeRejectionThreshold(10);
        return ths;
    }
HystrixCommand设置
public HystrixCommand.Setter getCommandSetter() {
        HystrixCommandGroupKey gk = HystrixCommandGroupKey.Factory.asKey("group1");
        HystrixCommandKey ck = HystrixCommandKey.Factory.asKey("cmdKey1");
        return HystrixCommand.Setter.withGroupKey(gk).andCommandKey(ck)
                .andCommandPropertiesDefaults(getCommandPropertiesSetter())
                .andThreadPoolPropertiesDefaults(getThreadPoolPropertiesSetter());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值