云快照的2种存储机制

  • 2019 年 11 月 28 日
  • 筆記

云计算是庞大的IT技术的结合,例如我们经常在云主机ECS中使用的快照功能,仔细研究起来,每一个功能实现都沉淀着“攻城狮的智慧”。今天我们来看一下云快照的两种不同实现机制。

一、首先什么是云快照

当我们在为windows打补丁担心系统无法启动、当我们进行系统渗透性测试等场景时,希望为当前的云主机的数据进行保存,当需要时我们可以快速回退到当时的云快照点。云快照就像我们年轻时的照片,当你拿起当年的照片,能想起以前的故事。

二、云快照的两种不同实现方式

2.1 ROW (redirect on write)

当你在云服务商的控制台点击生成快照按钮后,云控制台将用户的原数据盘内容封存起来,再新增一块新的磁盘作为写快照盘。如下图,当生成了快照1后,云主机将新的修改增量数据(差量数据)直接写入到快照1,而读操作直接从主磁盘中读取。如果用户需要返回最初的数据,直接将写操作指令指回主磁盘即可。

如果以后再生成了快照2,则云主机将新的修改增量数据直接写入快照2中。快照1-快照2称为快照链,每一个快照只保存相对上一个快照的增量修改数据。如果用户需要返回上一步的数据,直接将写操作指令指回快照1即可。

每一个快照保存的数据是相当于上一个快照的差量数据。如果删除了快照1,云控制台将自动将快照1的数据添加到快照2,保障即使删除了快照链的数据,也不会影响数据的恢复。

该快照链特征导致了一个问题,就是如果一共做了 10 次快照,那么在恢复到最新的快照点时,则需要通过合并 10 个快照卷来得到一个完整的最新快照点数据。

2.2 COW (copy on write)

COW的模式更趋近于最初认识云快照人员的认识,即,主磁盘中永远保留最新数据,所有的读写操作均指向主磁盘;而当主磁盘中的数据有修改时,首先将主磁盘中的旧数据copy至快照1中,再将新数据写入主磁盘中。

当需要恢复至最初的数据状态时,则将快照1中的旧数据指针指回主磁盘中,即可完成快照数据的恢复。

COW 在创建快照时,并不会发生物理的数据拷贝动作,仅是拷贝了原始数据所在的源数据块的物理位置元数据。因此,COW 快照创建非常快,可以瞬间完成。COW 有一个很明显的缺点,就是会降低源数据卷的写性能,因为每次改写新数据,实际上都进行了两次写操作。

三、ROW、COW的应用场景分析

从上面的分析,我可以看到,COW存数据将发生两次写操作,而ROW仅有一次写操作;但另一方面,在读数据时,COW只有一次操作,而ROW将进行快照链的指针计算,才能从多块磁盘中找到最新的数据。

在分布式存储+块存储的大趋势下,ROW是未来的快照存储主要趋势。原因如下:分布式场景下,数据是分开存储,数据越是分散,系统性能越高。而 ROW 把源数据卷中的原始数据打散之后,对性能反而有好处。

四、快照与备份的区别

1、备份的安全性更好。如果原始数据损坏(例如物理介质损坏,或者绕开了快照所在层的管理机制对锁定数据进行了改写),快照回滚是无法恢复出正确的数据的,而备份可以。

2、快照的速度更快。生成快照的速度比备份速度快的多,因为快照仅生成了一个空白的空间,仅有新数据写入时才会在快照中写数据。而备份一般会生成一份全量数据,因此一般只会在夜间业务量少时进行备份操作。

3、占用的存储空间不同。备份会占用双倍的存储空间,而快照所占用的存储空间则取决于快照的数量以及数据变动情况。极端情况下,快照可能会只占用1%不到的存储空间,也可能会占用数十倍的存储空间。