zookeeper实现分布式任务调度系统

        目前项目采用nginx+tomcat来做负载均衡,缺少一个分布式任务调度配置。任务调度在整个系统中是单点故障。为了解决这个问题,研究了一下zookeeper和redis。大家一致的解决方案是用分布式锁。通过zookeeper或者redis来构建一个锁实现。所有系统节点都能获取到这个锁的状态,作为一个共享锁,为系统调度提供分布式部署。

        因为我的系统架构是spring架构。为了减少代码对系统的侵入,扩展spring的任务调度。将分布式任务调度机制写入自定义任务调度中。

   <task:scheduled-tasks scheduler="zkScheduleManager">
        <task:scheduled ref="taskObj" method="print"  fixed-rate="5000"/>
    </task:scheduled-tasks>
zkScheduleManager继承spring的
org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

在各个调度方法中写入分布式任务调度机制。

代码量比较大,下边说一下思路,后续把代码补上。

  1. zookeeper维护server task两个文件夹。server存放连接的节点,task存放注册的任务

  2. 为了防止羊群效应每个服务器上维护一个EPHEMERAL_SEQUENTIAL类型节点。选取序列号最小的节点为主节点。

  3. task节点按照任务名称/主节点id  形式注册到zookeeper

  4. 任务调度时利用反射机制构建任务,并获取task节点中的主节点id与当前节点id比对,是当前服务器进行相关任务调度。





转载于:https://my.oschina.net/hanjiafu/blog/534370

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值