定时任务在服务器集群中的实现问题
2015-11-11 10:00
357 查看
服务器集群中,定时任务设计需要解决的问题:
1、如果集群中每台机器都启动定时任务,容易造成数据重复处理的问题。
2、如果采用定时任务开关的方式,只一台机器的开关on,其他机器的开关off,可以避免数据重复处理的问题,但是存在单点故障的问题。
解决方式有:
1、任务从数据库中读,保证只有一台机器可以抢到任务。
2、将任务的定时触发模块、任务的执行模块分离。任务的定时触发模块每台机器都允许触发任务,但是任务的执行模块,只要收到一个执行任务,那么下一个执行任务就被忽略掉。任务开始执行设置running
= true,任务执行完毕设置running = false,当running
为ture时候,下一个任务不允许执行。需要注意的是,一定要在finally中加上running
= false,要不然任务异常的话,下一次任务永远不会再执行了。
3、笨办法:检测一下数据库,判断任务执行的时间,如果这个时间段里处理过了,则后面的请求就跳过,到了下一个时间段再请求,则再次执行就好。如果未处理,则采用抢任务的方式来处理。
1、如果集群中每台机器都启动定时任务,容易造成数据重复处理的问题。
2、如果采用定时任务开关的方式,只一台机器的开关on,其他机器的开关off,可以避免数据重复处理的问题,但是存在单点故障的问题。
解决方式有:
1、任务从数据库中读,保证只有一台机器可以抢到任务。
2、将任务的定时触发模块、任务的执行模块分离。任务的定时触发模块每台机器都允许触发任务,但是任务的执行模块,只要收到一个执行任务,那么下一个执行任务就被忽略掉。任务开始执行设置running
= true,任务执行完毕设置running = false,当running
为ture时候,下一个任务不允许执行。需要注意的是,一定要在finally中加上running
= false,要不然任务异常的话,下一次任务永远不会再执行了。
3、笨办法:检测一下数据库,判断任务执行的时间,如果这个时间段里处理过了,则后面的请求就跳过,到了下一个时间段再请求,则再次执行就好。如果未处理,则采用抢任务的方式来处理。
相关文章推荐
- pAdTy_-4 与其它应用程序的交互
- sql server 建表常用语句 (包括主键,外键 等)
- 八皇后问题
- LeetCode 046 Permutations
- ASP.NET easyUI--datagrid 通过ajax请求ASP.NET后台数据的分页查询
- MySQL存储过程中的3种循环
- EF学习小记
- [Atom] Cannot install package behind a proxy on Win7
- java 重载和重写的区别
- 射频识别技术漫谈(16)——Mifare UltraLight
- 获得 1000 个赞的程序员高薪职业建议
- TableViewCell分割线为一个像素点
- WebRTC中peerconnectclient&server 简析
- 图片上下左右居中
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十五)
- asp.net 信息管理系统中的需填写数据的键值对获取方法
- win10预览版10586怎么升级?win10 10240升级10586的图文教程
- Java中equals和==的区别
- ios的一些开源资源
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十五)