【问题标题】:How do I decrease the time required for a mongock script to acquire a lock?如何减少 mongock 脚本获取锁所需的时间?
【发布时间】:2021-03-31 01:08:21
【问题描述】:

我们正在 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: 1

Spring application.properties 是存放这些的正确位置吗?

【问题讨论】:

    标签: mongock


    【解决方案1】:

    其实max-waiting-for-lock-minutes还有另外一个意思。我会试着解释一下:

    如果为另一个进程获取锁 300 秒,等待锁的 mongock 将只等待这 300 秒(加上半秒的保证金)。如果max-waiting-for-lock-minutes 更大,它不会使用它,因为它知道它会更早发布,所以它被忽略了。

    但是,如果 max-waiting-for-lock-minutes 更小,则会引发异常,因为 Mongock 知道您不希望该服务等待那么长时间才能尝试。

    因此建议的配置始终是max-waiting-for-lock-minutes 略大于Lock-acquired-for-minutes,允许的最小值为 2 分钟。

    【讨论】:

      【解决方案2】:

      正如在单独的线程中所讨论的,已确定该领域的改进并将在版本 5 中提供,该版本将在 6 月左右发布。不过,我们将尽快提供具有此改进的 BETA 版本。

      【讨论】:

        猜你喜欢
        • 2019-01-13
        • 1970-01-01
        • 2018-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多