ecodeclub / ecron

大规模分布式任务调度系统(学习版)
Apache License 2.0
63 stars 21 forks source link

ecron的简单实现 #8

Closed hookokoko closed 1 year ago

hookokoko commented 1 year ago

一个基于mysql和http的简单实现,具备基础的任务抢占和执行的功能。只是一个简单能够跑起来的demo。

目前实现没有考虑多节点并发的问题,例如,对于多个节点抢占执行任务的情况,CAS如何做?以及是否是需要考虑加入分布式锁。

应该还有许多未考虑到的地方,希望通过这个简单demo一起讨论改进

hookokoko commented 1 year ago

这一个版本的修改:

  1. 对等模式下,防止多个storage节点抢占冲突,引入了epoch,即只对epoch为0且未抢占的任务才进行抢占
  2. mysql包变量移除,作为创建Storage的参数
  3. db表拆分成,task信息和task执行信息两个表,因为可能一个task会对应多个执行信息

Todo:

  1. storage抢占任务后的续约(通过epoch),解决storage节点崩溃问题

待斟酌:

  1. storage抢占任务的不均衡问题
  2. 执行节点的负载均衡
  3. http任务的抽象
hookokoko commented 1 year ago
  1. 基本实现一个 MySQL Storage 引擎,该引擎能够抢占到任务,并且能够续约,续约能够在任务执行终止之后结束续约
  2. 完善了一下任务的增、改、查
hookokoko commented 1 year ago

你的 HTTP 先留着,先不用删除了。后面我还需要它参考怎么使用这个 storage

ok 当初写的时候也是为了整体能够有个参考~

flycash commented 1 year ago

我先放进去,周末我自己来调整一下