ECTS 分布式定时任务管理系统
简介⌗
Elastic Crontab System 是基于 Golang 开发的一款分布式定时任务管理系统,并采用 ETCD
作为服务治理的核心组件。使用 ETCD
的对指定前缀 Key
的监听机制,实现流水线到 Worker
节点的分发。
架构⌗
理念⌗
流水线⌗
流水线(Pipeline)是一组任务(Task)的集合,你可以为流水线定义名称、描述、成功或失败时触发的任务和调度时间。并在流水线中关联已有的任务。这样流水线就可以分配到指定的 Worker 节点上进行调度。只有当流水线中包含的所有任务都执行成功后,整个流水线才算执行完成。中间有任意任务失败,则该流水线本次调度结果视为失败。
任务⌗
任务(Task)是流水线中的最小可执行单位,不能单独被调度,目前支持如下任务类型:
- Shell 任务
- Mail 通知任务
- Hook 任务
- Http 任务
每个任务都可以被绑定到多个流水线中,这样就意味着,同样的任务无需在不同节点上多次定义。大大提高了管理效率。每个任务都会在被调度时记录执行日志,便于用户查看某个流水线在指定节点上,运行的任务结果。
安装⌗
ETCD⌗
考虑到性能,这里采用的是 ETCD 3.3.12 版本,如果只有单机环境可以直接运行 etcd single 命令来部署单节点服务。
$ docker run -d \
--name etcd \
-p 2379:2379 \
-p 2380:2380 \
--volume=/private/var/local/etcd/data:/data \
gcr.io/etcd-development/etcd:v3.3.12 \
/usr/local/bin/etcd \
--name etcd \
--data-dir /data \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://0.0.0.0:2379 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-advertise-peer-urls http://0.0.0.0:2380 \
--initial-cluster etcd=http://0.0.0.0:2380 \
--initial-cluster-token betterde \
--initial-cluster-state new
MySQL⌗
开发环境中 MySQL 采用的是 8.0.11,所以至少需要 7.* 及以上的 MySQL 版本。
$ docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your-secret-pw mysql:8.0.11 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
ECTS⌗
$ git clone [email protected]:betterde/ects.git
$ cd ects && docker build -t ects:latest .
docker run --rm -p 9701:9701 ects:latest ects init
项目提供了 Docker Compose 的部署方式
docker-compose up -d
更多信息参考官方文档的 服务配置
管理⌗
服务管理的详细文档请参考 管理任务
贡献⌗
项目托管在 Github,如果你在使用中遇到任何问题可以,在这里提出问题,或者贡献你的代码,你的关注将让我们走的更远!
I hope this is helpful, Happy hacking…