快照技术对比学习
本文分享自天翼云开发者社区《快照技术对比学习》,作者:z****n
1.快照的分类
根据 SNIA 的定义, 快照有全量快照 (full snapshot) 和增量快照 (incremental snapshot) 两种类型。
2.全量快照
克隆(Clone):
与备份操作类似,克隆技术是一种数据复制和恢复的方法,用于创建源数据的完全副本。将源数据的所有信息和状态以二进制形式进行备份,并在需要时将其恢复到相同或另一个系统中。克隆对象可以是存储卷、文件系统或者 LUN,优势在于它提供了完全一致和独立的复制,不受源系统的影响。缺点就是在创建时要完整的复制一份数据,需要占用和源数据空间一样大的存储空间,资源成本高,消耗时间长。
镜像分离(Split Mirror):
镜像分离也属于全量快照,先创建源卷的一个镜像卷,每次磁盘写入数据的时候,都会向源卷和快照卷同时写入内容。当启动快照时,镜像卷能快速脱离,直接生成一个快照卷。因此镜像分离在读操作时没有任何影响,在写操作时会有两次写入操作,分别写入源卷与镜像卷。
3.增量快照
3.1 写时拷贝(Copy-On-Write,CoW):在源卷之外创建一个快照卷,用于存放快照数据。
写数据:
1、写入请求:当需要对原始数据进行写入操作时,系统首先创建一个新的空白数据块(或称为写时复制快照),并将写入请求发送到该新数据块。
2、数据复制:系统将需要被修改的数据块从原始数据中复制到新的写时复制快照中,这样可以确保原始数据不会被修改。
3、修改写时复制快照:在写时复制快照中进行实际的数据修改操作,即将写入请求应用于写时复制快照。
4、更新快照指针:完成写入操作后,系统更新增量快照指针,使其指向新的写时复制快照,以反映最新的数据状态。
![](https://static001.geekbang.org/infoq/19/196d2b6f08eb6d0bf6a2f43ae5cb8ab0.png)
读数据:
1、初始状态:增量快照指向原始数据。
2、读取请求:当有读取请求时,系统检查增量快照指针。
3、检查增量快照:如果读取请求的数据在增量快照中存在,系统直接从增量快照中读取相应的数据,并返回给请求方。
4、查找原始数据:如果读取请求的数据不在增量快照中,系统将查找原始数据。
5、读取原始数据:系统根据读取请求定位到原始数据,并返回相应的数据给请求方。
优点:CoW 在写入操作时,不直接修改原始数据,而是创建副本并在副本上进行修改。这样可以减少对原始数据的复制操作,因此 CoW 快照创建非常快。其次,CoW 确保了数据的完整性和一致性,原始数据始终保持不变,只有在写入操作完成后,新的数据副本才会出现。同时 CoW 可以节省存储空间。由于只有在数据块被修改时才复制数据,多个副本可以共享未修改的数据块,减少了存储空间的占用。
缺点:降低源数据卷的写性能,因为每次改写新数据,实际上都进行了两次写操作。
应用场景:CoW 技术提供了空间效率、写入性能和数据完整性的优势,适用于需要高效存储、备份和恢复数据的场景。因此在虚拟化、容器化、数据备份、文件系统和数据库管理等领域得到广泛应用
3.2 写时重定向(Redirect-On-Write,RoW)
写数据:
1、初始状态:RoW 技术在初始状态下指向原始数据。
2、写入请求:当有写入请求时,系统首先检查 RoW 指针。
3、创建副本:如果 RoW 指针指向原始数据,系统会创建原始数据的副本。
4、修改副本:系统在副本上进行修改操作,而不会对原始数据进行任何更改。
5、更新 RoW 指针:当修改操作完成后,系统会更新 RoW 指针,使其指向新创建的副本。
6、更新元数据:系统会更新相关的元数据,如指针或索引,以反映新的数据位置。
![](https://static001.geekbang.org/infoq/36/36ac64e362d17a2c5dd7dfd306872184.png)
读数据:
1、初始状态:RoW 技术在初始状态下指向原始数据。
2、读取请求:当有读取请求时,系统会根据读取操作所需的数据确定读取路径。
3、检查 RoW 指针:系统首先检查 RoW 指针。
4、判断读取路径:根据 RoW 指针的状态,有两种可能的读取路径:
1)如果 RoW 指针指向原始数据,则系统直接读取原始数据。
2)如果 RoW 指针指向副本数据,则系统需要跟踪回溯到原始数据,并读取经过修改的副本数据。
5、读取数据:根据所确定的读取路径,系统从相应的位置读取数据。
1)如果 RoW 指针指向原始数据,系统直接从原始数据位置读取数据。
2)如果 RoW 指针指向副本数据,系统通过回溯到原始数据并按照修改路径读取副本数据。
优点:RoW 技术避免了对原始数据的复制,只在修改发生时创建副本,因此具有较高的空间效率。其次解决了 CoW 快照写两次的问题,就写性能而言 RoW 是优于 CoW 的。RoW 技术通过在副本上进行修改而不直接修改原始数据来保持数据的完整性和一致性。RoW 技术可以通过跟踪回溯到原始数据来实现快速恢复和数据保护。
缺点:RoW 技术在读取操作时可能需要进行回溯操作以获取经过修改的副本数据,这可能略微降低读取性能。RoW 没有一个完整的快照卷,其快照之间的关系是链式的,如果快照层级越多,进行快照恢复时的系统开销会比较大。
应用场景:RoW 技术适用于需要高效存储、备份和恢复数据的场景。它提供了空间效率、写入性能和数据完整性的优势,因此在虚拟化、容器化、文件系统和数据库管理等领域得到广泛应用。
在传统存储场景下,RoW 技术存在一个重要问题,即对读取性能的影响较大。随着多次读写操作的进行,源数据卷中的数据会变得非常离散,这导致 RoW 在连续读取和写入性能方面不如 CoW。因此,RoW 更适用于写入密集型的存储系统。然而,在分布式存储的情况下,RoW 的连续读写性能却会超过 CoW。在传统存储场景中,读写性能的瓶颈通常出现在磁盘上,但这种瓶颈在分布式存储场景中不存在。在业务层面上,用户看到的是连续存储,实际上数据分布在不同服务器的不同硬盘上,数据越分散,系统性能越高。RoW 技术将源数据卷中的原始数据打散后,反而对性能有益。因此,目前阶段下,RoW 结合分布式存储的快照方式是业界主要发展方向。
评论