我有多个服务器,需要在给定时间执行计划的作业。确保单个服务器执行任务
作业在数据库中定义,每个服务器都与之通信。 我需要确保只有一台服务器执行任务。
所以,想象一下这样的场景:
作业计划在未来一段时间T。
在T,两个服务器醒来并执行以下查询:
update messages set claimedBy = <server_id> where claimedBy = null and timeToRun = <the scheduled time> limit 10
每个服务器执行其工作,并在年底,设置
processed
列true
,让大家知道它是实际处理(这个 将有助于服务器崩溃等)。
该方案如何发声?你看到有什么问题吗?
或者,也许这是一个更好的主意,有通过将工作给他们“坐标”的人,所以这个问题也就不存在了一台服务器?