我最近正在从事一个有关电子合同的春季启动项目。并且有一个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")
})
答案 0 :(得分:0)
您已经知道,有3个主要threadPool配置:
现在让我们从一个例子开始。假设有一个使用hystrix的服务,将其称为HystrixService
和coreSize = 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设置得较高,以防万一您的服务上突然出现吞吐量高峰,它就不会拒绝请求。