我希望将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来解决这个问题。
答案 0 :(得分:1)
完全同意吉姆加里森的意见。
此配置在很大程度上取决于您的应用程序要求和行为。 在您回答主要问题之前
请求在每秒20到150之间波动,如何确定环形缓冲区的最佳大小?
您应该确定您的系统将正常处理的特定请求的典型错误率是多少,并且电路将保持关闭状态?
此外,您应该考虑系统对异常高错误率的反应速度。
通过调整CircuitBraker
配置,您实际上会在sensitivity and specificity之间取得平衡,这种平衡完全取决于您的业务需求。
例如,如果您的系统安全性和可用性是最重要的,那么您可以接受一些误报电路开路。
在实际生产系统中,从头开始配置CircuitBreaker非常困难,因此请准备外部化此配置并在需要时进行更改。