Spring 整合Quartz 2实现定时任务五:集群、分布式架构实现探讨
2016-11-16 10:12
591 查看
到这里,功能上我们已经全实现了。
但是有时候我们的项目不是部署在一台机器上的,而是一个集群环境,往往我们的定时任务只需要一台机器执行就够了。
那么我们怎么样来实现这种集群环境下的定时任务运行呢?
前面说的支持幂等性可以在一定程序上解决这个问题,网上有版本使用数据库加锁的方式也可以,当然,还可以借助zookeeper等方式来实现更强大的分布式锁。
我在这里主要说的方式并不直接涉及到这个集群的问题,而是讨论这个定时任务运行的架构该如何来搭建,当然集群问题将自然而然得到解决。
在我的思维中,定时任务的架构应该是这样子的,见下图:
有一个集中管理的定时任务中心,所有的定时任务信息都在这里创建、保存并被运行,但是没有具体的业务,所有的业务都在具体的项目中,这样它的资源是非常省的。
当定时任务到了运行的时间,它的职责就是连接消息中心,通过消息中心向外发布一个的消息,可以带上运行的任务信息等参数,至于谁来消费这个消息执行业务它就不关心了。
当项目有定时任务的需求时,只需关注它本身的业务逻辑而不必去写定时任务的代码,只需要向消息中心订阅相应的消息,在接收到消息后执行业务代码即可。
这样定时任务和具体的项目基本就解耦了,当有新项目加入进来时只需要订阅一个消息就能实现定时任务。
在集群环境下,可以根据需要(一台或多台执行)设置消息的消费模式,像metaQ就支持集群中的某一台消费消息,当然,稳妥起见前面说的幂等性还是必不可少的。
这样上面说的问题是不是也得到解决了呢?
当然,具体场景还得具体分析,只有适合的才是最好的。如果项目只要二三台机器就能搞定,显然这个方案是得不尝失的
如果你有更好的想法或者方案,欢迎探讨!
但是有时候我们的项目不是部署在一台机器上的,而是一个集群环境,往往我们的定时任务只需要一台机器执行就够了。
那么我们怎么样来实现这种集群环境下的定时任务运行呢?
前面说的支持幂等性可以在一定程序上解决这个问题,网上有版本使用数据库加锁的方式也可以,当然,还可以借助zookeeper等方式来实现更强大的分布式锁。
我在这里主要说的方式并不直接涉及到这个集群的问题,而是讨论这个定时任务运行的架构该如何来搭建,当然集群问题将自然而然得到解决。
在我的思维中,定时任务的架构应该是这样子的,见下图:
有一个集中管理的定时任务中心,所有的定时任务信息都在这里创建、保存并被运行,但是没有具体的业务,所有的业务都在具体的项目中,这样它的资源是非常省的。
当定时任务到了运行的时间,它的职责就是连接消息中心,通过消息中心向外发布一个的消息,可以带上运行的任务信息等参数,至于谁来消费这个消息执行业务它就不关心了。
当项目有定时任务的需求时,只需关注它本身的业务逻辑而不必去写定时任务的代码,只需要向消息中心订阅相应的消息,在接收到消息后执行业务代码即可。
这样定时任务和具体的项目基本就解耦了,当有新项目加入进来时只需要订阅一个消息就能实现定时任务。
在集群环境下,可以根据需要(一台或多台执行)设置消息的消费模式,像metaQ就支持集群中的某一台消费消息,当然,稳妥起见前面说的幂等性还是必不可少的。
这样上面说的问题是不是也得到解决了呢?
当然,具体场景还得具体分析,只有适合的才是最好的。如果项目只要二三台机器就能搞定,显然这个方案是得不尝失的
如果你有更好的想法或者方案,欢迎探讨!
相关文章推荐
- Spring 整合Quartz 2实现定时任务五:集群、分布式架构实现探讨
- Spring 整合Quartz 2实现定时任务五:集群、分布式架构实现探讨
- spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】
- Spring 和Quartz2 整合实现动态定时任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring与Quartz的整合实现定时任务调度
- Spring 3整合Quartz 2实现定时任务二:动态添加任务
- Spring 3整合Quartz 2实现定时任务一:常规整合
- Spring3.0与Quartz的整合实现定时任务调度
- Spring3.0与Quartz的整合实现定时任务调度
- spring和quartz整合实现定时任务(配置文件配置方式
- Spring整合quartz框架实现任务定时调度
- Spring整合Quartz实现定时任务调度
- spring整合quartz实现定时任务调度
- Spring与Quartz的整合实现定时任务调度
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务二:动态添加任务
- Spring 3整合Quartz 2实现定时任务一:常规整合
- Spring 3整合Quartz 2实现定时任务一:常规整合