libi / dcron

轻量分布式定时任务库 a lightweight distributed job scheduler library
MIT License
446 stars 76 forks source link

Dcron开发背景 #1

Closed libi closed 5 years ago

libi commented 5 years ago

背景

项目中的定时任务越来越多,为了防止任务重复执行曾经使用过的方案:

第一种方案没有容错机制,当单个节点宕机,所有定时任务都无法正常执行。

第二种方案不能跟cron一样灵活设定时间,比如需要设定每天1点执行就必须借助数据库或者其他存储手段去轮询,非常低效。

在对比了市面上主流的分布式定时任务库后,发现要不就是过重,要不就是使用复杂或者不能使用golang无缝接入。所以萌生了开发一个分布式定时任务库。

要解决的痛点主要包括:

  1. 高一致可靠性
  2. 能复用现在架构内的存储系统,redis或者mysql。
  3. 引入足够方便,使用方法足够简单。

原理

在参考了gojob源码后想到了全新的解决思路:

将所有节点存入公共存储(目前基本所有项目都使用redis作为缓存库,所以首先开发了redis支持)后使用一致性hash算法来选举出执行单个任务的节点来保证唯一性,所有节点都按照写入的cron预执行,在任务执行入口处根据一致性hash算法来判断该任务是否应该由当前节点执行。

wujunze commented 5 years ago

有计划加入 Web 面板吗

libi commented 5 years ago

有计划加入 Web 面板吗

目前是作为三方库使用的,web面板暂时还没有