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) 业务相关的实现
- 调度流程,日志输出等
总结