【问题标题】:NestJS - Task Scheduling - Prevent running the same Job in parallel in identical service instances in K8sNestJS - 任务调度 - 防止在 K8s 的相同服务实例中并行运行相同的作业
【发布时间】:2021-05-10 17:38:25
【问题描述】:

我们正在运行一个基于 nestjs 的 monorepo,其中包含几个服务,每个服务在谷歌云 k8s 中至少有两个实例。最近我们实施了几个计划作业来咀嚼存储在 mongo 副本集中的一些数据,并每 10 分钟输出一次结果。我们没有想到的是,拥有相同服务的多个实例将导致运行相同作业的次数与我们在相同确切时间点针对相同确切数据集拥有实例的次数一样多。处理这个问题并让计划作业只在一个实例中运行,在预定义的时间只运行一次的最佳做法是什么?

【问题讨论】:

  • 这个问题你解决了吗?

标签: node.js kubernetes nestjs


【解决方案1】:

您需要在 Cron Job 规范中使用 .spec.concurrencyPolicy 字段并将其设置为 Forbid,以防止同一作业同时运行。

请参阅此 k8s 文档中的并发策略章节:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/

【讨论】:

  • 我们在应用程序中使用 NestJS 任务调度,但我想这也是一个选项,谢谢!
  • #Guillaume Bihet 我在我的 Nest api 中运行了 cron。并发请求会默认工作吗?如果没有,我该怎么办?我已经搜索了它,但找不到任何东西。
猜你喜欢
  • 2015-10-22
  • 2019-06-17
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多