我希望在 Web 应用程序中实现弹性4j 断路库。
我的应用程序与两个服务通信,每个服务每秒接收 20 到 150 个请求,具体取决于一天中的时间。Resilience4j 使您能够为每个断路器定义配置,从而可以配置阈值和环形缓冲区大小。
有关环形缓冲区大小和弹性 4j 与 netflix hystrix 实现的额外信息:
Hystrix 默认将执行结果存储在 10 个 1 秒的窗口桶中。如果超过 1 秒的窗口存储桶,则会创建一个新存储桶并丢弃最旧的存储桶。该库将执行结果存储在 Ring Bit Buffer 中,没有统计滚动时间窗口。成功调用存储为 0 位,失败调用存储为 1 位。Ring Bit Buffer 具有可配置的固定大小,并将位存储在 long[] 数组中,与布尔数组相比,它可以节省内存。这意味着 Ring Bit Buffer 只需要一个包含 16 个长(64 位)值的数组来存储 1024 个调用的状态。优点是该断路器可以开箱即用地用于低频和高频后端系统,因为在经过时间窗口时不会丢弃执行结果。
我的问题是,随着请求在每秒 20 到 150 之间波动,我如何确定环形缓冲区的最佳大小?如果有人问我同样的问题,我将如何证明我选择的数字是合理的?
如果我将环形缓冲区设置为 100,每秒 20 个请求将需要 5 秒才能填满,而在高峰时段填满不到 1 秒。我不确定我是否应该使用像 hystrix 这样的基于时间的实现,或者我是否可以使用弹性 4j 解决这个问题。