ATC 2023 Paper 分布式元数据论文汇总
问题
Ceph 是一个广泛部署的分布式存储系统,Ceph 中的集群级去重设计,由于一些缺点难以在生产环境中使用:(1)去重唯一数据会导致过多的元数据消耗;(2)串行层次化机制对前台 I/O 产生有害影响,并且仅提供固定大小的块算法;(3)现有的引用计数机制需要对整个对象进行低效的完整扫描,并且与 Ceph 的快照不兼容。
挑战
-
重复数据删除架构中的所有组件,在设计时都应考虑到可扩展性。
-
架构应考虑各种数据类型,如文件、块和对象,以寻找数据减少的机会。
-
架构必须与存储系统中的现有服务(如快照操作)兼容。
现有方法局限性
-
无论目标对象中有多少个唯一内容都会盲目执行去重。对唯一对象进行去重只会增加计算和存储开销。由于对象中唯一内容的数量高度依赖工作负载,这种方法可能会削弱去重效率,尤其是在 Ceph 中,因为它是一个用于各种数据集的通用存储系统。
-
依赖于有限的层次化架构,该架构依赖于粗粒度处理和固定大小块划分(FSC),并用单个后台线程的对象存储守护进程(OSD)负责去重所需的所有任务。由于需要使用锁进行耗时的对象枚举,并且由于外部代理的按需去重受到限制,该架构会导致性能下降。此外,FSC 并不总是在实际工作负载中找到重复块的最有效方式 [28, 47]。
-
在其引用管理方法上存在缺陷。它与 Ceph 的快照功能不协同工作,因为它在对象快照上缺乏块引用管理。此外,引用计数方法在识别去重块上的引用不匹配时需要很长时间,因为它需要在存储池中进行完整的对象搜索以计算引用。
本文方法
本文介绍了 TiDedup,针对 Ceph 的新型集群级去重架构。提出三种新颖的方案:
-
选择性的集群级爬取。实现了一个爬取进程,会逐步搜索和识别冗余的块,选择性地触发去重,从而减少开销。
-
基于事件驱动的层次化机制,与内容定义的块划分(CDC)。消除了对象存储守护进程(OSD)的后台工作,并设计成在事件发生时执行反应,以处理多个请求。引入了新的层次化API(set_chunk、tier_flush、tier_evict和tier_promote),以及使用CDC的控制和数据路径。
-
对象ID(OID)共享引用方案。提出了使用OID的高效引用管理方法。通过在相邻的快照之间共享OID引用信息,不仅使去重对象与快照兼容,还在创建快照时将OSD间的消息最小化。通过使用OID作为反向指针,Scrub(用于识别和修复不一致性的作业,例如引用不匹配)能够在不执行完整对象搜索的情况下检查引用是否有效。
我们已经充分验证了 TiDedup,并将其集成到了 Ceph 的主线中,以便在各种实验和生产环境中进行评估和部署。我们的评估结果显示,TiDedup 在真实工作负载上实现了高达 34% 的数据减少,与现有的去重设计相比,它在去重期间提高了 50% 的前台 I/O 吞吐量,并显著减少了超过 50% 的引用修正扫描时间。
实验
实验环境:10台机器,每台机器都配备了双向AMD EPYC 7543,每个NUMA节点32个内核(80个线程),512 GB的DRAM。所有节点都与100 GbE网络相连。六个节点用作存储节点,四个节点是用于客户端。每台机器有六个BM1733 QLC SSD(4 TB),并在单个SSD上运行OSD守护程序。
数据集:内部云数据集、Factory数据集、YCSB
实验对比:空间节省、吞吐量、延迟、不同chunk大小影响、故障恢复、Srcub时间、快照创建和删除时间
总结
对Ceph的重复数据删除进行优化。提出:选择性的集群级爬取,会逐步搜索和识别冗余的块,选择性地触发去重;基于事件驱动的层次化机制,与内容定义的块划分(CDC),消除了对象存储守护进程(OSD)的后台工作,并设计成在事件发生时执行反应,以处理多个请求;对象ID(OID)共享引用方案,在相邻的快照之间共享OID引用信息,使去重对象与快照兼容,在创建快照时将OSD间的消息最小化。通过使用OID作为反向指针,检查引用是否有效时避免全局搜索。