如何在Hystrix中设置coreSize参数?

时间:2019-05-31 12:05:31

标签: hystrix

我最近正在从事一个有关电子合同的春季启动项目。并且有一个raiseContract()接口。考虑到该接口的流量将来会很大,我的领导者让我使用Hystrix对其进行防御我以前没有使用过它,我正在学习它并尝试在界面上使用它。我使用ThreadPool隔离策略,但我不知道如何设置 ThreadPoolProperties中的coreSize参数是合理的。换句话说,我想知道应该遵循什么设置它。

我做了很多研究,但没有得到答案。所有答案都与coreSize,maxQueueSize等的含义有关。

这是我的代码:

@HystrixCommand(
            groupKey = "contractGroup",
            commandKey = "raiseContract",
            fallbackMethod = "raiseContractFallback",
            threadPoolProperties = {
                    @HystrixProperty(name = "coreSize", value = "20"),
                    @HystrixProperty(name = "maxQueueSize", value = "150"),
                    @HystrixProperty(name = "queueSizeRejectionThreshold", value = "100")},
            commandProperties = {
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "15000"),
                    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "5"),
                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
                    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "3000"),
                    @HystrixProperty(name = "fallback.isolation.semaphore.maxConcurrentRequests", value = "20")
            })

1 个答案:

答案 0 :(得分:0)

您已经知道,有3个主要threadPool配置:

  1. coreSize:池中将维护的线程数
  2. maxSize:定义在需要时允许多少额外的线程。
  3. maxQueueSize:任务的队列大小

现在让我们从一个例子开始。假设有一个使用hystrix的服务,将其称为HystrixServicecoreSize = maxSize = n(默认情况),称为maxQueueSize = -1。这意味着一次最多将执行'n'个任务。任何即将到来的额外任务将被拒绝(将执行后备)。

因此,在理想情况下,您必须确保此HystrixService不拒绝任何请求。您需要最多知道HystrixService上有多少个请求。因此,如果HystrixService is 10 Requests per second上的吞吐量为HystrixService,则最大并发请求数可以为 10 。现在,假设HystrixService的延迟时间为2 sec,那么当它响应第一个10请求时,将有10个请求出现。即total requests = 2 * 10 = 20。因此,在这种情况下,coreSize应该是20

这与hystrix documentation中提到的相同,

coreSize = Peak Request per sec × P99 latency + some breathing room

现在,您可以将maxSize和queueSize设置得较高,以防万一您的服务上突然出现吞吐量高峰,它就不会拒绝请求。