我正试图找出Marathon的指数退避配置。这是文档:
将backoffSeconds和backoffFactor值相乘,直到达到maxLaunchDelaySeconds值。在达到该值后,Marathon会等待maxLaunchDelaySeconds,然后以指数方式重复此循环。例如,如果backoffSeconds:3,backoffFactor:2和maxLaunchDelaySeconds:3600,将有10次尝试启动失败的任务,每次尝试相隔3秒。在这十次尝试之后,Marathon将在重复此循环之前等待3600秒。
我认为指数退避的方式是等待期应该是:
3 * 2 ^ 0 = 3
3 * 2 ^ 1 = 6
3 * 2 ^ 2 = 12
3 * 2 ^ 3 = 24等等
因此每次应用程序崩溃时,Marathon都会等待更长时间再重试。但是,鉴于上面的描述,Marathon的等待逻辑看起来像这样:
int retryCount = 0;
while(backoffSeconds * (backoffFactor ^ retryCount) < maxLaunchDelaySeconds)
{
wait(backoffSeconds);
retryCount++;
}
wait(maxLaunchDelaySeconds);
这符合文档中的说明,因为3 * 2 ^ x&lt; 3600表示x的值小于或等于10.但是,我真的不知道它是如何被称为指数退避,因为等待时间是恒定的。
有没有办法让Marathon每次重启时都会等待更长时间?我误解了医生吗?任何帮助将不胜感激!
答案 0 :(得分:0)
据我了解RateLimiter.scala中的代码,它就像你描述的那样,但后来限制在maxLaunchDelay等待期间。我们说maxLaunchDelay是一小时(3600s)
这给我们带来了典型的2 ^ n图表,请参阅
如果你有其他的backoffFactors,你会获得更大的增长,
例如退避因子10:
或退避因素20:
此外,我看到了此主题的重新设计,代码审核目前在此处打开:https://phabricator.mesosphere.com/D1007
您怎么看?
由于 约翰内斯