我们在Kubernetes中运行我们的mongock脚本。我们的服务pod有副本,所以在初始化时,第一个副本获取mongock锁,而第二个(和第三个)副本等待轮流。mongock锁按预期工作--一次只运行一个脚本--但是在释放锁和下一次执行获取锁之间有一段时间间隔。在我的测试中,这个间隔大约是3分钟。我们有多达30个副本,因此这将增加相当多的开销,我们的pod的启动时间。
这个间隙是“死时间”--即我们的脚本在此期间不做任何工作。我已经在我们的日志中验证了,第一个脚本执行已经在下一个副本获取锁之前3分钟(大约)释放了锁。
驱动程序文档中有一个maxWaitingForLockMinutes设置:https://www.mongock.io/spring#building-time-driver
如果我将其设置为一个较小的数字(例如1分钟),是否会减少第二次执行等待获取锁的时间?
我们已经使用Spring注解配置了mongock。我已经将这些属性添加到我们的Spring application.properties文件中(来自mongock在线文档中的示例),但看起来mongock并没有读取它们:
mongock:
change-log-repository-name: myChangeLogCollectionName
max-waiting-for-lock-minutes: 1Spring application.properties是放这些东西的好地方吗?
发布于 2021-04-01 06:29:50
实际上,max-waiting-for-lock-minutes有另一层含义。我会试着解释一下:
如果锁被另一个进程获取了300秒,等待锁的mongock将只等待这300秒(加上半秒的余量)。如果max-waiting-for-lock-minutes更大,它就不会使用它,因为它知道它会更早发布,所以它会忽略它。
但是,如果max-waiting-for-lock-minutes较小,则会抛出一个异常,因为Mongock知道您不希望该服务等待尝试那么长时间。
因此,建议的配置始终是略大于Lock-acquired-for-minutes的max-waiting-for-lock-minutes,其最小允许值为2分钟。
发布于 2021-04-04 18:20:47
正如在单独的线程中讨论的那样,这一领域的改进已经确定,并将在版本5中提供,该版本将在6月左右发布。然而,我们将很快提供这一改进的测试版。
https://stackoverflow.com/questions/66880322
复制相似问题