设为首页 加入收藏

TOP

系统架构设计之-任务调度系统的设计(二)
2019-09-17 17:45:32 】 浏览:75
Tags:系统 架构 设计 任务 调度
就难办了。难道让这三个实例A,B,C之间互相通信?”

Bill说道:“那样有点麻烦,就变成一个分布式系统下的通信问题了,我们要不用这个数据库做点文章? 反正这个数据库已经存了Job的信息,Trigger的信息,我们就多加一个表吧,就叫LOCKS,这个表里边每一行记录都可以当做一个‘锁’来用。”

张大胖表示不太明白。

“很简单,就是数据库的‘行’锁嘛, 比如SELECT * FROM LOCKS where LOCK_NAME='TRIGGER' FOR UPDATE ,这就把那一行记录给锁住了, 别的事务只能等待当前事务commit以后才能访问。”

张大胖还是不太明白。

“比如,服务器A的实例A在一个事务中先执行了上面SQL, 就把那一行给锁住了,当服务器B的实例B也去执行同样的SQL的时候, 只能等待,对吧? 这不就相当于实例A获得了锁吗?”

“原来如此,以后任何一个调度器实例想要获取Job的运行时间,设置Job的下一次运行时间的时候,都必须先获得这个锁。这样这些分布式的调度器就不会冲突了,只会运行一个特定时间的Job。 我这就去做个详细设计,再来汇报。”

开源

两个月后,“大胖定时任务调度系统 3.0” 开发完毕,在Bill的大力支持和推动下,成功地应用在了公司的项目中。

灵活的设计和扩展性,加上持久化,集群等强大的功能, 系统受到了大家的欢迎。

考虑到很多公司都会有类似的需求,Bill决定把系统开源, 只是“大胖定时任务调度系统”这个名字有点俗,还有点长,Bill把它改名为“Quartz”。

Quartz从此流行开来。

本文转载自:http://www.dalbll.com/Group/Topic/ArchitecturedDesign/5246

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数据库中间件mycat安装与使用 下一篇能够让你装逼的10个Python小技巧

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目