这是学习笔记的第 1786篇文章
关于数据库备份任务的优化,整体可做的改进就是以下几个方面:
在此之上,就是一些细节的改善了。之前介绍过一篇MySQL备份任务的文章
通用crontab接入任务调度的思考
总体来说,如果切入点是备份,其实直接接入celery不是一个很理想的方案,因为备份任务的执行时间一般都偏长,而且任务的执行结果很重要,如果没备份或者备份任务重复执行,对于线上业务的影响还是很大的,所以对于celery的切入点建议有两个:
在这个基础之上,接入备份任务是一个相对自然的事情。 做到的一个折中就是通过crontab来触发任务,而celery只是支持了异步修改crontab的时间配置。所以目前来看,需要做到的深度定制就是任务的编排和时间的编排。
目前基本就是静态的处理,通过自定义的算法是可以支持的。换句话说,我要调度哪些任务都是提前做好配置,然后启用调度器来完成调度分布。这些配置是静态的,一成不变的。所以我们如果需要做得更好,更可控,我们需要引入动态调度。
动态调度的意义是什么,主要就是因为变化,可能的变化有:
这些因素中,我们需要做一些改进,需要通过动态调度来满足几个大体的需求或者改进,而且这个改进目标要足够清晰。 我这边考虑了两个:
所以动态调度不光是启用调度器,而是需要通过大量的计算来得到一个相对高效的执行计划,然后通过历史的执行记录来不断的校正,最终让任务的执行高效可控,而且支撑一键式变化。
这里需要建立一类模型,首先是对于调度器中所做的算法实现,目前是基于备份时间来设计的,其实完全可以切换为另外一种单位形式,比如数据量,比如备份集大小等。
第二类是对于调度基准的改进,如果新服务器没有历史备份数据,我们可以根据预先设计的模型给予参考,比如备份1G需要1分钟,这种粒度的数据配置是根据实践和经验共同组合完成的。有了基准模型,才能知道历史的备份有没有问题,有没有明显的调度问题。 同时,后续要接入备份配置的时候,也就有了相对准确的参考数据。
第三类是对于历史数据的分析,也是此次调度中的核心部分,那就是通过历史数据的分析和计算,能够得出初步的结论,比如开启几个并行最为合适,备份的时间窗口等。
第四类是对于这个任务的调度,应该是自动触发,需要通过事件或者阈值的方式来触发。尽可能保证不要无理由的频繁变更,而是变更都在计划内,改动幅度较小。