标准答案

  1. 定时器只属于本进程,重启、暂停和时钟变化都会影响触发。
  2. 可以把任务交给平台调度器和队列,或使用带租约和 fencing 的分布式调度。
  3. 任务本身仍要幂等、可恢复、可观测,并处理执行时间超过周期的重叠。
  4. 低价值任务可以允许重复但要限制并发,关键任务必须保存执行记录。

题目解析

setInterval 属于单个 Node 进程,多实例部署会让每个实例都触发;进程重启、暂停和事件循环阻塞还会造成漏触发、延迟或重叠执行。进程内 boolean 不能跨实例协调。

可以把触发交给平台调度器、队列或共享租约,但租约只解决谁尝试执行,任务本身仍要幂等、可恢复并处理执行超过周期的重叠。

周期任务要明确时区、夏令时、错过窗口、补跑和取消语义。数据库或调度器记录执行状态,才能在实例故障后判断是否接管。

常见误区

  • 误区:用进程内 boolean 防多实例重复。改正:使用外部调度、共享租约或持久化幂等状态。
  • 误区:任务执行超过周期仍无限并发。改正:设置重叠策略、租约和最大并发,必要时跳过或合并窗口。
  • 误区:没有处理时区和夏令时。改正:使用明确的 IANA 时区、触发规则和错过窗口策略。

作者信息