resilience4j/resilience4j

CircuitBreaker advice taking 2s to execute

Open

#1,377 建立於 2021年3月18日

在 GitHub 查看
 (4 留言) (0 反應) (0 負責人)Java (9,218 star) (1,267 fork)batch import
help wantedneeds investigation

描述

Resilience4j version: 1.2

Java version: 1.8

SpringBoot version: 1.5.2

We are using resilience4j for circuit breaker setup and observing CircuitBreakerAspect.circuitBreakerAroundAdvice taking close to 2 seconds to execute, quite consistently. Any idea what could be the reason for a slow response time? Here's the config related to the circuit breaker -

// default resilience4j.circuitbreaker.configs.default.register-health-indicator=true resilience4j.circuitbreaker.configs.default.sliding-window-size=100 resilience4j.circuitbreaker.configs.default.minimum-number-of-calls=50 resilience4j.circuitbreaker.configs.default.permitted-number-of-calls-in-half-open-state=30 resilience4j.circuitbreaker.configs.default.wait-duration-in-open-state=5000ms resilience4j.circuitbreaker.configs.default.failure-rate-threshold=50 resilience4j.circuitbreaker.configs.default.event-consumer-buffer-size=500 resilience4j.circuitbreaker.configs.default.slow-call-duration-threshold=2000ms resilience4j.circuitbreaker.configs.default.slow-call-rate-threshold=100 resilience4j.circuitbreaker.configs.default.record-exceptions=
com.xyz.exception.ApiCallException // shared resilience4j.circuitbreaker.configs.shared.sliding-window-size=100 resilience4j.circuitbreaker.configs.shared.permitted-number-of-calls-in-half-open-state=30 resilience4j.circuitbreaker.configs.shared.wait-duration-in-open-state=45s resilience4j.circuitbreaker.configs.shared.failure-rate-threshold=50 resilience4j.circuitbreaker.configs.shared.event-consumer-buffer-size=500 // serviceA resilience4j.circuitbreaker.instances.serviceA.baseConfig=default resilience4j.circuitbreaker.instances.serviceA.failure-rate-threshold=30 resilience4j.circuitbreaker.instances.serviceA.wait-duration-in-open-state=1s resilience4j.circuitbreaker.instances.serviceA.record-exceptions=java.lang.RuntimeException resilience4j.circuitbreaker.instances.serviceA.register-health-indicator=true resilience4j.circuitbreaker.instances.serviceA.sliding-window-size=400 resilience4j.circuitbreaker.instances.serviceA.minimum-number-of-calls=200 resilience4j.circuitbreaker.instances.serviceA.permitted-number-of-calls-in-half-open-state=50 resilience4j.circuitbreaker.instances.serviceA.slow-call-duration-threshold=20000ms resilience4j.circuitbreaker.instances.serviceA.slow-call-rate-threshold=100

The serviceA is a slow running service and takes around 5-15 seconds to complete on average.

The circuitBreakerAroundAdvice method is showing up in our monitoring tool to be taking 1.5-2.2 seconds to complete on average when the serviceA is taking around 5-15 seconds to execute successfully for a round trip call during our performance tests when we are hitting around 1600 times over a period of 30 mins.

Note : we cannot upgrade the spring boot version to use the latest resilience4j api at this moment.

貢獻者指南

CircuitBreaker advice taking 2s to execute · resilience4j/resilience4j#1377 | Good First Issue