对于存储,我们并不陌生,我们每天接触最多的存储之一便是手机存储。为增进大家对存储的认识,本文将对块存储和文件存储予以介绍。此外,本文仅为上篇,更多存储相关内容请参考后续文章。


块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称 OSD。

 

首先,我们介绍这两种传统的存储类型。通常来讲,所有磁盘阵列都是基于 Block 块的模式(DAS),而所有的 NAS 产品都是文件级存储

 

一、块存储

以下列出的两种存储方式都是块存储类型:

1) DAS(Direct Attach STorage):是直接连接于主机服务器的一种储存方式,每一台主机服务器有独立的储存设备,每台主机服务器的储存设备无法互通,需要跨主机存取资料时,必须经过相对复杂的设定,若主机服务器分属不同的操作系统,要存取彼此的资料,更是复杂,有些系统甚至不能存取。通常用在单一网络环境下且数据交换量不大,性能要求不高的环境下,可以说是一种应用较为早的技术实现。


2)SAN(Storage Area Network):是一种用高速(光纤)网络联接专业主机服务器的一种储存方式,此系统会位于主机群的后端,它使用高速 I/O 联结方式, 如 SCSI, ESCON 及 Fibre- Channels。一般而言,SAN 应用在对网络速度要求高、对数据的可靠性和安全性要求高、对数据共享的性能要求高的应用环境中,特点是代价高,性能好。例如电信、银行的大数据量关键应用。它采用 SCSI 块 I/O 的命令集,通过在磁盘或 FC(Fiber Channel)级的数据访问提供高性能的随机 I/O 和数据吞吐率,它具有高带宽、低延迟的优势,在高性能计算中占有一席之地,但是由于 SAN 系统的价格较高,且可扩展性较差,已不能满足成千上万个 CPU 规模的系统。

 

二、文件存储

通常,NAS 产品都是文件级存储。 NAS(Network Attached Storage):是一套网络储存设备,通常是直接连在网络上并提供资料存取服务,一套 NAS 储存设备就如同一个提供数据文件服务的系统,特点是性价比高。例如教育、政府、企业等数据存储应用。

 

它采用 NFS 或 CIFS 命令集访问数据,以文件为传输协议,通过 TCP/IP 实现网络化存储,可扩展性好、价格便宜、用户易管理,如目前在集群计算中应用较多的 NFS 文件系统,但由于 NAS 的协议开销高、带宽低、延迟大,不利于在高性能集群中应用。

 

下面,我们对 DAS、NAS、SAN 三种技术进行比较和分析:

表格 1 三种技术的比较

 

 

 

针对 Linux 集群对存储系统高性能和数据共享的需求,国际上已开始研究全新的存储架构和新型文件系统,希望能有效结合 SAN 和 NAS 系统的优点,支持直接访问磁盘以提高性能,通过共享的文件和元数据以简化管理,目前对象存储系统已成为 Linux 集群系统高性能存储系统的研究热点,如 Panasas 公司的 Object Base Storage Cluster System 系统和 Cluster File Systems 公司的 Lustre 等。下面将详细介绍对象存储系统。

 

三、对象存储

总体上来讲,对象存储同兼具 SAN 高速直接访问磁盘特点及 NAS 的分布式共享特点(扩展性)。

 

核心是将数据通路(数据读或写)和控制通路(元数据)分离,并且基于对象存储设备(Object-based Storage Device,OSD)构建存储系统。每个对象存储设备具有一定的智能,能够自动管理其上的数据分布。

 


对象存储结构组成部分(对象、对象存储设备、元数据服务器、对象存储系统的客户端):

 

3.1 对象

对象是系统中数据存储的基本单位,一个对象实际上就是文件的数据和一组属性信息(Meta Data)的组合,这些属性信息可以定义基于文件的 RAID 参数、数据分布和服务质量等,而传统的存储系统中用文件或块作为基本的存储单位,在块存储系统中还需要始终追踪系统中每个块的属性,对象通过与存储系统通信维护自己的属性。在存储设备中,所有对象都有一个对象标识,通过对象标识 OSD 命令访问该对象。通常有多种类型的对象,存储设备上的根对象标识存储设备和该设备的各种属性,组对象是存储设备上共享资源管理策略的对象集合等。

 

 

 


3.2 对象存储设备

对象存储设备具有一定的智能,它有自己的 CPU、内存、网络和磁盘系统,OSD 同块设备的不同不在于存储介质,而在于两者提供的访问接口。OSD 的主要功能包括数据存储和安全访问。目前国际上通常采用刀片式结构实现对象存储设备。OSD 提供三个主要功能:

 

(1) 数据存储。OSD 管理对象数据,并将它们放置在标准的磁盘系统上,OSD 不提供块接口访问方式,Client 请求数据时用对象 ID、偏移进行数据读写。

 

(2) 智能分布。OSD 用其自身的 CPU 和内存优化数据分布,并支持数据的预取。由于 OSD 可以智能地支持对象的预取,从而可以优化磁盘的性能。

 

(3) 每个对象元数据的管理。OSD 管理存储在其上对象的元数据,该元数据与传统的 inode 元数据相似,通常包括对象的数据块和对象的长度。而在传统的 NAS 系统中,这些元数据是由文件服务器维护的,对象存储架构将系统中主要的元数据管理工作由 OSD 来完成,降低了 Client 的开销。

 


3.3 元数据服务器(Metadata Server,MDS)

MDS 控制 Client 与 OSD 对象的交互,主要提供以下几个功能:

 

(1) 对象存储访问。

MDS 构造、管理描述每个文件分布的视图,允许 Client 直接访问对象。MDS 为 Client 提供访问该文件所含对象的能力,OSD 在接收到每个请求时将先验证该能力,然后才可以访问。

 

(2) 文件和目录访问管理。

MDS 在存储系统上构建一个文件结构,包括限额控制、目录和文件的创建和删除、访问控制等。

 

(3) Client Cache 一致性。

为了提高 Client 性能,在对象存储系统设计时通常支持 Client 方的 Cache。由于引入 Client 方的 Cache,带来了 Cache 一致性问题,MDS 支持基于 Client 的文件 Cache,当 Cache 的文件发生改变时,将通知 Client 刷新 Cache,从而防止 Cache 不一致引发的问题。

 

3.4 对象存储系统的客户端 Client

为了有效支持 Client 支持访问 OSD 上的对象,需要在计算节点实现对象存储系统的 Client。现有的应用对数据的访问大部分都是通过 POSIX 文件方式进行的,对象存储系统提供给用户的也是标准的 POSIX 文件访问接口。接口具有和通用文件系统相同的访问方式,同时为了提高性能,也具有对数据的 Cache 功能和文件的条带功能。同时,文件系统必须维护不同客户端上 Cache 的一致性,保证文件系统的数据一致。文件系统读访问流程:

 

1)客户端应用发出读请求;

2)文件系统向元数据服务器发送请求,获取要读取的数据所在的 OSD;

3)然后直接向每个 OSD 发送数据读取请求;

4)OSD 得到请求以后,判断要读取的 Object,并根据此 Object 要求的认证方式,对客户端进行认证,如果此客户端得到授权,则将 Object 的数据返回给客户端;

5)文件系统收到 OSD 返回的数据以后,读操作完成。

 

对象存储文件系统的关键技术:

1、分布元数据 传统的存储结构元数据服务器通常提供两个主要功能。

 

(1)为计算结点提供一个存储数据的逻辑视图(Virtual File System,VFS 层),文件名列表及目录结构。

 

(2)组织物理存储介质的数据分布(inode 层)。对象存储结构将存储数据的逻辑视图与物理视图分开,并将负载分布,避免元数据服务器引起的瓶颈(如 NAS 系统)。元数据的 VFS 部分通常是元数据服务器的 10%的负载,剩下的 90%工作(inode 部分)是在存储介质块的数据物理分布上完成的。在对象存储结构,inode 工作分布到每个智能化的 OSD,每个 OSD 负责管理数据分布和检索,这样 90%的元数据管理工作分布到智能的存储设备,从而提高了系统元数据管理的性能。另外,分布的元数据管理,在增加更多的 OSD 到系统中时,可以同时增加元数据的性能和系统存储容量。

 

2、并发数据访问 对象存储体系结构定义了一个新的、更加智能化的磁盘接口 OSD。OSD 是与网络连接的设备,它自身包含存储介质,如磁盘或磁带,并具有足够的智能可以管理本地存储的数据。计算结点直接与 OSD 通信,访问它存储的数据,由于 OSD 具有智能,因此不需要文件服务器的介入。如果将文件系统的数据分布在多个 OSD 上,则聚合 I/O 速率和数据吞吐率将线性增长,对绝大多数 Linux 集群应用来说,持续的 I/O 聚合带宽和吞吐率对较多数目的计算结点是非常重要的。对象存储结构提供的性能是目前其它存储结构难以达到的,如 AcTIveScale 对象存储文件系统的带宽可以达到 10GB/s。