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

 本期作为入门系列的文章,为大家介绍三种存储类型:块存储、文件存储、对象存储。

 块存储

 块存储主要是将裸磁盘空间整个映射给主机使用的。块存储就是在物理层这个层面对外提供服务,使用它的系统,又用自己的文件系统格式化。这样一旦被一个系统使用,就独占了。

 例如:磁盘阵列里面有5块硬盘,然后可以通过划逻辑盘、做Raid、或者LVM等方式逻辑划分出N个逻辑的硬盘。但是逻辑盘和物理盘是两个完全不同的概念。假设每个硬盘100G,共有5个硬盘,划分为逻辑盘也为5个,每个100G,但是这5个逻辑盘和原来的5个物理盘意义完全不同了。例如第一个逻辑盘第一个20G可能来自物理盘1,第二个20G来自物理盘2,所以逻辑盘是多个物理盘逻辑虚构出来的硬盘。

 接着块存储会采用映射的方式将这几个逻辑盘映射给主机,主机上面的操作系统会识别到有5块硬盘,但是操作系统是无法区分到底是物理盘还是逻辑盘,它一概就认为只是5块裸的物理硬盘而已,跟直接拿一块物理硬盘挂载到操作系统没区别,至少操作系统感知上没有区别的。

 在此方式下,操作系统还需要对挂载的裸硬盘进行分区、格式化后,才能使用,与平常主机内置的硬盘无差异。

 典型设备

 磁盘阵列、硬盘

 优点

 (1)因为通过了Raid与LVM等手段,对数据提供了保护;

 (2)可以将多块硬盘组合起来,称为一个大容量的逻辑盘对外提供服务,提高容量;

 (3)写入数据时,由于是多块磁盘组合,可以并行写入的,提升读写效率;

 (4)采用SAN架构组网,传输速度以及封装协议的原因,使得传输速度和读写效率得到提升;

 缺点

 (1)需额外为主机购买光纤通道卡、光纤交换机,造价成本高;

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

 (3)不利于不同操作系统主机间的数据共享:因为操作系统使用不同的文件系统,格式化后,不同的文件系统间的数据是共享不了的;

 使用场景

 docker容器、虚拟机磁盘存储分配;日志存储;文件存储…

 为了克服文件无法共享的问题,所以有了文件存储。

 文件存储

 在文件系统一层对外提供服务,系统只用访问文件系统一级就可以,各个系统都可以根据接口去访问。

 文件存储也有软硬一体化的设备,但是其实一台普通的PC机,只要装上合适的操作系统和软件,就可以假设FTP与NFS服务了,加上该类服务之后的服务器,就是文件存储的一种了。

 主机A可以直接对文件存储进行文件的上传和下载,与块存储不同,主机A是不需要再对文件存储进行格式化的,因为文件管理功能已经由文件存储自己搞定了。

 典型设备

 FTP、NFS服务器

 优点

 (1)造价低:一台机器和普通的以太网就可以;

 (2)方便文件共享;

 缺点

 读写速率低,传输速率慢;

 使用场景

 日志存储;有目录结构的文件存储…

 对象存储

 对象存储数据组织示意图

 之所以出现对象存储,是为了克服块存储与文件存储各自的缺点,发扬各自的优点。简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写块,利于共享的存储出来呢?于是就有了对象存储。

 首先,一个文件包含了属性(metadata)以及内容。

 像FAT32这种文件系统,是直接将一份文件与metadata一起存储的,存储过程先将文件按照文件系统的最小块大小来打散(例如4M的文件,假设文件系统要求一个块4K,那么就将文件打散称为1000个小块),再写进硬盘里,过程中没有区分数据和metadata的。而每个块最后会告知你下一个要读取的块地址,然后一直这样顺序的按图索骥,最后完成整份文件的所有块的读取。

 这种情况下读写速率很慢,因为就算有100个机械臂在读写,但是由于只有读取到第一个块,才能知道下一个块在哪里,其实相当于只能有1个机械臂在实际工作。

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

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

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

 典型设备

 内置大容量硬盘的分布式服务器

 通过什么对象方式访问对象?

 在存储设备中,所有对象都有一个对象标识,通过对象标识OSD命令访问对象

 优点

 具备块存储的读写高速。

 具备文件存储的共享等特性。

 使用场景

 图片存储;视频存储…

为什么对象存储兼具块存储和文件存储的好处,还要使用块存储和文件存储呢?

 有一类应用是需要存储直接裸盘映射的,例如数据库。因为数据需要存储裸盘映射给自己后,再根据自己的数据库文件系统来对裸盘进行格式化的,所以是不能够采用其他已经被格式化为某种文件系统的存储的。此类应用更合适使用块存储。

 对象存储的成本比起普通的文件存储较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高。