欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~缓存
原创声明:本文首发腾讯云·云+社区,未经容许,不得转载网络
存储网络行业协会SNIA(StorageNetworking Industry Association)快照的定义:关于指定数据集合的一个彻底可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照能够是其所表示的数据的一个副本,也能够是数据的一个复制品。性能
须要注意的是:快照是彻底可用的拷贝,但不是一份完整的拷贝,至于为何,后面会详细讲。测试
场景一:ui
存储快照,是一种数据保护措施,能够对源数据进行必定程度的保护,通俗地讲,能够理解为----后悔药。操作系统
如上图,假设在t0时刻,有一份完整的源数据,咱们在t1时刻,针对这份源数据建立一份快照。翻译
t2时刻,若由于各类缘由(误操做、系统错误等)致使源数据损毁,那么,咱们能够经过回滚(rollback)快照,将源数据恢复至快照建立时的状态(即t1时刻),这样,能够尽可能下降数据损失(损失的数据,是t1到t2之间产生的数据)。3d
这种功能,经常使用于银行、公安户籍、科研单位等。操做系统、软件升级或机房设备更替,通常会选择在夜间或其余无生产业务时,进行高危操做,操做前会对数据进行快照,若操做失败,则将快照进行rollback,将源数据恢复至操做前的状态。视频
场景2:
前言中说过,快照是一份彻底可用的副本,那么,它彻底能够被上层业务当作源数据。
如上图,针对源数据,建立快照后,将快照卷映射给其余上层业务,能够用于数据挖掘和开发测试等工做,针对快照的读操做不影响源卷的数据。
这种功能,经常使用于直播(视频&图片)鉴黄、科研数据模拟开发测试等,好比,视频直播平台须要将某一段时间的视频提供给执法机构进行筛查分析,那么能够经过对特定时间点保存的数据建立快照,将快照映射给执法机构的业务主机去进行挖掘分析。
目前,快照的实现方式均由各个厂商自行决定,但主要技术分为2类,一种是写时拷贝COW(Copy On Write),另外一种,是写重定向ROW(Redirect On Write)。
COW(Copy-On-Write),写时拷贝,也称为写前拷贝。
建立快照之后,若是源卷的数据发生了变化,那么快照系统会首先将原始数据拷贝到快照卷上对应的数据块中,而后再对源卷进行改写。
写操做:
如上图简要示例,快照建立之后,若上层业务对源卷写数据X,X在缓存中排队,快照系统将X即将写入的位置(逻辑地址)上的数据Y,拷贝到快照卷中对应的位置(逻辑地址)上,同时,生成一张映射表,表中一列记录源卷上数据变化的逻辑地址,另外一列记录快照卷上数据变化的逻辑地址。咱们能够看到,上层业务每下发一个数据块,存储上,发生了两次写操做:一次是源卷将数据写入快照卷(即图中Y),一次是上层业务将数据写入源卷(即图中X)。
读操做:
如上图,快照卷若映射给上层业务进行数据分析等用途时,针对快照进行读操做时,首先由快照系统判断,上层业务须要读取的数据是否在快照卷中,若在,直接从快照卷读取,若不在,则查询映射表,去对应源卷的逻辑地中读取(这个查表并去源卷读的操做,也叫读重定向)。这一点,刚好就解释了为何快照是一份彻底可用的副本,它没有对源卷进行100%的拷贝,但对上层业务来讲,却能够将快照看作是和源卷“如出一辙”的副本。
针对源卷进行读操做时,与快照卷没有数据交互。
咱们能够看到,快照对源卷的数据具备很好的保护措施,快照能够单独做为一份能够读取的副本,但并无像简单的镜像那样,一开始就占用了和源卷同样的空间,而是根据建立快照后上层业务产生的数据,来实时占用必需的存储空间。
快照回滚(rollback):
如上图,回滚操做的前提条件是,锁定源卷(暂停对待回滚的逻辑地址上的IO操做),而后经过查映射表,将快照卷上的对应数据回拷到源卷中。
快照删除:
采用COW技术的快照,其源卷即保存着完整的实时数据,所以,删除快照时,直接销毁了快照卷和映射表,与源卷不存在数据交互。
ROW(Redirect-on-write ),也称为写时重定向。
建立快照之后,快照系统把对数据卷的写请求重定向给了快照预留的存储空间,直接将新的数据写入快照卷。上层业务读源卷时,建立快照前的数据从源卷读,建立快照后产生的数据,从快照卷读。
写操做:
如上图简要示例,快照建立之后,若上层业务对源卷写数据X,X在缓存中排队,快照系统判断X即将写入源卷的逻辑地址,而后将数据X写入快照卷中预留的对应逻辑地址中,同时,将源卷和快照卷的逻辑地址写入映射表,即写重定向。咱们能够看到,上层针对源卷写入一个数据块X,存储上只发生一次写操做,只是写以前进行了重定向。
读操做:
若快照建立之后,上层业务对源卷进行读,则有两种状况:1)若读取的数据,在建立快照前产生,数据是保存在源卷上的,那么,上层就从源卷进行读取;2)若须要读取的数据是建立快照之后才产生的,那么上层就查询映射表,从快照卷进行读取(即读重定向)。
若快照建立之后,上层业务对快照卷进行读,一样也有两种状况:1)若读取的数据,在建立快照前产生,数据是保存在源卷上的,那么上层就查询映射表,从源卷进行读取;2)若须要读取的数据是建立快照之后才产生的,那么上层就直接从快照卷进行读取。
咱们能够看到,ROW快照也是根据建立快照后上层业务产生的数据,来实时占用必需的存储空间。
快照回滚(rollback):
采用ROW技术的快照,其源卷始终保存着快照建立前的完整数据,快照建立后,上层业务产生的数据都写入了快照中,所以,快照的回滚只是取消了对源卷的读重定向操做。通俗地说,就是源卷上没有进行任何数据操做,上层业务对源卷的读,仅限于读源卷(即不会去读取快照卷的数据)。
快照删除:
采用ROW技术的快照,其源卷始终保存着快照建立前的完整数据,快照建立后,上层业务产生的数据都写入了快照中。所以,若要删除快照,必然要先将快照卷中的数据,回拷到源卷中,拷贝完成才能删除,如上图。此时咱们能够设想,若是,针对一份源数据,在18:00建立了快照,上层业务持续产生大量新的数据,19:00又建立了快照,20:00又建立了快照……那么,在有多份快照的状况下,若是须要删除快照,就会出现,多个快照向源卷回拷数据的状况,可能致使回拷量很是大,耗时很长。
如上表,COW的写时拷贝,致使每次写入都有拷贝操做,大量写入时,源卷的写性能会有所降低,而读源卷是不会受到任何影响的,删除快照时,只是解除了快照和源卷的关系,同时删除了快照卷的数据而已。ROW在每次写入仅作了重定向操做,这个操做耗时是几乎能够忽略不计的,源卷的写性能几乎不会受到影响,但读源卷时,则须要判断数据是建立快照前仍是建立快照后,致使大量读时,性能受到必定影响,比较致命的是,若源卷有多个快照,在删除快照时,全部快照的数据均须要回拷到源卷才能够保证源卷数据的完整性。
上面简单地介绍了存储快照的实现原理,实际上,快照特性应用普遍,其应用对象是不少的:
目前,主流厂商在自研产品上,对上面的ROW和COW技术都有小范围的改动,也有一些新兴的快照技术已经诞生,但这个行业里,没有最好的快照技术。技术为业务服务,只有针对业务类型作好本地化适配,才能达到最佳效用。
问答
相关阅读
此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1158686?fromSource=waitui
欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~
海量技术实践经验,尽在云加社区!