关于任务调度的思考

  关于任务调度之前写了一篇很简单的文章 

  其实对于Celery来说,网络上的资源和文档其实还是比较匮乏的,能够坚持坐下来,能够维护起来这样一个项目,确实不易。

    总体来说调度其实就是一个执行器,其中的一个核心就是scheduler,这部分的内容其实在别的编程语言中也有不同的实现和思路。在这里其实我主要想表达的就是我们对于调度的理解和依赖其实不用那么重度,或者调度的思想在其他方面也可以有一些借鉴,看了一圈的技术实现方案和思想,其实对于调度,Oracle数据库的调度就很牛了,不信可以参考下这篇文章。 

所以从这个角度来说,很多技术都是相通的,我们可以借鉴很多的产品思维。

很多同学其实对于任务和调度,日常的操作的区别和联系不是很清楚,我简单总结了下。

对于MySQL备份,这是一个基本业务操作,是一个流程化的操作,最终的目标之一就是通过满足的输入或者参数能够触发逻辑(脚本)完成业务操作。

目前的逻辑调用,可以是通过API的方式去调用,通过封装脚本来实现。

而对于任务来说,MySQL备份可以是这个任务的一个属性,可以对任务指定关联关系。

这个部分核心思想就是做到前后端分离,通过接口化来完成所有相关的操作。

对于调度系统来说,是对上面任务的一个执行器,我们可以把任务的调用方式放在消息队列中(比如Redis)

关于任务调度的思考

所以任务调度的划分,可以严格来说划分为任务系统和调度系统。 任务系统可以和业务操作做关联映射,通过任务入口来在调度中按照指定的频率和时间来执行任务。

从平台来说,任务调度是一个通用模块。不光在MySQL备份中可以使用,安装部署,系统的批量处理任务等都可以使用。

调度模块的分片逻辑是调度系统的一个核心属性,如何合理的分片分组,这是需要通过业务维度来进行划分的,所以在目前的MySQL备份中,调度任务定制了调度算法,后续可以作为通用的一个实现。