分布式多应用实现单一定时任务

目标:应用可以部署在多台服务器上,但是定时任务只能由其中一台机器触发。

方案:

1. 应用部署前修改代码或者修改配置,确定某台服务器的某个应用可以启用定时任务功能,其它禁用此功能。

优点:性能好

缺点:部署麻烦易出错、应用一旦崩溃任务即停止。

 

2.使用分布式锁,确保同一时刻,不会出现重复操作,然后记录任务是否执行过,执行过的不执行。

优点:多应用分布式部署,只要有一个应用可用即可用

缺点:某些场景不适用(是否执行过很难判断,比如每隔一分钟执行一次的任务,因为不同服务器和数据库服务器的时间很难确保一致,每隔1天的任务,就推荐这样子做)

 

3.使用数据库乐观锁,程序中存储最新执行版本号$ver,数据库记录任务日志task_log:任务id、最新执行时间、执行版本号等,update task_log set time=now(),version=version+1 where version=$ver 成功,方可执行任务,然后存储最新版本号。update失败的获取最新版本号也存储下来。下次多应用并发或不并发均可仅执行一次任务。

优点:分布式部署高可用,使用数据库乐观锁性能好,解决了方案2的弊端。

缺点:暂时没发现

 

posted @   追极  阅读(1857)  评论(0编辑  收藏  举报
编辑推荐:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示