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

时间:2018-01-24 03:18:45

标签: java jvm hystrix circuit-breaker

我希望将resilience4j断路库实施到网络应用中。

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

有关环形缓冲区大小和弹性4j与netflix hystrix实施的额外信息:

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

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

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

1 个答案:

答案 0 :(得分:1)

完全同意吉姆加里森的意见。

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

  

请求在每秒20到150之间波动,如何确定环形缓冲区的最佳大小?

您应该确定您的系统将正常处理的特定请求的典型错误率是多少,并且电路将保持关闭状态?

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

通过调整CircuitBraker配置,您实际上会在sensitivity and specificity之间取得平衡,这种平衡完全取决于您的业务需求。 例如,如果您的系统安全性和可用性是最重要的,那么您可以接受一些误报电路开路。

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