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

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

方案:服务器

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

优势:性能好分布式

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

 

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

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

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

 

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

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

缺点:暂时没发现

相关文章
相关标签/搜索