首页 > 解决方案 > 水平缩放应用程序中的后台线程

问题描述

目前的情况是我有一个使用一个 SQL 数据库水平扩展的应用程序。定期运行一个后台进程,但我只希望一次调用该后台进程。我试图通过使用数据库行和锁定来实现这一点,但我被卡住了。要求是每天只能成功完成一个批处理作业。

目前我有一个名为 lock 的表,它包含三列:timestamp、lock_id、status。Status 是一个具有三个值的枚举,0 = 未运行,1 = 运行,2 = 完成。

问题是如果批处理作业失败并且状态等于 0,我如何确保只有一个后台进程会重试。如何保证重试场景中只有一个后台进程在运行?

在理想情况下,我想做一个 SELECT 语句来检查锁定表中的状态,如果状态 = 0 表示未运行,则启动后台作业并将状态更改为 1 = 正在运行。但是,如果所有水平扩展的进程同时执行此操作,是否可以保证只执行一个?

谢谢!

标签: sqllockinghorizontal-scaling

解决方案


推荐阅读