Resilience4j 断路器环位缓冲区大小配置

Resilience4j circuit-breaker ring bit buffer size configuration

我希望将 resilience4j 断路库实现到 Web 应用程序中。

我的应用程序与两个服务对话,每个服务每秒接收 20 到 150 个请求,具体取决于一天中的时间。 Resilience4j 为您提供了为每个断路器定义 config 的能力,让您可以配置阈值和环形缓冲区大小。

关于环形缓冲区大小和 resilience4j 与 netflix hystrix 实现的额外信息:

Hystrix 默认情况下将执行结果存储在 10 个 1 秒 window 桶中。如果传递了 1 秒 window 桶,则会创建一个新桶并删除最旧的桶。该库将执行结果存储在 Ring Bit Buffer 中,没有统计滚动时间window。成功调用存储为 0 位,失败调用存储为 1 位。环位缓冲区具有可配置的固定大小,并将位存储在 long[] 数组中,与布尔数组相比,它可以节省内存。这意味着 Ring Bit Buffer 只需要一个 16 长(64 位)值的数组来存储 1024 个调用的状态。优点是此 CircuitBreaker 开箱即用,适用于低频和高频后端系统,因为当时间 window 过去时,执行结果不会被丢弃。

我的问题是,请求在每秒 20 到 150 之间波动,我如何确定环形缓冲区的最佳大小?如果有人问我同样的问题,我如何证明我选择的号码是正确的?

如果我将环形缓冲区设置为 100,每秒 20 个请求将需要 5 秒来填满,而在高峰时段填满需要不到 1 秒。我不确定我是否应该使用像 hystrix 这样的基于时间的实现,或者我是否可以使用 resilience4j 来解决这个问题。

完全同意 Jim Garrison 的观点。

此配置在很大程度上取决于应用程序的要求和行为。 在您得到主要问题的答案之前

With requests fluctuating between 20 and 150 per second, how do I determine the optimal size for the ring buffer?

您应该确定这些特定请求的典型错误率是多少,您的系统将像正常情况一样对待这些请求并且电路将保持关闭状态?

另外,您应该考虑您的系统对异常高错误率的反应速度。

通过调整 CircuitBraker 配置,您实际上会在 sensitivity and specificity 之间取得平衡,这个平衡完全取决于您的业务需求。 例如,如果您的系统将安全性和可用性放在首位,您可以接受一定数量的误报电路开路。

在实际生产系统中,很难从头开始配置 CircuitBreaker,因此请准备好外部化此配置并在需要时进行更改。