渐进式备份的基于片段的高延展的去复本系统与方法 【技术领域】
本 公 开 涉 及 一 种 渐 进 式 备 份 (incremental backkups) 的 基 于 片 段 的 (segment-based) 高延展的 (scalable) 去复本 (de-duplicated) 系统与方法。背景技术
大部分的数据去复本技术着重于完整备份 (full backups), 即使所有逻辑区块中 仅一小部分已经被变更, 一逻辑卷宗的所有逻辑区块会以现存的区块去复本。
在一种已知的稀疏索引 (sparse indexing) 方法中, 以取样指纹索引 (sampling fingerprint index) 来取代完整指纹索引 (whole fingerprint index), 将此指纹索引 适当地配置于磁盘对磁盘 (Disk to Disk, D2D) 数据备份系统的内存 (Random Access Memory, RAM) 中。取样指纹索引的洞察是, 被复制的数据区块 (duplicated data blocks) 会趋向于以明显的长度 (non-trivial length) 存储在一个连续的范围里。 在此范围内的取 样指纹值 (sampling fingerprint value) 的匹配 (matching) 意味着高机率的完整范围的 匹配。在所有候选的取样指纹中, 选择冠军者作为去复本的对象。稀疏指纹索引方法是依 据一固定取样率来选取样本指纹。 在另一种已知的方法中, 指纹是依据数据片段 (segment) 的时域区域性 (temporal locality) 来取样。如果条件符合的话 ( 一时间周期 ; 一固定计 数 ), 在稀疏区块索引 (sparse chuck index) 中的数据片段的元素 (entries) 会被删除或 裁剪 (pruned)。被取样的指纹的每一元素最多指向 R 个数据筒 (container)。换句话说, 此方法利用一最近最少使用的 (Least Recently Used, LRU) 目录, 来降低数据筒的取样率。
在另一种已知的方法中, 使用布隆过滤器 (bloom filter) 来决定一指纹是否在指 纹索引里。 此布隆过滤器不论这些区块的历史为何, 盲目地记录所有区块的全部指纹。 另一 种已知的方法是每一文件有一整个文件哈希值映射 (whole-file-hash), 意味着此整份文 件哈希映射的一个匹配意指此整份文件是一个副本, 此文件中的个别指纹不用被检查。此 方法是基于文件来进行去复本。每一文件具有一代表性的 (representative) 指纹。指纹 索引中的元素依据模运算 (modular operation) 或其他分散式的哈希映射表功能, 一个接 一个被分散至 K 个节点 (node)。 对应于一指纹索引元素的整个数据筒会被分散至与此指纹 索元素相同的节点。 如果两个指纹索引元素有相同的数据筒, 但是被分散在两个不同节点, 此相同的数据筒就会被复制在两个节点上。当一个文件被备份, 只有代表性的指纹被用来 路由 (route) 此文件至一节点, 此文件的其他所有指纹不被用来做路由的目的。
一些已知的美国专利提供去复本的技术。例如, 在一已知技术中, 数据区块的数 个指纹记录依据此指纹值 (fingerprint value) 的一部分来分散至子节点。指纹记录具 有执行数据去复本的完整信息。此技术没有揭示指纹数据筒的概念。在另一已知技术 中, 采用一种固定前置网络 (Fixed Prefix Network, FPN) 的修正版本, 依一预定的数据 冗余层次 (data redundancy level) 来分散数据区块。因为此存储器是一种内容可定址 (content-addressable) 的存储器, 此技术没有揭示指纹索引与数据筒。另一已知技术是 依据指纹来分散区块。第一步骤是依据指纹值的 k 个最低位 (Least-Significant-Bit)将区块分割而成数个部分。第二步骤是利用一分散式哈希表 (Distributed Hash Table, DHT), 将此数个部分映射到一物理节点 (physical node)。每一数据节点备有一个加密 钥 (encrypted key) 的队列 (queue), 以及一个用来搜寻此队列以发现复本的一个请求 (request)。 发明内容
本公开的实施范例可提供一种渐进式备份的基于片段的高延展的去复本系统与 方法。
在一实施范例中, 所公开者涉及一种渐进式备份的片段式高延展的去复本系统。 此系统包含一主装置 (maste device) 位于一次级存储节点端 (secondary-storage node side)。此主装置可接收至少一渐进式更新、 去复本多个片段的多个指纹、 多个逻辑区块地 址至物理位置的映射的个体, 并将去复本功能分散到位于一数据节点端的至少一从属装 置, 并通过丛集多个本地数据单元 ( 称为数据筒 ) 的指纹、 多个片段的可变取样率、 以及一 种避免不必要的输入与输出的每一片段汇总结构 (per-segment summary structure), 在 多个片段上执行数据去复本。 在另一实施范例中, 所公开者涉及一种渐进式备份的基于片段的高延展的去复本 方法。此方法包含 : 对于多个欲被去复本的区块的多个渐进式更新, 丛集多个在一数据局 部单元 ( 称为数据筒 ) 的指纹 ; 分割此多个渐进式更新的多个区块, 以作为多个输入片段 ; 查询一内存中 (in-memory) 取样的指纹索引, 以找出此多个输入片段的每一指纹, 并回传 一对相对应的数据筒与片段 ; 当存在一已存储的片段与此输入片段是相同时, 则以此对相 对应的数据筒与片段来查询一内存中的片段式汇总 (segment-based summary), 以决定是 否撷取此对相对应的数据筒与片段, 否则, 查询一内存中数据筒存储缓存存储器 (cache), 来决定是否载入相对应的数据筒 ; 当没有缓存此数据筒时, 自一盘片 (on-disk) 数据筒存 储元件, 载入此相对应的数据筒, 并查询每一数据筒片段索引 (per-container segment index), 以找出路由至此相对应的数据筒的一特定指纹的一偏移量 (offset), 以取得 (retrieve) 此特定指纹的片段信息。
现在配合下列附图、 实施范例的详细说明及权利要求书, 将上述及本公开的其他 特征与优点详述于后。
附图说明 图 1 是在一渐进式备份的基于片段的高延展的系统里的一个高阶数据流的范例 示意图, 并与本公开的某些实施范例一致。
图 2 是一范例示意图, 说明当 K = 2 时, 如何进行片段存储, 并与本公开的某些实 施范例一致。
图 3 是一范例示意图, 说明一数据筒的内容, 并与本公开的某些实施范例一致。
图 4 是一渐进式备份的基于片段的高延展的去复本系统的一个架构范例示意图, 并与本公开的某些实施范例一致。
图 5 是片段的高延展的去复本系统的分散式去复本架构的一个范例示意图, 并与 本公开的某些实施范例一致。
图 6 是一范例示意图, 说明如何从两个参与节点去重建一片段, 并与本公开的某 些实施范例一致。
图 7 是一范例示意图, 说明片段的高延展的去复本系统的运作流程, 并与本公开 的某些实施范例一致。
图 8 是图 7 的详细运作的一个工作范例, 并与本公开的某些实施范例一致。
图 9 是一范例示意图, 说明并行式去复本的运作流程, 并与本公开的某些实施范 例一致。
图 10 是图 9 的详细运作的一个工作范例, 并与本公开的某些实施范例一致。
【主要元件符号说明】
110 内存中的取样指纹索引缓存存储 120 内存中的片段式汇总
器
130 内存中的数据筒存储缓存存储器 141 磁盘数据筒存储设备
143 磁盘中的指纹索引
300 数据筒 310 每一数据筒指纹索引
320 最近最少使用目录 330 存储片段
410 主装置
414 去复本的多个片段的
指纹
416 多个逻辑区块地址至物理位置的映
射的个体
501 指纹分散器 502 数据筒分散器
503 替换引擎 504 单元检测器
505 映射更新器 511 指纹管理器
512 数据筒管理器 513 数据筒更新器
601 节点 602 节点
710 对于多个欲被去复本的区块的多个渐进式更新, 丛集多个在一本地数据单元 ( 称为数据筒 ) 的指纹
720 分割此多个渐进式更新的多个区块, 以作为多个输入片段
730 查询一内存中的取样的指纹索引, 以找出此多个输入片段的每一指纹, 并回传 一对相对应的数据筒与片段
740 当存在一已存储的片段与此输入片段是相同时, 则以此对相对应的数据筒与 片段来查询一内存中的片段式汇总, 以决定是否撷取此对相对应的数据筒与片段, 否则, 查 询一内存中的数据筒缓存, 来决定是否缓存此数据筒
750 当没有缓存此数据筒时, 自一盘片数据筒存储元件, 载入此相对应的数据筒, 并查询一每一数据筒片段索引, 以找出路由至此相对应的数据筒的一特定指纹的一偏移 量, 以取得此特定指纹的片段信息
910 利用一加密的哈希值来计算出多个渐进更新区块的指纹7340 汇总结构 342 汇总指纹 400 片段式高延展的去复本系统 412 多个区块的渐进更新341 片段索引102346695 A CN 102346715
说明书4/11 页920 依一致的哈希值将此多个指纹分散, 并存储于一取样指纹索引缓存存储器与 子数据筒
930 依一致的哈希值将每一数据筒片段索引分散到至少一参与节点
940 依一致的哈希值将每一片段汇总结构分散到至少一参与节点 具体实施方式
当一主要的存储系统渐进地追踪更新的区块, 并且只有备份这些渐进更新的区块 (incremental changed blocks) 时, 本公开的实施范例可提供一种渐进式备份的片段式高 延展的去复本系统与方法。具体地说, 假设此主要的存储系统从最新的快照 ( 渐进式更新 追踪 ) 的一快照图像来追踪更新的区块, 并且只有更新的区块被当作是此备份存储系统的 输入。
本公开的实施范例将焦点放在以片段为基础的四个方面, 以影响数据去复本比 例 (data de-duplication ratio, DDR) 尽量为最小的方式, 来改善去复本的数据传输量 (throughput) : (1) 丛集多个在一个数据局部单元 ( 称为数据筒 ) 的指纹 ; (2) 多个片段 的可变取样率, 稳定且泛用的 (popular) 片段具有一固定的取样率, 而去复本的 “非泛用的 (unpopular)” 目标片段则指定较低的取样率 ; (3) 在去复本时, 避免不必要的输入与输出 的每一片段汇总结构 ; (4) 分散式的去复本, 来利用多个参与存储节点的运算能力。 就第一个方面来说, 数据筒是依去复本的历史记录来建构, 而非依纯逻辑地址接 近度 (pure logical address proximity) 来建构。对于输入的渐进式更新, 数据局部性的 语义是更难以捉摸的, 因为很难预测在此渐进式更新流 (incremental changes stream) 中 会出现什么情况。在本实施范例中, 互相分享内容的所有渐进式的更新都会被放入同一个 数据筒, 以捕捉被同组应用而更新的数据的局部性。
就第二个方面来说, 将指纹设置在一内存中 (RAM), 片段的取样率是用下列方式来 区分的, 亦即稳定片段具有一固定的取样率, 而去复本的不稳定的片段则指定随时间变化 的取样率。一个稳定片段的定义是去复本历史记录中没有改变的一片段。此稳定片段直觉 上是副本之间倾向分享大于一区块的一物件。通过观察数据去复本的历史记录, 可指出此 稳定片段, 并且可使用在此稳定片段中的一个指纹来代表在指纹索引中的片段。而对于非 泛用片段, 可采用一种最近最少使用的策略来变化在被取样的指纹索引中所有非泛用的片 段的取样率。
就第三个方面来说, 每一片段汇总结构可以避免去复本的不必要输入与输出。对 于较大容量且几乎很少改变的片段, 不需要一个接一个的比较一片段中的个别指纹, 因此 可减少从磁盘中撷取个别指纹的磁盘输入 / 输出 (disk I/O)。 每一片段汇总结构可依下列 原则来形成 : (1) 大于一阈值 (threshold) 的片段具有一整体片段指纹, 以及 (2) 整体片段 指纹匹配时, 表示在此片段中, 不需个别得检查区块指纹。 相关片段的整体片段指纹可以构 成一 Merkle 树 (tree)。
就第四个方面来说, 本公开的实施范例在分散式存储系统中, 可将此去复本功能 分散至多个参与存储节点。依据此指纹的一致性哈希 (consistent hashing) 方法, 将指纹 索引与数据筒分散及分开至多个参与存储节点 (participating storage node)。并且, 依 据汇总 (root summary) 的一致性哈希方法, 所有汇总结构也被分散及分开至多个参与存储
节点。 现在, 本公开的实施范例的渐进式备份的基于片段的高延展系统可用 Hadoop 分 散式文件系统 (Hadoop Distributed File System, HDFS) 来实现, 作为基本的存储器 (underlying storage)。然而, 本公开的实施范例是可与任何备有多个数据节点的分散式 存储系统来共同运作的。在下列讨论中, 假设 Hadoop 分散式文件系统为基础的存储器阶层 (underlying storage layer)。本公开的实施范例可与一次级存储系统共同运作。此渐进 式备份的基于片段的高延展系统可包含一元件并位于次级服务器端, 来分散此去复本的工 作量 (workload) ; 还可包括一第二元件并位于数据节点端, 来对传送至特定数据节点的数 据区块去执行去复本。
在探讨去复本的细节之前, 图 1 是在一渐进式备份的基于片段的高延展的系统里 的一个高阶数据流 (high-level data flow) 的范例示意图, 并与本公开的某些实施范例一 致。图 1 省略渐进式备份的基于片段的高延展系统中的并行部分, 此部分将在后面陈述。
参考图 1, 首先, 将数个渐进更新分割成数个片段。每一片段通过发出 (issue) 片 段内的每一个别指纹的指纹查询 (fingerprint query), 来查询一内存中的取样指纹索引 (Sampled Fingerprint Index, SFI) 缓存存储器 110。每一个别指纹的查询则传回一对的 < 数据筒识别码, 片段识别码 >。在同一片段内指纹的查询会被聚成一群, 以找出是否一已 存储的片段相同于一输入片段。是的话, 此输入片段以此对 < 数据筒识别码, 片段识别码 > 来查询一内存中的片段式汇总 120, 以决定是否需要载入此数据筒。否则, 以此数据筒辨识 码来查询一内建存储器数据筒存储缓存存储器 130, 以查看此数据筒是否被缓存, 如果没有 被缓存的话, 则自一磁盘数据筒存储设备 141 载入此数据筒。
载 入 此 数 据 筒 后, 每一输入片段在此数据筒中查询一每一数据筒片段索引 (per-container segment index), 以找出路由至此数据筒的一指纹的偏移量 (offset)。 此 偏移量可以用来取得此区块的物理位置, 因为指纹以一阵列 (array) 方式存储在此数据筒 内。通过此偏移量查询此片段索引可以取得特定指纹的片段信息。磁盘指纹索引 143 包括 从取样指纹索引释出的指纹。磁盘指纹索引 143 没有包括所有数据筒的全部指纹。
如果有去复本的话, 数据流的输出是此输入片段里逻辑区块地址 (logical block address) 的物理位置 (physical location)。具体来说, 产生的逻辑至物理的一更新目录 (L2P-CL) 是当做输出。
在基于片段的高延展的去复本系统中, 片段是一基本单元, 并且可由目前输入 (current input) 与输入的历史记录 (input history) 来决定。具体来说, 如果数个区块 在输入中是相邻的话, 则这些区块属于相同的输入片段。 然后, 此输入片段与已存储的片段 (stored segment) 做比较, 以形成存储片段 (store segment)。当输入片段与存储片段互 相冲突时, 每一指纹最多可属于 K 个片段。如果一指纹超过 K 个片段时, K ≥ 2, 则从此指纹 中移除最旧的片段。
图 2 是一范例示意图, 说明当 K = 2 时, 如何进行片段存储, 并与本公开的某些实 施范例一致。参考图 2, 在输入片段中的号码代表逻辑区块号码, 而在存储片段中的号码代 表在一数据筒的指纹偏移量。如输入 -1, 有片段 a 与片段 b 共两个输入片段。去复本之后, 发现片段 a 是存储片段 1 的一个复本, 但是发现输入片段 b 横跨两个存储片段 ( 存储片段 2 与存储片段 3)。存储片段 1 与输入片段 a 是相同的, 所以存储片段 1 是没有更新。反之,
具有偏移量从 52 至 55 的指纹映射至存储片段 2 与输入片段, 共对应至两个片段。输入片 段 c 匹配于指纹 51 至 55。因为 K = 2, 亦即每一指纹指允许属于两个片段, 对于指纹 52 至 55, 则移除存储片段 2( 即最旧的片段 )。替代的是, 将指纹 52 至 55 映射至两个片段, 亦即 输入片段 b 与输入片段 c。
事实上, 本公开的实施范例允许每一区块, 最多参与到 K 个片段中, 即保持追踪曾 经与一区块相关的最后 K 个片段。 本公开的实施范例中, 使用一区间树 (interval tree) 来 保持追踪逻辑区块地址范围映射至此片段。下列叙述中, 此区间树称为片段索引 (segment index, SI)。
一基本分享单元 (Basic sharing unit, BSU) 被定义为产生之后就不会被变更的 一存储片段。在基本分享单元礼的所有指纹一次全部都出现, 所以一个指纹就足以代表此 相对应的基本分享单元。
因为一指纹索引无法配置在 (fit into) 内存中, 本公开的实施范例提出取样指纹 (sampling fingerprint) 的概念, 将指纹索引配置在一指纹索引缓存存储器中。此取样是 依个别片段 (individual segment) 为基础。此指纹索引缓存存储器可被实现为, 例如一哈 希表 (hash table)。 指纹索引缓存存储器的每一元素 (entry) 是以一指纹值 (fingerprint value) 为键值, 并且此元素包括一数据筒辨识码。 甚且, 如果多个数据筒分享相同一指纹的 话, 此数据筒辨识码最多可指向至 K( 如 K = 2) 个片段辨识码。注意的是, 此 K 是与前述的 K 相同的。 在本公开的实施范例中, 有两种改变此片段取样的方式 : (1) 片段为基本分享单 元的话, 取出来自于一基本分享单元所有指纹的第一指纹, 来代表此基本分享单元。 注意的 是, 此取样不会损害去复本率, 因为在一基本分享单元里的指纹总是一次全部都出现。然 而, 因为节省存储器的空间, 所以可以改善此去复本的数据传输流量。(2) 当存储器的空 间不足时, 不需减少所有片段的取样率, 而是对这些长时间未被参照的片段, 当取样率达到 一个最小值时, 在被他们被释出前, 先减少它们的取样率。一种最近最少使用的目录 (LRU list) 可用在这个用途。 特别是, 基本分享单元片段具有以最近最少使用顺序为基础的一个 虚拟取样率 (virtual sampling)。当基本分享单元到达此最近最少使用目录的尾端时, 会 减少此虚拟取样率。
数据筒的含意是以群聚有数据局部性的指纹, 来摊提载入一数据筒的输入 / 输出 的成本。渐进式备份的数据局部性是不同于整体备份。本公开的实施范例的渐进式备份 的片段式高延展系统是依据去复本历史记录来关连多个片段。一开始, 通过结合逻辑卷宗 辨识码与逻辑区块地址, 来自不同的逻辑卷宗的逻辑区块地址包含一个统一的伪 (unified pseudo) 逻辑区块地址。例如, 对于在逻辑卷宗 1 的逻辑区块地址 500, 此伪逻辑区块地址 是 (1, 500)。每一数据筒起始时可以是半满的 (half full), 以容纳此数据筒未来的更新。 由在此去复本历史记录随着时间累积, 与一存储片段分享至少一单依指纹的那些片段会被 放入与此存储片段相同的数据筒。
图 3 是一范例示意图, 说明一数据筒的内容, 并与本公开的某些实施范例一致。在 图 3 的范例中, 数据筒 300 的内容可包括一每一数据筒指纹索引 310、 逻辑区块地址的 K 对 物理位置和存储片段 330 的信息、 以及一汇总结构 340。每一数据筒指纹索引 310 将同一 数据筒的指纹安排于一哈希表中, 来加速寻找此数据筒里的指纹值。每一指纹指向最后的
K( 例如 K = 2) 片段。直觉的理解是 (1) 如果有任何基本分享的话, 此最后的 K 片段在日后 最有可能成为此基本分享单元, 以及 (2) 两个片段是极不可能意外地分享一些相互连结的 指纹, 而非分享一整体片段。注意的是, 此 K 是与前述的 K 相同的。
当一数据筒需要被分割时, 保留一个最近最少使用的目录给数据筒 300, 如此数据 筒 300 会依据存取历史 (access history) 而被分割。每一最近最少使用目录是以时间戳 记 (timestamp) 为键值, 并且包含做为内容的指纹值。
如前所述, 在一数据筒内片段之间的关系可以分成两种类型。第一类型是在相同 伪逻辑区块地址范围内的两片段 ; 第二类型是分享指纹的两个片段。如果没有提供汇总信 息的话, 此两片段的指纹则依一最近最少使用目录的顺序被置放在此数据筒中。因为会将 每一片段汇总结构包括在内, 所以, 需要区别此两种类型。
对于第一种类型的片段, 每一片段不会再进一步处理, 而是直接留在此数据筒中。 对于第二种类型的片段, 因为每一指纹最多可以指向 K( 如 K = 2) 个片段, 片段根据历史可 能需要被分割。如果一指纹指向超过 K 个片段, 结果导致片段之间分享指纹, 则在加入一新 片段之前, 会移除最旧的片段。
所 有 的 每 一 片 段 结 构 会 被 输 入 至 汇 总 结 构 340。 在 汇 总 结 构 340 里 的 每 一 元 素 是 以 一 片 段 索 引 341 为 键 值, 并 且 其 内 容 是 由 相 对 应 片 段 的 汇 总 指 纹 (Summary Fingerprint, SF)342 所组成的。注意的是, 并非所有片段都备有一汇总指纹 342, 只有较大 容量 ( 例如大于 1000) 的那些片段备有一汇总指纹, 如此所有汇总结构得以配置在内存中。 一数据筒可以依据一伪物理区块地址, 但, 既不是逻辑区块地址, 也不是真正的物 理区块范围。伪物理区块地址保存了在每一卷宗逻辑区块地址里的局部性, 并且也可区别 于其他卷宗的区块地址。 例如, 卷宗 A 与卷宗 B 分别具有逻辑区块范围 (0, 32M) 与 (0, 16M)。 此伪物理区块范围对卷宗 A 而言可以是 (0, 32M), 而伪物理区块范围对卷宗 B 而言可以是 (32M, 48M)。 一数据筒可以依据两个片段的内容为基础。 分享至少一指纹的两个片段可被置 放于一数据筒内。并且, 一数据筒保存指纹索引元素里的局部性。也就是说, 此数据筒是一 个基于伪物理区块范围与内容的且保留指纹局部性的数据筒 (range and content-based locality-preserved fingerprint)。
如上述, 一个大于一阈值 N 的片段有一汇总指纹 (summary index)。此汇总指纹 可通过以 N 个指纹为数据内容以及算出此内容的一个指纹来算出。也就是说, 汇总指纹是 基于片段的。并且, 一汇总指纹的特性也是, N 个指纹中的一个指纹的改变可以极大地改 变此汇总指纹。结果, 如果两个片段的汇总指纹相互匹配的话, 此两个片段是不同的机率 会小到只存在于理论中。换句话说, 如果汇总指纹匹配的话, 则此两个片段是完全相同的 (identical)。
片段式汇总索引可通过合适的选择 N, 而配置在一存储器中, 例如随机存取存储 器。每一索引元素以一对 < 数据筒辨识码, 片段辨识码 > 做为键值。内容可包括汇总指纹、 片段长度、 以及包括此片段的物理区块。此物理区块也同样是被存储的, 因为如果汇总指 纹匹配的话, 则不需要缓存此数据筒, 并且这些物理区块作为数据去复本时的目标物理区 块。如上述, 向指纹索引缓存存储器查询一数据筒之后, 取得一数据筒辨识码以及最多 K 个 片段辨识码。查询结果产生的 < 数据筒辨识码, 片段辨识码 > 对被用来查询片段式汇总索 引, 以找出相对应的片段, 此产生的片段的汇总指纹与一存储片段的汇总指纹做比较。 为了
减少因片段式汇总索引的存储器消耗量, 并非所有在此片段里的物理区块都是个别地被存 储。而是存储此物理区块范围来减少此存储器的消耗量。
通过组合片段识别、 可变的取样率、 以及使用片段式汇总结构, 图 4 是一渐进式备 份的片段式高延展的去复本系统的一个架构范例示意图, 并与本公开的某些实施范例一 致。参考图 4, 片段式高延展的去复本系统 400 可包含一主装置 410, 位于一次级存储节 点端。主装置 410 可接收多个输入, 例如多个区块的渐进更新 412、 去复本的多个片段的 指纹 414、 多个逻辑区块地址至物理位置的映射的个体 416 等, 并且还包括至少一分散器 (distributor), 来将至少一去复本功能分散给至少一从属装置 (slave device), 如从属装 置 1 至从属装置 n, 并通过丛集多个在一个本地数据单元 ( 称为数据筒 ) 的指纹、 多个片段 的可变取样率、 以及一种避免不必要的输入与输出的每一片段汇总结构, 在多个片段上执 行数据去复本, 其中, 稳定片段具有一固定的取样率, 而去复本的不稳定的片段则指定随时 间变化的取样率。系统 400 还可包括至少一从属装置 420, 位于数据节点端, 并执行并行式 去复本, 以利用位在此数据节点端的从属装置的运算能力。
图 5 是片段式高延展的去复本系统的分散式去复本架构的一个范例示意图, 并与 本公开的某些实施范例一致。参考图 5, 在次级存储节点端, 主装置 410 可包括一指纹分散 器 (fingerprint distributor)501 与一数据筒分散器 (container distributor)502。指 纹分散器 501 可哈希每一个别指纹, 来决定一目的地数据节点 (destination data node), 并可等待此数据节点的回应。此回应可以是被一逻辑区块地址所指到的一目标物理区块 (target physical block)。此回应有三个考虑的情况。 第一个情况是, 在一指纹索引缓存存储器中找到此指纹, 并且此数据筒在一数据 筒缓存存储器中已被缓存或是在此片段式汇总索引找到。在此情况下, 此回应可包括一目 标区块 ( 去复本区块 ) 的信息。对应此目标区块的原始区块可被做回收 (disposed)。
第二个情况是, 在一指纹索引缓存存储器中找到此指纹, 但是此数据筒在一数 据筒缓存存储器中没有被缓存, 并且此片段式汇总索引没有匹配。此数据筒被载入至一 次级存储节点端的内存中。使用与数据统分散器 502 分散指纹时相同的哈希函数 (hash function), 将此数据筒中的元素分散至相关的数据节点。 位于一特定数据节点的相同数据 筒的元素被组成一子数据筒 (sub-container)。
注意的是, 数据筒分散器 502 没有直接写入数据筒。而是数据筒分散器 502 给位 在此数据节点的每一子数据筒一个公用的文件名称 (public file name), 如此, 可同时取 得属于相同数据筒的子数据筒。例如说, 如果一数据筒有一识别码 (identifier)0x01234, 四个子数据筒分别被命名为 0x01234.ip1、 0x01234.ip2、 0x01234.ip3、 以及 0x01234.ip4。 当数据筒分散器 502 取得数据筒 0x01234 时, 也向每一个别数据节点要求相对应的子数据 筒。每一数据节点轮流读取子数据筒 0x01234.ipI, ipI 是特定数据节点的 IP 地址。在数 据节点写入子数据筒的优点是在存取时, 每一子数据筒备有一本地复本 (local copy), 且 此数据节点可通过它的本地磁盘, 而不是通过网络取自其它数据节点, 取得子数据筒。 通过 查询每一数据筒指纹索引, 可以撷取对应此被查询指纹的元素, 以取得此目标物理区块。
第三个情况是, 在一指纹索引缓存存储器中没有找到指纹。此指纹已被更新至一 对应的数据筒。此原始物理区块则作为此目标物理区块。
数据筒分散器 502 可使用已知的一致性哈希法加条纹 (stripe) 于一概念的数据
筒, 并分割为数个子文件, 即数据筒条纹、 指纹缓存存储器、 以及数据筒缓存存储器可常驻 于同一个数据节点。依据汇总指纹的相同且一致的哈希法, 数据筒分散器 502 也负责去分 散此片段汇总。
主装置 410 还可包括一替代引擎 (replacement engine)503 来存储指纹缓存存储 器与数据筒缓存存储器的最近最少使用目录, 以确定子数据筒与指纹的替换。 注意的是, 指 纹缓存存储器的此最近最少使用目录是依据数据筒, 而不是个别的指纹。
主装置 410 还可包括一单元检测器 (unit detector)504 来检测运作中 (on the fly) 的输入指纹所属的数据筒或是通过去副本历史辨别的一去复本单元的边界。检测此 输入指纹的数据筒可如下进行。 对于每一输入片段, 起初没有此输入片段相对应的数据筒。 如果此去复本的回应指出此输入片段属于一数据筒, 则此数据筒是对应此输入片段的数据 筒。否则, 产生一个新数据筒来容纳此输入片段。一数据筒具有其大小 (size) 的上限。
通过去副本历史辨别的一去复本单元的边界的进行如下说明。 起初将每一输入片 段视为一去复本单元 (de-duplication unit)。 此输入片段存储在一数据筒。 具体来说, 每 一子数据筒存储物理区块, 也存储与这些物理区块相关的此输入片段。 下一次, 此片段被查 询时, 以存储片段来检查此输入片段。 如果是同一片段, 则此片段可能在将来还是一样的片 段。 如果一片段经过一预定数目的去复本查询后, 仍是维持同一个片段, 则此片段被视为稳 定, 并且在此单元里的第一指纹可被挑出并做为被取样的指纹, 如同上述。
主装置 410 还可包括一映射更新器 (mapping updater)505, 依据此去复本的输出 来更新映射到此卷宗的元数据 (metadata)。
在 数 据 节 点 端, 至少一从属装置的每一从属装置还可包括一指纹管理器 (fingerprint manager)511, 来维持此指纹缓存存储器, 除了替换指纹之外。指纹的替换 是由位于主装置 410 的替换引擎 (replacement engine)503 来协调。多个指纹被安排成 一哈希表。每一指纹元素备有一数据筒辨别码目录 (container identifier list)。此目 录最多有 K 个元素、 此数据筒内的指纹的偏移量、 以及指向此相同数据筒的指纹的一指标 (pointer)。以此指标, 在相同数据筒中的所有指纹被组织成为一单一连结目录 (linked list)。此连结目录的前端是此数据筒的第一个被取样的指纹。
在替换引擎 503 中, 指纹索引的最近最少使用目录的每一元素包括相对应的数据 筒的第一个被取样的指纹的指纹值, 以及此数据筒的辨别码。而此数据筒缓存存储器的最 近最少使用目录的每一元素备有此数据筒辨别码。当一数据筒的指纹从指纹索引被释出 时, 这些元素被写至一磁盘, 作为此指纹索引的一永久复本 (persistent copy)。
每一从属装置也可包括一数据筒管理器 (container manager)512 来维持此数据 筒缓存存储器, 除了数据筒的替换之外。数据筒管理器 512 可具备三个部分, 亦即数据筒缓 存存储器、 数据筒格式、 以及数据筒读取。对于此数据筒缓存存储器, 其数据筒是以唯一的 数据筒识别码作为健值, 而组织成一哈希表, 此与前述的数据筒缓存存储器相同。 此数据筒 格式是与前述的数据筒及图 3 相同的。关于读取数据筒, 它以数据筒辨识码加上 IP 当做文 件名称来读取基本文件系统的子数据筒。 每一从属装置也可包括一数据筒更新器 513, 以供 在此本地数据节点上写入子数据筒。 为了加速写入速度, 其更新是序列式地被写入至磁盘。
因为数据筒被分散在所有参与节点上, 存储片段的信息不是存储在单一的节点。 而是将一片段内的偏移量存储在参与节点上。 从参与节点上收集一片段的偏移量与片段辨识码后, 则可重建此存储片段的信息。图 6 是一范例示意图, 说明如何从两个参与节点去重 建一片段, 并与本公开的某些实施范例一致。此去复本是与图 2 相同的。片段 1、 2、 3 都是 属于同的数据筒。加括号的 (parenthesized) 对 (n, k) 代表在第 n 个片段的第 k 个物理区 块。例如, 对 (2, 3) 代表在第 2 个片段中的第 3 个物理区块。在本范例中, 片段 1、 2、 3 平均 地被分散至两个存储节点, 如节点 601 与节点 602。在查询此每一数据筒指纹索引之后, 相 对应的从属装置回复偏移量与片段辨识码。在主装置中重建片段 1、 2、 3 的被匹配的部分。 例如, 来自节点 601 的对 (1, 0) 与对 (1, 2) 属于片段 1, 来自节点 602 的对 (1, 1) 与对 (1, 3) 也是属于片段 1。并且整个片段 1 也被重建, 其中第 0 个与第 2 个区块来自节点 601, 而 第 1 个与第 3 个区块来自节点 602, 则可重建整个片段 1。然后, 图 2 所述的片段辨识码方 案可继续进行。
请参考图 7, 图 7 是一范例示意图, 说明片段式高延展的去复本系统运作流程, 并 与本公开的某些实施范例一致。在图 7 中, 范例运作流程 700 可包含 : 对于多个欲被去复本 的区块的多个渐进式更新, 丛集多个在一数据局部单元 ( 称为数据筒 ) 的指纹, 如步骤 710 所示。分割此多个渐进式更新的多个区块, 以作为多个输入片段, 如步骤 720 所示。查询一 内存中的取样的指纹索引, 例如内存中的的指纹索引 110, 以找出此多个输入片段的每一指 纹, 并回传一对相对应的数据筒与片段, 例如 < 数据筒辨识码, 片段辨识码 >, 如步骤 730 所 示。当存在一存储片段与此输入片段是相同时, 则以此对相对应的数据筒与片段来查询一 内存中的片段式汇总, 例如内存中的片段式汇总 120, 以决定是否查询此对相对应的数据筒 与片段, 否则, 查询一内存中的数据筒存储缓存存储器, 例如内存中的数据筒存储缓存存储 器 130, 来决定是否载入此相对应的数据筒, 如步骤 740 所示。 当没有缓存此数据筒时, 自一 盘片数据筒存储元件, 载入此相对应的数据筒, 并查询一每一数据筒片段索引, 以找出路由 至此相对应的数据筒的一特定指纹的一偏移量, 以取得此特定指纹的片段信息, 如步骤 750 所示。如果有去复本的话, 数据流的输出是此输入片段里逻辑区块地址的物理位置。
步骤 710 还可包括, 例如, 输入一更新目录、 输入此更新目录中多个区块的多个逻 辑至物理对应元素、 计算出在此更新目录中多个区块的指纹、 通过去复本的历史记录为基 础来重建数据筒, 以撷取起因于同组应用上的改变的数据局部性等。当此输入片段大于一 阈值 T 时, 步骤 730 还可包括, 例如, 计算出此输入片段的汇总指纹索引、 搜寻一指纹索引、 找出物理区块的一缓存存储器、 取得物理区块附加至此更新目录等。当一被匹配的存储片 段是大于此阈值时, 步骤 740 还可包括, 例如, 计算出此存储片段的汇总指纹、 并更新汇总 索引、 检查此存储片段的一偏移量对 (offset pair)、 移除此片段索引中最旧的片段 ( 每一 指纹元素可包括一数据筒辨识码目录, 最多指向 K 个元素 )、 对此数据筒更新新指纹、 附加 逻辑至物理目录至更新目录中, 等等。此数据筒被缓存后, 片段缓存存储器会被更新。步骤 750 还可包括, 例如, 当找到一满的 (full) 数据筒时, 产生一个新数据筒, 附加此输入片段 至新产生的数据筒, 以一序列方是来将数据筒记录至磁盘等。这些详细运作的子步骤在图 8 的工作范例中可以找到。 图 8 是图 7 的详细运作的一个工作范例, 并与本公开的某些实施 范例一致。此处省略已经提述的其它子步骤的细节。
如前述, 渐进式备份的片段式高延展的系统 400 可与一次级存储系统一起运作, 片段式高延展的去复本系统 400 有两种装置。一种是在次级存储装置端上, 来分散去复本 的工作量 ; 另一种装置是在数据节点端上, 以将传送至特定数据节点的数据区块去复本。 指纹数据可用一种分散的方式, 来存储及取得于次级存储节点端的一次级存储服务器, 并且 此指纹缓存存储器与数据筒缓存存储器也可分散及分割至不同的数据节点上。 通过一致的 哈希法来分割数据筒、 指纹、 缓存存储器、 以及数据筒缓存存储器。
图 9 是一范例示意图, 说明并行式去复本的运作流程, 并与本公开的某些实施 范例一致。参考图 9, 范例运作流程 900 可包含 : 利用一加密的哈希值 (cryptographic hashing) 来计算出多个渐进更新区块的指纹 ( 步骤 910) ; 依一一致的哈希值将此多个指纹 分散, 并存储于一取样指纹索引缓存存储器与数个子数据筒 ( 步骤 920) ; 依该一致的哈希 值, 将每一数据筒片段索引分散到至少一参与节点 ( 步骤 930), 如此, 在每一数据节点 ( 从 属装置 ) 上的片段索引可具有较小偏移量对 ; 并且依该一致的哈希值, 将每一片段汇总结 构分散到至少一参与节点 ( 步骤 940)。 此至少一参与节点在一数据节点端上可以是不同数 据节点。此一致的哈希值为熟知的一致的哈希值。
步骤 910 还可包括, 例如, 集合多个在更新目录中的渐进更新区块作为一输入片 段目录, 此至少一参与节点可在此取样指纹索引缓存存储器中查询此指纹等。在并行式去 复本的期间, 数据筒缓存存储器的载入与释出也需要此至少一参与节点的协助。图 10 是图 9 的详细运作的一个工作范例, 并与本公开的某些实施范例一致。 此处省略已经提述的其它 子步骤的细节。 综合上述, 本公开的实施范例可提供一种渐进式备份的基于片段的高延展的去复 本系统与方法, 可经由数据筒的渐进更新的每一片段汇总指纹、 多变的片段取样率、 每一片 段汇总结构、 以及分散去复本至多各参与节点, 并以影响数据去复本比例为尽量最小的方 式, 来改善去复本的数据传输量。
然而, 以上所述仅为本公开的实施范例而已, 当不能依此限定本公开实施的范围。 即大凡一本公开申请专利范围所作的均等变化与修饰, 皆应仍属本公开权利要求书涵盖的 范围内。