实现一个分布式调度系统

2018年的最后一天,是结束,也是开始,2019年希望有更大的收获。大家元旦快乐!!!

前言

  • 工作中经常会用到调度功能,可以依赖现有框架简单的实现一个。之前看过一些开源的调度框架比如 xxl-job,已经非常的成熟。这里也会借鉴其思想自己来学习实现一个相对简单的调度系统。

整体流程

- 项目分为 管理节点和 工作节点
- 在管理节点可以配置任务调度信息
- 启动工作节点,成功后,会向zk进行注册节点信息(可以水平扩展)
- 管理节点选用quartz进行调度,并且通过loadbalance策略选择合适的工作节点。
- 管理节点通过代理类向选择的工作节点发送RPC请求,并且提供了Ha策略,处理失败的情况
- 工作节点接收到请求后执行真正的调度业务

基础模块搭建

  • common::提供通用的一些工具和相关类
  • core::核心实现(包括zk、transport 等功能)
  • entity::数据库和实体类相关
  • manager: 管理节点(包括ha,loadbalance等功能)
  • demo-executor:提供一个简单的工作节点DEMO

实现流程

  • 这里会一步步的来完善我们的系统,主要包括下面几个功能
(1) springboot+quartz整合
 使用quartz的集群模式
 和springboot 进行整合

(2) zk 注册中心的实现
Auto Configureation
服务端启动后创建zkClient,客户端启动后也需要创建zkClient
注册服务,发现服务,监听服务的注册

(3) 高可用 客户端负载均衡
 负载均衡策略
 ha的策略

(4) transport层的实现
- 使用Netty实现RPC的通信

(5) 业务相关的实现
- 调度流程,日志输出等

总结

点赞