简介

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 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 的部署方式

docker-compose up -d

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

管理

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

贡献

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

I hope this is helpful, Happy hacking…