数据库备份的动态调度设计和思路

这是学习笔记的第 1786篇文章

关于数据库备份任务的优化,整体可做的改进就是以下几个方面:

  1. 备份任务不应该同时触发,如果有100个备份,都是在同一时间触发,那应该是一种很糟糕的情况
  2. 备份任务的执行时间应该可控,比如有100个任务,那么这些任务总体的起始时间和结束时间应该可控,如果截止时间不可控,那么也是一种混乱状态

在此之上,就是一些细节的改善了。之前介绍过一篇MySQL备份任务的文章

通用crontab接入任务调度的思考

总体来说,如果切入点是备份,其实直接接入celery不是一个很理想的方案,因为备份任务的执行时间一般都偏长,而且任务的执行结果很重要,如果没备份或者备份任务重复执行,对于线上业务的影响还是很大的,所以对于celery的切入点建议有两个:

  1. 最好执行粒度是一些小任务,比如执行个简单的脚本或者检查。
  2. 执行的频率和数量要多,通过大量的实践来验证会得到更多的思路。

在这个基础之上,接入备份任务是一个相对自然的事情。 做到的一个折中就是通过crontab来触发任务,而celery只是支持了异步修改crontab的时间配置。所以目前来看,需要做到的深度定制就是任务的编排和时间的编排。

目前基本就是静态的处理,通过自定义的算法是可以支持的。换句话说,我要调度哪些任务都是提前做好配置,然后启用调度器来完成调度分布。这些配置是静态的,一成不变的。所以我们如果需要做得更好,更可控,我们需要引入动态调度。

动态调度的意义是什么,主要就是因为变化,可能的变化有:

  1. 备份集个数的变化,如果发生变化,需要手工标识
  2. 数据库的数据量很可能随着时间的变化而变化,这个通过历史的数据可能不够准确
  3. 备份的结果集大小可能随着数据量的变化而变化
  4. 备份的时间区间也会随着手工调度触发而产生变化,比如之前是1:30触发,结果重新调度之后是2:30
  5. 如果有的任务是全新的,那么它缺少一些必备的维度数据,比如历史备份数据量,备份时间等

这些因素中,我们需要做一些改进,需要通过动态调度来满足几个大体的需求或者改进,而且这个改进目标要足够清晰。 我这边考虑了两个:

  1. 备份任务的编排,到底开启几个并行进程最佳
  2. 备份任务的区间,可以改进到什么程度,比如之前是1:00-3:00,如果通过编排的方式,优化到1:30-2:30,那么这就是一种可见的改进。

所以动态调度不光是启用调度器,而是需要通过大量的计算来得到一个相对高效的执行计划,然后通过历史的执行记录来不断的校正,最终让任务的执行高效可控,而且支撑一键式变化。

这里需要建立一类模型,首先是对于调度器中所做的算法实现,目前是基于备份时间来设计的,其实完全可以切换为另外一种单位形式,比如数据量,比如备份集大小等。

第二类是对于调度基准的改进,如果新服务器没有历史备份数据,我们可以根据预先设计的模型给予参考,比如备份1G需要1分钟,这种粒度的数据配置是根据实践和经验共同组合完成的。有了基准模型,才能知道历史的备份有没有问题,有没有明显的调度问题。 同时,后续要接入备份配置的时候,也就有了相对准确的参考数据。

第三类是对于历史数据的分析,也是此次调度中的核心部分,那就是通过历史数据的分析和计算,能够得出初步的结论,比如开启几个并行最为合适,备份的时间窗口等。

第四类是对于这个任务的调度,应该是自动触发,需要通过事件或者阈值的方式来触发。尽可能保证不要无理由的频繁变更,而是变更都在计划内,改动幅度较小。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2018-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

2018-11-20 CG Pipeline: 最佳图数据库性能对比--为您的CG生产数据服务

https://www.google.com.ph/search?q=%E5%9B%BE%E6%95%B0%E6%8D%AE%E5%BA%93%E6%AF%94...

19920
来自专栏HappenLee的技术杂谈

分布式系统的烦恼------《Designing Data-Intensive Applications》读书笔记11

当我们在使用单机系统时,它通常以一种相当可预测的方式工作:要么它正常工作,要么不工作。

9430
来自专栏各种机器学习基础算法

标准的经营类业务流程

一、标准的经营类业务流程是这样的,想来一个么? 1.特性开发环境:自动隔一段时间如5分钟从branches分支持同步svn代码。无需申请 2.主干测试...

33050
来自专栏运维小白

18.1 集群介绍

Linux集群概述 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服...

19680

3种提升云可扩展性的方法

如果只为计算资源付费,在Amazon云上部署业务可以实现高拓展性。但是要怎样利用Amazon的相关技术才能获得最好的可拓展性呢?

21090
来自专栏HBStream流媒体与音视频技术

做了一个电驴 p2p资源搜索小软件

64170
来自专栏Java社区

免费领取使用优酷会员,爱奇艺会员,腾讯会员及各大视频网站会员

1.2K30
来自专栏PHP在线

mysql 分库分表

分表是分散数据库压力的好方法。 分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库。 当然,首先要知道什么情况下,才需要...

54060
来自专栏北京马哥教育

分布式与集群的联系与区别

集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单...

29230
来自专栏风中追风

分布式基础_All-In-One到SOA的分布式架构演进

在诞生之初始,应用与数据库是部署在同一台机器上,这时的用户量、数据量规模都比较小,这样的架构既简单实用、便于维护,成本又低,成为了这个时代的主流架构方式。随着用...

41290

扫码关注云+社区

领取腾讯云代金券