ECTS 分布式定时任务管理系统

ECTS 分布式定时任务管理系统

很多团队目前仍然采用的依然是 Linux 系统自带的 Crontab 来进行管理的。这样一来,开发人员不得不 SSH 到线上服务器配置定时执行预先写好的脚本或命令。

简介

Elastic Crontab System 是基于 Golang 开发的一款分布式定时任务管理系统,并采用 ETCD 作为服务治理的核心组件。使用 ETCD 的对指定前缀 Key 的监听机制,实现流水线到 Worker 节点的分发。

架构

架构

理念

流水线

流水线(Pipeline)是一组任务(Task)的集合,你可以为流水线定义名称、描述、成功或失败时触发的任务和调度时间。并在流水线中关联已有的任务。这样流水线就可以分配到指定的 Worker 节点上进行调度。只有当流水线中包含的所有任务都执行成功后,整个流水线才算执行完成。中间有任意任务失败,则该流水线本次调度结果视为失败。

任务

任务(Task)是流水线中的最小可执行单位,不能单独被调度,目前支持如下任务类型:

  • Shell 任务
  • Mail 通知任务
  • Hook 任务
  • Http 任务

每个任务都可以被绑定到多个流水线中,这样就意味着,同样的任务无需在不同节点上多次定义。大大提高了管理效率。每个任务都会在被调度时记录执行日志,便于用户查看某个流水线在指定节点上,运行的任务结果。

安装

ETCD

考虑到性能,这里采用的是 ETCD 3.3.12 版本,如果只有单机环境可以直接运行 etcd single 命令来部署单节点服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ 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 版本。

1
2
3
4
5
6
$ 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

1
2
3
$ git clone git@github.com:betterde/ects.git
$ cd ects && docker build -t ects:latest .
docker run --rm -p 9701:9701 ects:latest ects init

项目提供了 Docker Compose 的部署方式

1
docker-compose up -d

更多信息参考官方文档的 服务配置

管理

服务管理的详细文档请参考 管理任务

贡献

项目托管在 Github,如果你在使用中遇到任何问题可以,在这里提出问题,或者贡献你的代码,你的关注将让我们走的更远!

评论