package
0.0.0-20190610040403-6b5e447b10fe
Repository: https://github.com/tengrommel/awesomeproject.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# 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的分布式锁,防止集群并发

完善系统