本文主要是介绍Dynamic Metadata Management for Petabyte-scale File Systems——论文阅读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
SC 2004 Paper 分布式元数据论文阅读笔记整理
问题
在读写与元数据操作解耦的PB级分布式文件系统中,尽管元数据的大小相对较小,但元数据操作可能占所有文件系统操作的50%以上[19],这使得MDS集群的性能对整个系统性能和可扩展性至关重要。
挑战
系统中的元数据服务器集群应该有效地维护各种工作负载的文件系统目录和权限语义,包括科学计算应用程序和通用计算。这样的文件系统可能涉及从几个字节到数TB的文件、包含数百万个文件的目录以及访问不同或相同文件的数千个客户端。由于工作负载的特性会随着时间的推移而变化,MDS集群必须动态划分工作负载来持续适应当前需求,以保持高系统性能和长期可扩展性。
本文方法
本文提出了一个动态子树划分和自适应元数据管理系统,有效管理随时间变化的分层元数据工作负载,并促进流量控制,同时保持和利用局部性。
通过模拟环境的实验,相比与静态分区和基于哈希的方法,在性能、可扩展性和适应性方面有优势。
分层划分
动态子树划分的核心是将文件系统视为层次结构,将层次结构的子树的权限委派给不同的元数据服务器来对文件系统进行分区。
虽然定位文件的成本较高,但对于按照POSIX语义的要求,验证嵌套目录的用户访问权限是必要的。分层定义的结构允许系统以固定成本修改子树的根目录,来移动或更改目录树中任意大小子树的权限。层次结构的各个子树完全独立于同级树,语义仅依赖于指向文件系统根的前缀(祖先)目录。
权限和协作缓存
元数据更新必须在元数据集群中的某个点上序列化,以保持原子性和一致性。为了最大限度地提高平均案例性能,每个元数据项都有一个基于分层分区的权限MDS,该MDS负责序列化更新、将更改提交到稳定存储,并在MDS群集中的其他节点上复制该记录时管理缓存一致性和内存一致性。
在某些情况下,可以分发对元数据的更新。例如,对于大多数操作,修改时间和文件大小等字段都是单调增加的,因此为并发写入程序提供服务的副本可以定期向权威MDS发送其最新值,权威MDS会保留最大值,并作为对客户端读取的返回值(例如,检查文件大小的stat)。
负载均衡
MDS节点定期交换心跳消息,其中包括对其当前负载级别的描述。繁忙节点可以识别层次结构中适当的部分,并启动双重提交事务将权限转移到非繁忙节点。在该交换过程中,所有活动状态和缓存的元数据都被传输到新的授权节点,以保持一致性,并避免新的权威节点重新读取它所需的磁盘I/O,这将慢几个数量级。
使用基于子树的分区进行授权的最小单位是目录。如果单个目录变得异常大或繁忙,那么将其驻留在单个MDS上是效率低下的。为此可以在集群中对单个目录的内容进行哈希,通过文件名和目录索引节点号的哈希来定义给定目录项的权限。由于授权是为任何给定的文件名定义的,因此单个MDS节点可以对除删除目录和重命名之外的目录操作进行权威和独立的操作。如果目录缩小或变得不那么流行,则将它们合并在一个节点上,以实现更高效的操作和存储。
负载均衡时也要同时考虑所有资源的利用率,如内存、CPU和网络利用率。管理层次结构中广泛但稀疏使用的部分的节点可能会受到内存的限制,而服务于繁忙热点的节点可能受到CPU或网络的约束。
实验表明,最大化集群总吞吐量不一定要通过平衡的工作负载分布来实现。MDS性能依赖层次结构根附近的项目,因为这些项目(及其前缀)最有可能被缓存。动态分布算法可以基于任何分层性能度量,可以制定策略,以牺牲存档数据为代价,对文件系统的活动部分进行优先级排序。
流量控制
为了有效地适应不断变化的工作负载,MDS集群还必须满足大量客户端同时访问层次结构中同一文件或目录的情况。解决的思路是客户端对元数据分区的了解:如果所有客户端都知道在任何时候在哪里访问任何给定的元数据(例如,基于定义良好的哈希策略),那么可以同时访问同一项;如果客户端不知道元数据分布,那么请求必须随机定向并在MDS集群内转发,则需要为所有请求提供额外的网络跃点。理想情况下,希望将这两种情况结合起来:对不受欢迎的项目的访问指向权威MDS节点,对流行项目的访问则指向许多或所有节点(每个节点都复制流行元数据)以分发流量。
MDS节点使用访问计数器来监控元数据的流行程度,该计数器的值会随着时间的推移而衰减。发送给客户端的所有响应都包括请求的元数据及其前缀目录的当前分发信息,即客户端将来应该联系哪些MDS节点,然后将这些信息缓存在客户端上。对于不受欢迎的项目,将告诉客户端将未来的请求定向在权威节点,对于受欢迎项目,将告知该项目在许多或所有节点上复制。从而在潜在的拥挤发生之前避免,同时仍然允许有效地引导对不受欢迎的数据的大多数请求。
目录局部性
元数据分层有利于利用目录局部性,通过将相关的信息存储在一起,并预取潜在的相关信息(同一目录中的索引节点)来更有效地满足典型工作负载的请求。
将索引节点元数据与链接到它们的目录条目存储在一起。在执行readdir或目录查找的过程中,MDS集群同时获取后续事务可能需要的嵌入inode,而无需任何额外的磁盘查找或表查找。除了使单个查找操作更快之外,还可以将目录的全部内容预取到缓存中,这样同一目录中的多个查找可以无需进一步的磁盘I/O。预取的元数据插入到缓存的LRU列表的尾部附近,以避免将已知的有用信息替换为仅潜在有用的信息。
存储
所有元数据事务都必须快速写入稳定的存储中,主要需求是写入带宽。利用有界日志结构在每个元数据服务器上存储更新。由于日志大小与MDS的内存量相当,因此日志表示该节点的工作集的近似值,从而允许在启动时或故障后用数百万条记录快速预加载内存缓存。
将目录内容和嵌入的索引节点存储在一起,以更好地匹配预期的文件系统使用模式。目录内容(条目和索引节点)可以存储在类似B树的结构中,该结构允许增量更新(少量创建或删除),对磁盘结构的修改最小(重写更改的B树节点)。
总结
对分布式文件系统元数据的动态子树划分进行介绍,介绍其各种优点。(1)核心是分层划分,每个MDS只负责部分子树。(2)通过MDS间定期心跳,识别繁忙和非繁忙节点,全面考虑内存、CPU和网络利用率,利用两阶段提交进行负载均衡。(3)为了便于流量控制,MDS通过计数器记录元数据流行度,返回给客户端的响应包括请求元数据和分发信息,即客户端将来应该联系哪些MDS节点,并缓存在客户端上。(4)利用目录局部性,执行读目录或目录查找时,同时缓存目录下全部内容,优化后续查找。(5)利用有界日志存储元数据更新,精目录内容和嵌入的索引节点存储在一起,以更好地匹配预期的文件系统使用模式。
这篇关于Dynamic Metadata Management for Petabyte-scale File Systems——论文阅读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!