【问题标题】:Solution for two-node nestjs cron service二节点nestjs cron服务的解决方案
【发布时间】:2022-01-13 18:06:24
【问题描述】:

我有一个 Nestjs cron 服务,它部署到 uat/production 中的两个节点。

如果我有计划在下午 3 点创建的记录,两个节点将同时触发,从而导致数据库中出现重复记录。

我无法使用 redis,因为它会花钱配置。

我也考虑过锁表。

有人对我如何解决这个问题有想法吗?

谢谢!

【问题讨论】:

    标签: concurrency cron nestjs nodes


    【解决方案1】:

    理想的方法是在共享内存中创建一个锁并仅在获得锁时运行。

    您可以使用数据库复制行为。创建一个存储锁的表,并允许 cron 作业仅在他们能够获取锁时触发,否则跳过。如果您对两者中的任何一个都可以执行该作业,则此方法会很好。

    如果你想实现类似循环的执行,你可以使用锁和之前执行的服务的 ID,并将锁授予另一个 ID。但您必须确保有多个 ID。

    如果您固定在两个节点上,一个非常简单的方法是将执行的第一次运行替换 3 小时,并让每个实例每 6 小时运行一次 cron 作业。

    您可以研究在操作系统级别处理并发的不同方式并实现它。

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      相关资源
      最近更新 更多