海量数据系统如何做备份

前言

目前主流的数据库、文件系统等会存储上百G、上T甚至PT级别的数据。为了保证数据的可靠性,会做数据的容灾,即数据会备份到一台或者多台机器上,以保证避免单点,那海量的数据该如何选择备份呢?期待菠菜能为你解答。

分类

菠菜将数据备份分为两种,一种是基于操作的,一种是基于文件的。

基于操作,就是将对数据的每次操作记录下来,然后同步到备份服务器,备份服务通过记录再做一遍相同的操作,这样可以保证两边的数据一致(mysql的master、slave就采用此方法)。这样优点是同步效率高,每次同步的数据量小,但缺点是恢复数据效率低,需要从出异常的点开始把所有操作全部执行一遍。

基于文件,是以文件为目标,对文件进行备份。而对文件进行备份方式很多,而优缺点也不同,所以本文会着重讲解这部分。

基于文件备份方案

基于文件备份的方案主要分为两种,一种是全量备份,一种是利用纠删码备份。

全量备份

全量备份其实比较容易理解,即将文件整体拷贝到备份服务器上,以达到容灾的目的,这种方案的优缺点是:

备份效率高,不需要计算,仅仅拷贝即可

恢复效率高,如果线上服务器宕机,可以直接将流量切到备份服务器上

占用空间大

纠删码备份

纠删码是一个非常有创意的想法,但菠菜先不介绍纠删码,先来个比较容易理解的备份方式,了解磁盘阵列的小伙伴一定会听说过:Raid0、Raid1以及Raid5。

其中Raid5的方式挺有意思的,兼顾了性能以及数据安全,拿最小的Raid5来说,需要3块容量相同的硬盘,2块存储数据,1块做备份。那你可能会有疑惑了,1块硬盘如何备份2块硬盘的数据呢?明显存不开啊?!这里就用到了一个有意思的操作,叫做“异或”。对,就是位操作符异或。我们知道异或是相同为0不同为1。如 1 ^ 1 = 0,1 ^ 0 =1。

Raid5具体的备份的方案是,存储一个文件先将文件分成两份a、b,然后将这两份再做“异或”操作,即a ^ b = c(文件存储到最后也是二进制哦),得到一个新备份文件c,那如果丢失了b,可以利用a ^ c来恢复,同理,如果丢失了a可以用b ^ c来恢复,是不是挺好玩哒?

而纠删码与该方式类似,但是会更加复杂,纠删码用到的是矩阵计算。首先需要将文件分成n份,然后通过计算得到m块冗余块,这样,当丢失的数据块小于m的时候,都可以通过纠删码而恢复。由于矩阵计算比较复杂,这里就不做过多的赘述了。

那纠删码的优缺点:

1. 备份效率低

2. 恢复效率低,需要计算得到

3. 占用空间较少,取决于m定义多少份

如何选择

如果我们需要频繁的访问文件,并且对于延迟有超高的要求并且不care硬件成本,建议使用简单点的全量备份。如果需要存储海量数据,而且重点是保证数据不丢,并且要考虑成本的话,可以尝试用纠删码。

最后

大文件该如何备份呢?其实像网盘等存储大文件的时候,是会将大文件切割成不同的切片来存储,正所谓大化小,而备份也是基于切片来分别备份的。

期待大家多多与菠菜互动并且关注菠菜的公众账号!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180402G0JLG600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券