1 dx存储jj
1.1和传统网络存储的区别
- 要理解对象存储,先谈传统的网络存储。
- 传统的网络存储主要,NAS和SAN。
- Network Attached Storage
- 一个提供了存储功能和文件系统的网络服务器。
- 客户端可访问NAS上的文件系统,还可上传和下载文件。
- NAS客户端和服务端之间使用的协议SMB、NFS以及AFS等网络文件系统协议
- 对于客户端,NAS就是一个网络上的文件服务器。
- Storage Area Network的简称。
- 和NAS的区别
- SAN只提供了块存储,把文件系统的抽象交给客户端来管理。
- SAN的客户端和服务端之间的协议有
- Fibre Channel、 E ISCSI、 ATA over Ethernet(AoE)和 Hyperscsi。
- 对于客户端来说,SAN就是一块磁盘,可对其格式化、创建文件系统并挂载
- NAS和SAN不完全对立,现代的网络存储两者混合用,可同时提供文件级别的协议和块级别的协议。
- 对象存储跟它们有什么区别?
- 首先是对数据的管理方式不同。
1.1.1数据的管理方式
- 对网络文件系统来说,数据是以一个个文件的形式来管理的;
- 对块存储,数据是以数据块的形式来管理的,每个数据块有它自己的地址,但没有额外的背景信息;
- 对象存储则是以对象的方式来管理数据的,一个对象通常包含了3个部分:对象的数据、对象的元数据以及一个全局唯一的标识符(即对象的ID)。
- 对象的数据就是该对象中存储的数据本身。
- 一个对象可以用来保存大量无结构的数据,比如一首歌、一张照片或是一个在线文档
- 元数据是对象的描述信息,为了和对象的数据本身区分开来,我们称其为元数据。
- 某首歌的歌名、某张照片拍摄的时间、某个文档的大小等都属于描述信息,也就是元数据。
- 元数据第3章会详细介绍
- 对象的标识符用于引用该对象。
- 和对象的名字不同,标识符具有全局唯一性。
- 名字不具有这个特性,
- 名字为阿黄的对象可以有很多个。
- 但若是用标识符来引用就只可能有一个。
- 通常用对象的散列值来做其标识符,关于散列值的详细介绍见第3章
- 除了对数据的管理方式不同以外,对象存储跟网络存储访问数据的方式也不同。
1.1.2 访问数据的方式
- 网络文件系统的客户端通过NFS等网络协议访问某个远程服务器上存储的文件。
- 块存储的客户端通过数据块的地址访问SAN上的数据块。
- 对象存储通过REST网络服务访问对象
-
Representational State Transfer。
-
REST网络服务通过标准HTP服务对网络资源提供一套预先定义的无状态操作
-
万维网刚兴起时,网络资源被定义为可通过URL访问的文档或文件。
-
现对于它的定义已更宽泛和抽象
-
网络上一切可通过任何方式被标识、命名、引用或处理的东西都是网络资源
-
对对象存储来说,
- 对象就是一种网络资源,
- 除对象本身以外,也需提供一些其他的网络资源用来访问对象存储的各种功能,本书后续一一介绍
- 客户端向REST网络服务发起请求并接收响应,以确认网络资源发生了某种变化
- HTTP预定义的请求方法(RequestMethod)
- 包括且不限于GET、POST、PUT、DELETE等
- GET在REST标准中获取某个网络资源
- PUT创建或替换某个网络资源(POST一般不同于替换网络资源,如果该资源已经存在,POST通常会返回一个错误而不是覆盖它);
- POST创建某个网络资源,
- DELETE删除某个网络资源。
- 后续章节看到对象存储的接口是如何使用这些HTTP请求方法
1.1.3对象存储的优势
- 提升了存储系统的扩展性。
- 存储系统中保存的数据越来越多,存储系统也需要同步扩展,
- 由于存储架构的硬性限制,传统网络存储系统的管理开销会呈指数上升。
- 而对象存储架构的扩展只需要添加新的存储节点就可。
- 以更低代价提供了数据冗余
- 在分布式对象存储系统中一个或多个节点失效情况下,对象依然可用,大多数情况下客户都不会意识到有节点出问题
- 传统网络存储对于数据冗余通常采用的方式是保留多副本(至少3份,一个副本出了错,还能用少数服从多数的方式解决争议)
- 而对象存储的冗余效率更高
- 第5章讨论数据冗余
- 本章要实现一个单机版的对象存储原型,
- 对象存储有一个直观的了解。
- 单机版的服务程序还称不上分布式服务,
- 但可借此了解对象存储的接口,
- 也就是将了解客户端是如何通过REST接口上传和下载一个对象
- 这个对象又是以什么样的形式被保存在服务器
- 下一章还将不断丰富架构和功能来适应各种新需求
1.2单机版对象存储的架构
- 一台服务器上运行一个HTTP服务提供的REST接口,
- 该服务通过访问本地磁盘来对象的存取,见图1-1。
1.2.1 REST接口
- 单机版的REST接口简单,只实现了对象的PUT和GET
PUT /objects/<object_name>
请求正文( Request Body)
-
客户端通过PUT将一个对象上传至服务器,服务器则将该对象保存在本地磁盘上。
-
/objects/<object_name>是标识该对象网络资源的URL。
-
URL是 Uniform Reesource Locator
-
也就是一个网络地址,用于引用某个网络资源在网络上的位置。
-
对象存储中,PUT方法来上传一个对象。
GET /objects/<obiect_name>
响应正文(Response Body)
- 客户端通过GET从服务器上下载一个对象,服务器在本地磁盘上查找并读取该对象,如果该对象不存在,则服务器返回HTP错误代码404 Not Found
- 在对象存储中,总用GET来下载一个对象
1.2.2对象PUT流程
- 简单的图来概括PUT流程,见图1-2
- 客户端的PUT请求提供对象的名字<object_name>
- 和对象的数据
- 它们最终被保存在本地磁盘上的文件$STORAGE_ROOT/objects/<object_name>中
- $STORAGE_ROOT环境变量保存本地磁盘上的存储根目录的名字