前言

今天碰巧看到一篇介绍对象存储概念的博客,感觉内容通俗易懂。现在做个简单的笔记,其中修改了原文的部分内容和结构。

对象存储概述

什么是对象存储? 

相对于存储局域网(SAN)和网络附加存储(NAS)网络存储架构,对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称 OSD。总体上来讲,对象存储综合了 NAS 和 SAN 的优点,同时具有 SAN 的高速直接访问和 NAS 的分布式数据共享等优势,提供了具有高性能、高可靠性、跨平台以及安全的数据共享的存储体系结构。

对象存储架构

核心是将数据通路(数据读或写)和控制通路(元数据)分离,并且基于对象存储设备构建存储系统,每个对象存储设备是智能的,能够自动管理其上的数据分布。对象存储结构由对象存储设备、元数据服务器、对象存储系统的客户端三部分组成。 

nas存储上部署 hadoop nas存储架构_元数据

对象

对象是系统中数据存储的基本单位,每个 Obeject 是数据和数据属性集的综合体,数据属性可以根据应用的需求进行设置,包括数据分布、服务质量等。在传统的存储系统中用文件或块作为基本的存储单位,块设备要记录每个存储数据块在设备上的位置。Object 维护自己的属性,从而简化了存储系统的管理任务,增加了灵活性。Object 的大小可以不同,可以包含整个数据结构,如文件、数据表项等。在存储设备中,所有对象都有一个对象标识,通过对象标识 OSD 命令访问对象。通常由多种类型的对象,存储设备上的根对象标识存储设备和该设备的各种属性组,对象是存储设备上共享资源管理策略的对象集合等。 

nas存储上部署 hadoop nas存储架构_nas存储上部署 hadoop_02

nas存储上部署 hadoop nas存储架构_对象存储_03

nas存储上部署 hadoop nas存储架构_nas存储上部署 hadoop_04

对象存储设备

每个 OSD 都是一个智能设备,具有自己的存储介质、处理器、内存以及网络系统等,负责管理本地的 Object,是对象存储系统的核心。OSD 同块设备的不同不在于存储介质,而在于两者提供的访问接口。OSD 的主要功能包括数据存储和安全访问、目前国际上通常采用刀片式结构实现对象存储设备。OSD 提供三个主要功能: 
(1) 数据存储:OSD 管理对象数据,并将它们放置在标准的磁盘系统上,OSD 不提供接口访问方式,Client 请求数据时用对象ID、偏移进行数据读写。 
(2) 智能分布:OSD 用其自身的 CPU 和内存优化数据分布,并支持数据的预取。由于 OSD 可以智能地支持对象的预取,从而可以优化磁盘的性能。 
(3) 每个对象数据的管理:OSD 管理存储在其上对象的元数据,该元数据与传统的 inode 元数据相似,通常包括对象的数据块和对象的长度。而在传统的 NAS 系统中,这些元数据是由文件服务器提供的,对象存储架构将系统中主要的元数据管理工作由 OSD 来完成,降低了 Client 的开销。 

nas存储上部署 hadoop nas存储架构_OSD_05

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

MDS 控制 Client 与 OSD 对象的交互,为客户端提供元数据,主要是文件的逻辑视图,包括文件与目录的组织关系、每个文件所对应的 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 不一致引发的问提。 

对象存储系统的客户端

为了有效支持 Client 支持访问 OSD 上的对象,需要在计算节点实现对象存储系统的 Client。现有的应用对数据的访问大部分都是通过 POSIX 文件方式进行的,同时为了提高性能,也具有对数据的 Cache 功能和文件的条带功能。同时,文件系统必须维护不同客户端上 Cache 的一致性,保证文件系统的数据一致。文件系统访问流程: 
(1) 客户端应用发出读请求; 
(2) 文件系统向元数据服务器发送请求,获取要读取的数据所在的 OSD; 
(3) 然后直接向每个 OSD 发送数据读取请求; 
(4) OSD 得到请求后,判断要读取的 Object,并根据此 Object 的认证方式,对客户端进行认证,如果客户端得到了授权,则将 Object 的数据返回给客户端; 
(5) 文件系统收到 OSD 返回的数据以后,读操作完成。

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

分布元数据 

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

nas存储上部署 hadoop nas存储架构_数据_06

并发数据访问

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