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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

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

   
        
    
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

你可能感兴趣的:(zookeeper实现分布式任务调度系统)