Closed libi closed 5 years ago
项目中的定时任务越来越多,为了防止任务重复执行曾经使用过的方案:
第一种方案没有容错机制,当单个节点宕机,所有定时任务都无法正常执行。
第二种方案不能跟cron一样灵活设定时间,比如需要设定每天1点执行就必须借助数据库或者其他存储手段去轮询,非常低效。
在对比了市面上主流的分布式定时任务库后,发现要不就是过重,要不就是使用复杂或者不能使用golang无缝接入。所以萌生了开发一个分布式定时任务库。
要解决的痛点主要包括:
在参考了gojob源码后想到了全新的解决思路:
将所有节点存入公共存储(目前基本所有项目都使用redis作为缓存库,所以首先开发了redis支持)后使用一致性hash算法来选举出执行单个任务的节点来保证唯一性,所有节点都按照写入的cron预执行,在任务执行入口处根据一致性hash算法来判断该任务是否应该由当前节点执行。
有计划加入 Web 面板吗
目前是作为三方库使用的,web面板暂时还没有
背景
项目中的定时任务越来越多,为了防止任务重复执行曾经使用过的方案:
第一种方案没有容错机制,当单个节点宕机,所有定时任务都无法正常执行。
第二种方案不能跟cron一样灵活设定时间,比如需要设定每天1点执行就必须借助数据库或者其他存储手段去轮询,非常低效。
在对比了市面上主流的分布式定时任务库后,发现要不就是过重,要不就是使用复杂或者不能使用golang无缝接入。所以萌生了开发一个分布式定时任务库。
要解决的痛点主要包括:
原理
在参考了gojob源码后想到了全新的解决思路:
将所有节点存入公共存储(目前基本所有项目都使用redis作为缓存库,所以首先开发了redis支持)后使用一致性hash算法来选举出执行单个任务的节点来保证唯一性,所有节点都按照写入的cron预执行,在任务执行入口处根据一致性hash算法来判断该任务是否应该由当前节点执行。