Storage Research

块存储

定义:

最底层的数据组织方式,所有数据按照固定的大小分块写入,每一块赋予一个用于寻址的编号。

应用方式:

  1. 为了方便管理,硬盘这样的块设备通常可以划分为多个逻辑块设备,也就是我们熟悉的硬盘分区(Partition)。
  2. 单个介质的容量、性能有限,可以通过某些技术手段把多个物理块设备组合成一个逻辑块设备,例如各种级别的RAID,JBOD,某些操作系统的卷管理系统(Volume Manager)如Windows的动态磁盘、Linux的LVM等。

优点

  1. 这种方式的好处当然是因为通过了Raid与LVM等手段,对数据提供了保护;
  2. 可以将多块廉价的硬盘组合起来,称为一个大容量的逻辑盘对外提供服务,提高了容量;
  3. 写入数据时,由于是多块磁盘组合出来的逻辑盘,所以几块硬盘可以并行写入的,提升了读写效率;

缺点

  1. 主机之间数据无法共享,在服务器不做集群的情况下,块存储裸盘映射给主机,在格式化使用后,对于主机来说相当于本地盘,那么主机A的本地盘根本不能给主机B去使用,无法共享数据
  2. 无目录系统

文件存储

定义:

用“文件”这个概念对这些数据进行组织,所有用于同一用途的数据,按照不同应用程序要求的结构方式组成不同类型的文件(通常用不同的后缀来指代不同的类型),然后我们给每一个文件起一个方便理解记忆的名字。而当文件很多的时候,我们按照某种划分方式给这些文件分组,每一组文件放在同一个目录(或者叫文件夹)里面,当然我们也需要给这些目录起一个容易理解和记忆的名字。而且目录下面除了文件还可以有下一级目录(称之为子目录或者子文件夹),所有的文件、目录形成一个树状结构

应用方式:

把存储介质上的数据组织成目录-子目录-文件这种形式的数据结构,用于从这个结构中寻找、添加、修改、删除文件的程序,以及用于维护这个结构的程序,组成的系统有一个专用的名字:文件系统(File System)

文件系统有很多,常见的有Windows的FAT/FAT32/NTFS,Linux的EXT2/EXT3/EXT4/XFS/BtrFS等。而在网络存储中,底层数据并非存储在本地的存储介质,而是另外一台服务器上,不同的客户端都可以用类似文件系统的方式访问这台服务器上的文件,这样的系统叫网络文件系统(Network File System),常见的网络文件系统有Windows网络的CIFS(也叫SMB)、类Unix系统网络的NFS等。而文件存储除了网络文件系统外,FTP、HTTP其实也算是文件存储的某种特殊实现,都是可以通过某个url来访问一个文件。

优点:

  1. 有目录检索,用户友好。
  2. 方便共享。

缺点:

  1. 读写速度较慢,因为需要遍历树状目录结构。

对象存储

定义:

对象存储一般体现形式是一个ID,数据和元数据打包在一起作为一个整体对象存在一个超大池子里。对于对象访问,只需要报出它的ID,就能立即找到它,但访问的时候对象是作为一个整体访问的。

应用方式:

优点:

对象存储将元数据独立了出来,控制节点叫元数据服务器(服务器+对象存储管理软件),里面主要负责存储对象的属性(主要是对象的数据被打散存放到了那几台分布式服务器中的信息),而其他负责存储数据的分布式服务器叫做OSD,主要负责存储文件的数据部分。当用户访问对象,会先访问元数据服务器,元数据服务器只负责反馈对象存储在哪些OSD,假设反馈文件A存储在B、C、D三台OSD,那么用户就会再次直接访问3台OSD服务器去读取数据。

这时候由于是3台OSD同时对外传输数据,所以传输的速度就加快了。当OSD服务器数量越多,这种读写速度的提升就越大,通过此种方式,实现了读写快的目的。

另一方面,对象存储软件是有专门的文件系统的,所以OSD对外又相当于文件服务器,那么就不存在文件共享方面的困难了,也解决了文件共享方面的问题。

所以对象存储的出现,很好地结合了块存储与文件存储的优点。

对象存储的无层次结构特点,对象存储有以下优点:

三种存储类型的联系

块存储、文件存储、对象存储的关系:

  1. 它们就是不同的接口。块存储就是最接近存储介质的接口,也就是包装最薄的,或者说没有包装。文件和对象存储都是对块存储的包装。可以简单认为对象存储就是不分层次的文件存储。

分布式存储的应用场景相对于其存储接口,现在流行分为三种:

  1. 对象存储: 也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展,如七牛、又拍、Swift、S3
  2. 块存储: 这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的EBS,青云的云硬盘和阿里云的盘古系统,还有Ceph的RBD(RBD是Ceph面向块存储的接口)
  3. 文件存储: 通常意义是支持POSIX接口,它跟传统的文件系统如Ext4是一个类型的,但区别在于分布式存储提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存储的接口),但是有时候又会把GFS,HDFS这种非POSIX接口的类文件存储接口归入此类。

元数据管理的差别:

  1. 块存储,服务端不维护元数据,服务端只保留blockid到block的映射关系。
  2. 对象存储,保存简单的元数据,为了管理和隔离,加入了volumn bucket等概念。最根本的存储方面,实际上是以key value形式组织的。其中key之间没有关联,value是block序列组成的对象。
  3. 文件存储的元数据相对对象存储元数据更加复杂,元数据以目录树(inode tree)的形式管理,每个inode tree的文件节点对应一个value是block序列组成的文件。

参考资料