OSDI 2006 Paper 分布式元数据论文阅读笔记整理
问题
Farsite[1]是一个无服务器的分布式文件系统,在逻辑上用作集中式文件服务器,在物理上分布在桌面工作站网络中。Farsite用密码学和拜占庭容错(BFT)的虚拟安全性取代了物理安全性[7]。它用现有台式机未使用的资源提供分布式冗余存储、计算和通信取代了高可靠性服务器硬件。它还用自主进程取代了中央系统管理员,这些进程透明地迁移文件内容和文件系统元数据的副本,以适应应用负载的变化、机器可用性的变化以及机器的到达和离开。
Farsite系统包括文件内容的分布式机制,但文件元数据是集中式机制。
本文方法
本文介绍了Farsite的完全分布式目录服务的设计。引入了树形结构的文件标识符,支持以任意粒度动态划分元数据,通过递归路径租赁可伸缩地保持名称空间的一致性,通过多机器操作协议在独立机器管理的文件上一致地执行操作。通过文件字段租赁和分离租赁的新机制来缓解元数据热点。
实验表明,Farsite可以动态地对文件系统元数据进行分区,同时保持完整的文件系统语义。
元数据划分
在构建分布式元数据服务时,最基本的决策是如何在服务器之间划分元数据。一种方法是按文件路径名进行分区,每个服务器管理名称空间的指定区域中的文件。但是重命名文件时,文件的元数据必须迁移到管理目标名称的服务器,或者必须将对目标名称的权限委派给管理文件元数据的服务器。前一种方法面临大型子树时,无法由单个服务器管理。后一种方法将委托与重命名相结合,会限制系统将委托用于负载平衡的主要目的的能力。
按路径名划分的问题源于名称的可变性。本文根据不可变的文件标识符进行分区来避免这些问题。文件标识符具有树形结构,支持任意细粒度的分区。此分区对用户不可见,因为操作可以跨越多个服务器。尽管进行了分区,但通过递归路径租赁,名称空间以可扩展的方式保持一致。
树状结构的文件标识符
文件标识符设计目标。在不重新分配文件标识符的情况下实现元数据重新分区,面临四个问题:
-
为了最大限度地提高委派策略的自由度,标识符空间的区域应该是可以任意粒度划分的。
-
为了允许增长,每个服务器都应该管理文件标识符空间的无限区域。
-
为了提高效率,文件标识符应具有紧凑的表示形式。
-
为了提高效率,从文件标识符到服务器的(动态)映射应该存储在时间和空间有效的结构中。
抽象架构。文件标识符是一个正整数序列,其中空序列标识文件系统根,每个服务器都管理以指定前缀开头的标识符。图2显示了一个由六个服务器(A–F)组成的系统。根服务器(A)管理所有文件,除了标识符前缀为“1”、“3”或“4”的文件;服务器B管理标识符前缀为“1”但前缀不为“1.3”的所有文件。文件标识符空间是一棵树,服务器管理该空间的子树。
在任何时刻,每个文件标识符的前部分确定哪个服务器管理该文件。这部分的大小并不是随时间固定的,可以在服务器间修改,并按任意力度分区,满足目标1和目标2。
实现。文件标识符的整数序列使用Elias γ́编码的变体编码为比特串[13]。由于分配新文件标识符的规则,文件标识符内整数的频率分布几乎与每个目录中文件的频率分布相匹配。选择γ́编码是因为它对于我们在大规模研究[9]中测量的分布是最优紧凑的,从而解决了问题3。
为了存储服务器管理文件标识符空间区域的信息,客户端使用文件标识符的前缀映射,类似于Sprite前缀表[43]。映射存储在索引结构中,通过二进制搜索执行最长匹配前缀搜索[23]。关于映射前缀的计数,存储成本是线性的,查找时间是对数的,从而解决了问题4。
创建和重命名文件。每个新创建的文件都分配一个标识符,该标识符由其父文件的标识符+一个附加的整数。如图3中,文件“1.3”下名为“y”的文件是用标识符“1.3.5”创建的。这条规则倾向于使名称空间中的文件也在标识符空间中保持紧密,因此对后者进行分区只会在前者中产生很少的剪切。这最大限度地减少了路径解析的工作量,路径解析与路径上服务器区域的数量成比例。
重命名可能会破坏名称和标识符空间的对齐。如图3显示了文件“1.3.3”已从文件“1.3”下的原始名称重命名为文件“3”下的名称“m”。除非大量重命名,否则仍将有足够的对齐来保持路径解析过程的效率。
多服务器操作
重命名操作更新三个文件的元数据:源目录、目标目录和要重命名的文件(本文的协议不支持POSIX风格的重命名,这使得第四个文件可以被重命名覆盖)。文件可能由不同服务器管理,需要保证逻辑原子性。
通过两阶段锁定实现了这种原子性:管理目标目录的服务器充当领导者,其他服务器充当追随者。每个跟随者验证其重命名部分,锁定相关元数据字段,并通知领导者。领导决定更新是否有效,并告诉追随者中止或提交他们的更新。
递归路径租约
Farsite为所有基于路径的操作提供名称空间一致性,避免重命名产生孤立循环。
提出递归路径租约,从文件系统根到文件的路径上所有文件的文件标识符链上的只读租约。如图3中的文件“4”的路径租约,将覆盖链{〈〉, 〈2〉, 〈2.1〉, 〈4〉} 。当文件拥有其父文件的路径租约时,才能对该文件发出路径租约。管理持有路径租约的文件的服务器可以访问路径租约,因此服务器只需要管理他的直接子服务器,便于扩展。
总结
本文介绍了Farsite的分布式目录服务的设计。、(1)引入了树形结构的文件标识符,支持以任意粒度动态划分元数据。不使用文件路径进行划分,使用不变的文件标识符,通过前缀匹配决定所在服务器。(2)通过递归路径租赁可伸缩地保持名称空间的一致性。(3)通过多机器间两阶段协议管理重命名的一致性操作。(4)通过文件字段租赁和分离租赁的新机制来缓解元数据热点。