博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper实现分布式任务调度系统
阅读量:6626 次
发布时间:2019-06-25

本文共 661 字,大约阅读时间需要 2 分钟。

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

你可能感兴趣的文章
C语言基于GTK+Libvlc实现的简易视频播放器
查看>>
Solr API例子详解
查看>>
软件开发之通病解析
查看>>
Ubuntu下编译安装vim/gvim 8.0
查看>>
python wxPython 5 (框架 wx.Frame)
查看>>
windows server backup 功能备份虚拟机
查看>>
zookeeper 客户端
查看>>
我的友情链接
查看>>
还不错的上传文件的Django实现
查看>>
将一个函数在主线程执行的4种方法
查看>>
如何在pcDuino Ubuntu上看带Flash的网站
查看>>
(转载)Hive学习笔记--Hive 原理
查看>>
Go1.2新功能简介
查看>>
存储过程学习 10种语法
查看>>
硬派云计费正式发布
查看>>
git add 添加文件
查看>>
CCCallFunc、CCCallFuncND、CCCallFuncN、CCCallFuncO
查看>>
准备就绪
查看>>
salt-master 配置文件详解参考
查看>>
Eclipse插件开发-创建包
查看>>