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 dx存储jj

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

1 dx存储jj

  • 客户端的PUT请求提供对象的名字<object_name>
    • 和对象的数据
  • 它们最终被保存在本地磁盘上的文件$STORAGE_ROOT/objects/<object_name>中
  • $STORAGE_ROOT环境变量保存本地磁盘上的存储根目录的名字