1

我希望在 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 解决这个问题。

4

1 回答 1

2

完全同意吉姆加里森的观点。

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

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

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

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

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

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

于 2018-01-24T11:24:45.960 回答