Как правильно выбрать значение для executeIsolationSemaphoreMaxConcurrentRequests - PullRequest
1 голос
/ 26 марта 2019

Мне интересно, как исправить установленное значение для executeIsolationSemaphoreMaxConcurrentRequests в конфигурации Hystrix для Spring-Cloud-Gateway.Значение по умолчанию - 10, но в нашем случае оно может быть превышено одним пользователем.Как мне выбрать правильное значение?Как рассчитать его на основе временного окна в Hystrix и ожидаемого количества пользователей?

Пример конфигурации ниже:

@Value("${hystrix.circuitBreakerRequestVolumeThreshold : 20}")
private int circuitBreakerRequestVolumeThreshold;

@Value("${hystrix.executionTimeoutInMilliseconds : 30000}")
private int executionTimeoutInMilliseconds;

@Value("${hystrix.circuitBreakerSleepWindowInMilliseconds : 10000}")
private int circuitBreakerSleepWindowInMilliseconds;

@Value("${hystrix.metricsRollingPercentileWindowInMilliseconds : 60000}")
private int metricsRollingPercentileWindowInMilliseconds;

@Value("${hystrix.metricsHealthSnapshotIntervalInMilliseconds : 500}")
private int metricsHealthSnapshotIntervalInMilliseconds;

@Value("${hystrix.circuitBreakerErrorThresholdPercentage : 50}")
private int circuitBreakerErrorThresholdPercentage;

@Value("${hystrix.metricsRollingStatisticalWindowInMilliseconds : 10000}")
private int metricsRollingStatisticalWindowInMilliseconds;


@Value("${hystrix.executionIsolationSemaphoreMaxConcurrentRequests : 50}")
private int executionIsolationSemaphoreMaxConcurrentRequests;

public Consumer<HystrixGatewayFilterFactory.Config> getHystrixConfig(String groupName, String serviceName) {
    return getHystrixConfig(groupName, serviceName, executionTimeoutInMilliseconds);
}

public Consumer<HystrixGatewayFilterFactory.Config> getHystrixConfig(String groupName, String serviceName, int timeout) {
    return config -> config
            .setSetter(HystrixObservableCommand.Setter
                    .withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupName))
                    .andCommandKey(HystrixCommandKey.Factory.asKey(serviceName))
                    .andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
                            .withCircuitBreakerEnabled(true)
                            .withCircuitBreakerRequestVolumeThreshold(circuitBreakerRequestVolumeThreshold)
                            .withExecutionIsolationSemaphoreMaxConcurrentRequests(executionIsolationSemaphoreMaxConcurrentRequests)
                            .withExecutionTimeoutInMilliseconds(timeout)
                            .withCircuitBreakerSleepWindowInMilliseconds(circuitBreakerSleepWindowInMilliseconds)
                            .withMetricsRollingPercentileWindowInMilliseconds(metricsRollingPercentileWindowInMilliseconds)
                            .withMetricsHealthSnapshotIntervalInMilliseconds(metricsHealthSnapshotIntervalInMilliseconds)
                            .withCircuitBreakerErrorThresholdPercentage(circuitBreakerErrorThresholdPercentage)
                            .withMetricsRollingStatisticalWindowInMilliseconds(metricsRollingStatisticalWindowInMilliseconds)
                    )
            )
            .setFallbackUri("forward:/hystrixfallback");
}
...