数据备份对很多公司来讲是一个非常非常重要的事情,我这里谈谈我们公司的一次数据备份方案诞生的经历,怎么样高效的便宜的备份数据。
2018年8月的一天,突然公司董事长找我谈话,说看到一个创业公司发的贴,说因为腾讯云的事故,他们几年的数据都没有了。董事长问我,云不是宣传安全可靠的吗,怎么会丢数据呢?我上网查看了该公司,一家名为前沿数控的创业公司投诉了腾讯云。
我觉得夸大宣传在国内市场上太普遍了,国家要求运营商降低移动上网费用,结果运营商就推出了不限量套餐,而真实的情况是当你流量达到一定程度后,你会被大大限速,限速的结果是你连微信聊天都不行,套路呀。
我们公司使用的是阿里云,而且购买了阿里云的备份工具,我让公司运维去问问阿里云客服,是不是可以保证我们数据的安全,然后得到了下面答复:
他们答复也符合我的预期,没有人会保证你数据的安全的,而且客服乘机给我们提出了使用混合云备份方案,把数据备份到多个IDC,什么时候都不忘记做生意呀。
我们公司在阿里云的花费已经一个月3万多了,如果购买混合云备份,又会增加不小的开销。经过一番研究后,我建议公司把数据自己备份到其它云,或者自己的本地服务器上面。我们的数据主要有GIT代码和相关设计图片,生产数据库和图片服务器数据。GIT和数据库都有自己的备份工具,代码和设计图片经过处理后备份不算很大,数据库备份也可以接受,但图片服务器数据太大了,有100多个G。我们使用的图片服务器是FastDFS,我让运维找找它有没有自带备份工具,经过几天的研究和查找,运维返回的结果是,没有。100多G的数据,每天异地备份,可能一天也备份不完,而且大大的消耗流量,会占用我们客户的宽带流量,影响客户使用体验。于是,我建议我们要自己开发一个增量备份功能,完成异地数据的备份和恢复。
首先,我们要找到为啥这么多数据,这些数据都是需要备份的吗?经和运维后台开了讨论会后,发现如果用户删除图片,后台并没有从FastDFS里面删除图片,只是从数据库里面删除了图片URL,这样导致FastDFS里面有很多无用的图片,而且为了适配很多不同尺寸的手机,后台会为原图生成多个适配图片,所以真正有效的图片没有那么多。而且,不是所有的图片都是重要的,一些APP论坛的图片,不是非常重要,最关键的是用户信息图片,如车辆图片,驾驶证图片等等。
找到图片的组成结构后,我的设计大概就出来了,目标是实现图片的多级别增量备份,只备份有效数据,不备份系统生成的图片。
1. 通过URL对比,删除旧的孤儿无用图片,为了防止以后产生孤儿图片,我们在数据库里面建立了一个删除URL列表,保留这些删除的链接,定期维护FastDFS的时候根据删除列表删除图片,释放FastDFS空间,不在线上立即删除图片。
2. 备份恢复工具也会根据删除LIST,在做增量更新的时候,删除备份中的相关图片,否则数据恢复时候会导致删除图片恢复回来。
3. 备份工具实现增量备份,备份完毕记录备份节点,方便下次备份找到开始时间点。
4. 备份工具实现增量更新功能,增量更新会把新增的图片和删除的图片更新到之前的备份数据里面。
5. 备份工具进行全量备份,因为首次备份是全量备份。备份工具实现差异级别备份,可以选择备份关键的图片,忽略次要的图片。
实现自己设计的备份工具以后,最大优势就是数据量大大减少了,每天只有100M以下,备份变得高效很多,而且消耗极少的带宽流量。
写这篇文章就是想说明一个道理,云的最大优势是可以让你快速扩容机器数量和带宽,但云不能解决一切问题,很多上层的问题还是需要自己来解决的。云服务商提供的标准化的统一解决方案虽然可以解决很多问题,但不一定是最有效的解决办法,很多时候是一种狗皮膏药的感觉。