【◐系统架构】解决集群环境下定时任务多次执行的办法有哪些?

服务器采用了负载均衡,有两台服务器,部署的代码一样,所以里面的定时任务在某一时间会被同时执行,这就导致了很多其他意外的发生,想要解决的问题基本就三个:单点执行,故障转移,服务状态。

默认固定执行定时任务的服务

在某一台服务上面执行定时任务,其他服务关闭定时任务,或者在定时任务前加判断指定ip,缺点指定的服务出现问题则定时任务无法在运行。

利用MySQL共享锁事务管理机制运行任务

创建定时任务表,name为不同定时任务的指定名称,execute为是否执行中:1执行 0未执行。

由于存在表锁和行锁,因此同一时刻只能有一个事务操作,可以保证只执行一次。

此处更新操作只会成功一次,执行完重新设置excute为0;

利用redis

执行定时任务前先查询 redis 是否有改任务的值,没有就自己 执行,并插入新的 key-value。有的话则不执行。

使用分布式任务调度框架

如Quartz、Xxl-job、Elastic-job等等。

 

posted @ 2023-03-27 09:55  残城碎梦  阅读(312)  评论(0)    收藏  举报