作者:国防科学技术大学计算机学院 吴庆波 董勇 周恩强
高性能计算机体系结构的发展变化,使得性能、可扩展性、安全性、可管理性都会出现瓶颈。而对象存储技术可以轻易突破这种瓶颈。本专题以对象存储技术为引,通过回顾分布式文件系统的发展,并对相关技术进行深入剖析,让读者对分布式文件系统有一个全景式的了解。最后,通过构建Lustre系统的一个实例,让你切实感受到分布式文件系统的巨大威力。
随着网络技术的飞速发展,网络化存储系统逐渐成为主流。网络化存储系统能否成功,必须有效解决以下三个主要问题:第一,提供高性能的存储,在I/O级和数据吞吐率方面能满足成百上千台规模的集群服务器聚合访问需求;第二,提供安全的共享数据访问,便于集群应用程序的编写和存储的负载均衡;第三,提供强大的容错能力,确保存储系统的高可用性。
目前,国际上主流的网络化存储结构主要有存储局域网(SAN,Storage Area Network)和网络附加存储(NAS,Network-attached Storage)。SAN采用交叉开关结构,可为较大数目的结点机和存储设备提供一个快速、可扩展的互连。它采用SCSI块I/O的命令集,通过在磁盘或FC(Fiber Channel)级的数据访问,提供高性能的随机I/O和数据吞吐率,具有高带宽、低延迟的优势,在高性能计算中占有一席之地。如2004年12月,TOP 500排名第二的SGI Columbia就采用基于SAN的CXFS文件系统,实现高性能文件存储。但是,SAN系统的价格较高,且在可扩展性方面仍有一定局限性,随着SAN连接规模的扩大,其安全性也存在着隐患。NAS采用NFS或CIFS命令集访问数据,以文件为传输协议,通过TCP/IP实现网络化存储,支持多个平台间的数据共享,具有可扩展性好、价格便宜、用户易管理等特点。但是,由于NAS的协议开销高、带宽低、延迟大,不利于在高性能I/O集群中应用,因此,通常用于与其他异构系统的互连,如IBM BlueGene通过NFS与外部存储系统互联。
对象存储
对象存储综合了NAS和SAN的优点,同时具有SAN的高速直接访问和NAS的数据共享等优势,提供了具有高性能、高可靠性、跨平台以及安全的数据共享的存储体系结构。
对象存储体系结构
对象存储具有高性能、高可靠性。其组成包括智能存储接口和设备,以及分布的元数据管理。在对象存储系统中,客户端可以直接访问存储设备,减少了数据存储路径中的控制路径。
在对象存储中,使用对象存储设备(Object-based Storage Device,OSD)进行物理的数据存储。OSD是连接到网络上的存储设备。它可以是磁盘、磁带或者其他的存储介质,并具有自我管理功能。
在当前的存储结构中,元数据服务器主要提供两种功能:为客户端提供数据的逻辑视图,包括文件名、目录构成等;为客户端提供物理视图,描述数据在物理介质上的存放。在对象存储中,数据的逻辑视图和物理视图被分开,元数据服务器只负责逻辑视图,物理视图则由OSD自己进行管理。由于逻辑视图只占用了文件服务器10%的元数据负载,因此,这种划分大大减轻了元数据服务器的负担,使得存储系统的扩展成为可能。
对象存储系统的组成
对象存储包括几个组成部分:对象(Object)、OSD、文件系统、元数据服务器(Metadata Server,MDS)和网络连接。Object包含了文件数据以及相关的属性信息,可以进行自我管理。OSD是一个智能设备,是Object的集合。文件系统运行在客户端上,将应用程序的文件系统请求传输到MDS和OSD上。MDS为系统提供元数据、Cache一致性等服务。网络连接将整个系统连接起来。
1.Object
Object是对象存储的基本单元。每个Object是数据和数据属性集的综合体。数据属性可以根据应用的需求进行设置,包括数据分布、服务质量等。在传统的存储中,块设备要记录每个存储数据块在设备上的位置。Object维护自己的属性,从而简化了存储系统的管理任务,增加了灵活性。Object的大小可以不同,可以包含整个数据结构,如文件、数据库表项等。
每个存储设备中的Object可以分为三类,即RootObject、GroupObject、UserObject。每个存储设备都包含一个惟一的RootObject。此Object中包含了存储设备的全局属性,包括GroupObject数目、UserObject数目、服务特性等,由存储设备负责维护。GroupObject对UserObject进行管理,其中包括了一个UserObject列表、最大可用的UserObject数目、当前Group的容量等。GroupObject的默认属性从RootObject中继承而来,所包含的数据是当前可使用的ObjectID。UserObject是存放具体数据的Object类型,每个UserObject都包括用户数据、存储属性和用户属性。UserObject中的用户数据同传统存储系统中的文件数据是相同的。存储属性则用来决定Object在磁盘上的块分布,包括逻辑长度、ObjectID等。用户属性则定义了包括Object拥有者、访问控制列表等属性信息。
在OSD中,每个Object都可以通过一个ObjectID进行访问。
2.OSD
OSD是Object-based Storage Device的缩写。每个OSD都是一个智能设备,具有自己的存储介质、处理器、内存以及网络系统等,负责管理本地的Object,是对象存储系统的核心。OSD同块设备的不同不在于存储介质,而在于两者提供的访问接口。
OSD的主要功能包括数据存储和安全访问。
作为存储设备,数据存储是OSD的主要功能。OSD使用Object对所保存的数据进行管理。它将数据存放到磁盘的磁道和扇区,将若干磁道和扇区组合起来构成Object,并且通过此Object向外界提供对数据的访问。每个Object同传统的文件相似,使用同文件类似的访问接口,包括Open、Read、Write等。但是两者并不相同,每个Object可能包括若干个文件,也可能是某个文件的一部分,且是独立于操作系统的。除了具体的用户数据外,OSD还记录了每个Object的属性信息,主要是物理视图信息。将这些信息放到OSD上,大大减轻了元数据服务器的负担,增强了整个存储系统的并行访问性能和可扩展性。
当客户端对Object的请求到达后,OSD对请求进行解释,并读取相关数据,再返回给客户端。在进行数据读写过程中,客户端同OSD进行直接通信,获取存储的数据,通信过程不需要额外服务的参与。如果文件系统将数据分布到多个OSD上,那么客户端在操作数据时就可以在多个OSD上并发执行,从而得到较高的性能。同样,当多个客户端进行访问时,由于多个OSD的存在,仍然可以提供较高的吞吐率,实现存储的可扩展性。客户端和OSD之间的直接并发通信,使整个系统可以得到高性能和高可扩展性。
3.文件系统
OSD只是提供了Object的数据访问接口,而应用程序通常不直接使用Object接口。因此,对于对象存储系统来说,必须提供一种标准的文件访问接口。这种接口具有和通用文件系统相同的访问方式,同时为了提高性能,也具有对数据的Cache功能和文件的条带功能。
现有的应用对数据的访问大部分都是通过POSIX文件方式进行的,因此,对象存储系统提供给用户的也是标准的POSIX文件访问接口。文件系统对用户的文件操作进行解释,并在元数据服务器和OSD间通信,完成所请求的操作。以读为例,客户端发出读请求以后,文件系统首先向元数据服务器发送请求,获取要读取的数据所在的OSD,然后直接向每个OSD发送数据读取请求;OSD得到请求以后,判断要读取的Object,并根据此Object要求的认证方式,对客户端进行认证,如果此客户端得到授权,则将Object的数据返回给客户端;文件系统收到OSD返回的数据以后,读操作完成。
尽管存储系统的性能已经得到了极大提高,但和内存的缓冲器相比,其速度仍然较低。因此,文件系统中的Cache就成为提高性能的重要途径。此外,由于并行访问的特性,文件系统必须维护不同客户端上Cache的一致性,保证文件系统的数据一致。



