как установить параметр coreSize в Hystrix? - PullRequest
0 голосов
/ 31 мая 2019

В последнее время я работаю над проектом весенней загрузки с электронным контрактом. И у него есть интерфейс Повышение (). Учитывая, что трафик этого интерфейса будет большим в будущем, Мой Лидер позволил мне использовать Hystrix для его защиты. .И я не использовал его раньше. Я изучаю его и пытаюсь использовать его в интерфейсе. Я использую стратегию изоляции ThreadPool, и я не знаю, как установить параметр coreSize разумный в ThreadPoolProperties. Другими словами, я хочу знать, что я должен следовать, чтобы установить его.

Я провел много исследований, но не получил ответа. Все ответы о значении 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 голосов
/ 01 июня 2019

Как вы уже знаете, существует 3 основных конфигурации потока:

  1. coreSize: количество потоков, которые будут поддерживаться в пуле
  2. maxSize: определяет, сколько дополнительных потоков разрешено в случае необходимости.
  3. maxQueueSize: размер очереди задач

Теперь давайте начнем с примера. Предположим, что есть сервис, использующий 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 ,

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

Теперь вы можете поддерживать maxSize и queueSize немного высокими, чтобы он не отклонял запросы в случае внезапных скачков пропускной способности вашего сервиса.

...