package
0.0.0-20190610040403-6b5e447b10fe
Repository: https://github.com/tengrommel/awesomeproject.git
Documentation: pkg.go.dev
# README
crontab
传统方案 - crontab
- 配置任务时,需要ssh登录脚本服务器进行操作
- 服务器宕机,任务将终止调度,需要人工迁移
- 排查问题低效,无法方便的查看任务状态与错误输出
分布式任务调度
- 可视化web后台,方便进行任务管理
- 分布式架构、集群化调度,不存在单点故障
- 追踪任务执行状态,采集任务输出,可视化log查看
开源项目选型困难
- 多是企业内部开源,维护精力有限,积累问题较多
- 设计文档较少,对社区用户不太友好,引入较为谨慎
从0构建的分布式架构
- master-worker分布式架构
- etcd协调服务
- cap理论
- 事件广播
- Raft协议
- 任务分发
- 分布式锁
- 多任务调度
- 并发设计
- 异步日志
- mongodb分布式存储
- systemctl服务管理
- nginx负载均衡
Shell 命令
- 命令也是程序
- 任务执行原理
- pipe():创建2个文件描述符,fd[0]可读,fd[1]可写
- fork():创建子进程,fd[1]被继承到子进程
- dup2():重定向子进程stdout/stderr到fd[1]
- exec():在当前进程内,加载并执行二进制程序
cron表达式
- 调度多个cron任务
etcd协调服务
- etcd功能介绍
- 将数据存储在集群中的高可用K-V存储
- 允许应用实时监听存储中的K-V的变化
- 能够容忍单点故障,能够应对网络分区
- etcd与Raft的关系
- Raft是强一致的集群日志同步算法
- etcd是一个分布式KV存储
- etcd利用raft算法在集群中同步key-value
- Raft日志概念
- replication:日志在Leader生成,向follower复制,达到各个结点的日志序列最终一致
- term:任期,重新选举产生的leader,其term单调递增
- log index:日志行在日志序列的下标
mongodb分布式存储
- 文档数据库
分布式crontab架构
实现master
- 任务管理HTTP接口:新建、修改、查看、删除任务
- 任务日志HTTP接口:查看任务执行历史日志
- 任务控制HTTP接口:提供强制结束任务的接口
实现worker
- 任务同步 从etcd中把job同步到内存中
- 任务调度 实现调度模块,基于cron表达式调度N个job
- 任务执行 实现执行模块,并发的执行多个job
- 日志保存 对job的分布式锁,防止集群并发