[TOC]
0x01 基础信息
描述:本文主要针对以下方面的进行记录学习
- (1) 对象存储、文件存储和块存储介绍与区别?
- (2)
0x02 多种存储类型差异
Q:对象存储、文件存储和块存储介绍? 描述:三个概念都是分布式存储中的概念,由于分别对应不同的网络存储协议也就决定了他们的本质差别。
- 1.文件存储: 文件存储的用户是自然人最容易理解,计算机中所有的数据都是0和1,存储在硬件介质上的一连串的01组合对我们来说完全无法去分辨以及管理。因此我们用“文件”这个概念对这些数据进行组织,所有用于同一用途的数据,按照不同应用程序要求的结构方式组成不同类型的文件(通常用不同的后缀来指代不同的类型),然后我们给每一个文件起一个方便理解记忆的名字。而当文件很多的时候,我们按照某种划分方式给这些文件分组,每一组文件放在同一个目录(或者叫文件夹)里面,当然我们也需要给这些目录起一个容易理解和记忆的名字。而且目录下面除了文件还可以有下一级目录(称之为子目录或者子文件夹),所有的文件、目录形成一个树状结构。
- 1.1 在Windows或者Linux中都可以采用tree命令列出以某个文件夹为根节点列出一棵树:为了方便查找,从根节点开始逐级目录往下,一直到文件本身,把这些目录、子目录、文件的名字用特殊的字符(例如Windows/DOS用“”,类Unix系统用“/”)拼接起来,这样的一串字符称之为路径,
例如Linux中的“/etc/systemd/system.conf”或者Windows中的“C:WindowsSystem32taskmgr.exe”
, 人类用路径作为唯一标识来访问具体的文件。而由作为自然人的程序员所编写的各种软件程序,绝大部分也使用这种方式来访问文件。 - 1.2 把存储介质上的数据组织成目录-子目录-文件这种形式的数据结构,用于从这个结构中寻找、添加、修改、删除文件的程序,以及用于维护这个结构的程序,组成的系统有一个专用的名字:文件系统(File System)。文件系统有很多,常见的有Windows的
FAT/FAT32/NTFS
,Linux的EXT2/EXT3/EXT4/XFS/BtrFS
等。 - 1.3 而在网络存储中,底层数据并非存储在本地的存储介质,而是另外一台服务器上,不同的客户端都可以用类似文件系统的方式访问这台服务器上的文件,这样的系统叫
网络文件系统(Network File System)
,常见的网络文件系统有Windows网络的CIFS(也叫SMB)
、类Unix系统网络的NFS等。而文件存储除了网络文件系统外 FTP、HTTP其实也算是文件存储的某种特殊实现,都是可以通过某个url来访问一个文件。
- 1.1 在Windows或者Linux中都可以采用tree命令列出以某个文件夹为根节点列出一棵树:为了方便查找,从根节点开始逐级目录往下,一直到文件本身,把这些目录、子目录、文件的名字用特殊的字符(例如Windows/DOS用“”,类Unix系统用“/”)拼接起来,这样的一串字符称之为路径,
- 2.块存储: 传统的文件系统,是直接访问存储数据的硬件介质的。介质不关心也无法去关心这些数据的组织方式以及结构,因此用的是最简单粗暴的组织方式:所有数据按照固定的大小分块,每一块赋予一个用于寻址的编号。
- 2.1 以机械硬盘为例,一块就是一个扇区,老式硬盘是512字节大小(
老式硬盘用柱面-磁头-扇区号(CHS,Cylinder-Head-Sector)组成的编号进行寻址
),新硬盘是4K字节大小(现代硬盘用一个逻辑块编号寻址(LBA,Logical Block Addressing)
)。所以硬盘往往又叫块设备(Block Device),当然除了硬盘还有其它块设备,例如不同规格的软盘,各种规格的光盘,磁带等。 - 2.2 为了方便管理,硬盘这样的块设备通常可以划分为多个逻辑块设备,也就是我们熟悉的硬盘分区(Partition)。反过来,单个介质的容量、性能有限,可以通过某些技术手段把多个物理块设备组合成一个逻辑块设备,
例如各种级别的RAID,JBOD,某些操作系统的卷管理系统(Volume Manager)如Windows的动态磁盘、Linux的LVM等
。补充一下的是,块设备的使用对象除了传统的文件系统以及一些专用的管理工具软件如备份软件、分区软件外,还有一些支持直接读写块设备的软件如数据库等,但一般用户很少这样使用。 - 2.3 在网络存储中,服务器把本地的一个逻辑块设备——底层可能是一个物理块设备的一部分,也可能是多个物理块设备的组合,又或者多个物理块设备的组合中的一部分,甚至是一个本地文件系统上的一个文件——通过某种协议模拟成一个块设备,远程的客户端(可以是一台物理主机,也可以是虚拟机,某个回答所说的块设备是给虚拟机用是错误的)使用相同的协议把这个逻辑块设备作为一个本地存储介质来使用,划分分区,格式化自己的文件系统等等。这就是块存储,比较常见的块存储协议是iSCSI,FC。
- 2.1 以机械硬盘为例,一块就是一个扇区,老式硬盘是512字节大小(
- 3.对象存储: 对象存储其实介于块存储和文件存储之间。文件存储的树状结构以及路径访问方式虽然方便人类理解、记忆和访问,但计算机需要把路径进行分解,然后逐级向下查找,最后才能查找到需要的文件,
对于应用程序来说既没必要,也很浪费性能
。块存储是排它的,服务器上的某个逻辑块被一台客户端挂载后,其它客户端就无法访问上面的数据了。而且挂载了块存储的客户端上的一个程序要访问里面的数据,不算类似数据库直接访问裸设备这种方式外,通常也需要对其进行分区、安装文件系统后才能使用。除了在网络上传输的数据包效率更高以外,并不比使用文件存储好多少,客户端的文件系统依然需要对路径分解,然后逐级查找才能定位到某一个具体的文件。- 3.1 是否可以用不排它但又类似块设备访问的方式呢?
# 理论上是可以的,但对块设备的访问方式虽然比文件存储快,其实也很麻烦——一个文件往往是由多个块组成,并且很可能是不连续的。例如要读取一个文件,可能需要发出这样的指令:
读取从编号A₁开始的N₁个块;
读取从编号A₂开始的N₂个块;
读取从编号A₃开始的N₃个块;
…………
读取从编号Ai开始的Ni个块;
# 最后自行把这i个连续的块自行拼接成一个文件,这才完成了一个文件的读取操作。为了发出这些指令,访问文件的软件系统需要记录下这个文件分成多少个部分,每个部分的起始块编号是多少,有多少块,顺序如何。不单是读取操作,删除、写入、修改操作也是如此,非常麻烦复杂。而且往往一个文件可能需要被多个系统访问使用,这就更麻烦了
- 3.2 为了解决这中麻烦,使用一个统一的底层存储系统,管理这些文件和底层介质的组织结构,然后给
每个文件一个唯一的标识
,其它系统需要访问某个文件,直接提供文件的标识就可以了。存储系统可以用更高效的数据组织方式来管理这些标识以及其对应的存储介质上的块。当然对于不同的软件系统来说,一次访问需要获取的不一定是单个我们传统意义上的文件,根据不同的需要可能只是一个/组值
,某个文件的一部分,也可能是多个文件的组合,甚至是某个块设备,统称为对象。这就是对象存储。 - 4.分布式存储: 所谓分布式存储,就是这个底层的存储系统,因为要存放的数据非常多,单一服务器所能连接的物理介质是有限的,提供的IO性能也是有限的,所以通过多台服务器协同工作,每台服务器连接若干物理介质,一起为多个系统提供存储服务;
为了满足不同的访问需求,往往一个分布式存储系统,可以同时提供文件存储、块存储和对象存储这三种形式的服务。
Q:对象存储、文件存储和块存储区别? 描述:三者的本质差别是使用数据的“用户”不同:块存储的用户是可以读写块设备的软件系统,例如传统的文件系统、数据库;文件存储的用户是自然人;对象存储的用户则是其它计算机软件。
- 0.操作对象不同
- 文件存储: 主要操作对象是文件和文件夹 (
典型设备:FTP、NFS服务器
) - 块存储: 主要操作对象是磁盘 (
典型设备:磁盘阵列,硬盘
) - 对象存储: 主要操作对象是对象(
Object - 典型设备:内置大容量硬盘的分布式服务器
)
- 文件存储: 主要操作对象是文件和文件夹 (
- 1.速度不同
- 块存储:低延迟(10ms),热点突出;
- 文件存储:不同技术各有不同;
- 对象存储:100ms-1s,冷数据;
- 2.可分步性不同
- 块存储:异地不现实;
- 文件存储:可分布式,但有瓶颈;
- 对象存储:分步并发能力高;
- 3.文件大小不同
- 块存储:大小都可以,热点突出;
- 文件存储:适合大文件;
- 对象存储:适合各种大小;
- 4.接口不同
- 块存储:Driver,kernel module ;
- 文件存储:POSIX ,SAMBA;
- 对象存储:Restful API ;
- 5.典型技术不同
- 块存储:SAN, FC SAN, iSCSI;
- 文件存储:NFS, HDFS,GFS,
SMB(CIFS)
; - 对象存储:Swift,Amazon S3;
- 6.适合场景不同
- 块存储:银行;
- 文件存储:数据中心;
- 对象存储:网络媒体文件存储;
各个存储类的优缺点:
1) 文件存储:
优点:
- (1)、造价低:随便一台机器就可以,另外普通的以太网就可以,根本不需要专用的SAN网络,所以造价低。
- (2)、方便文件共享。
缺点:
- (1)、读写速率低,传输速率慢:以太网,上传下载速度较慢,另外所有读写都要1台服务器里面的硬盘来承受,相比起磁盘阵列动不动就十几上百块硬盘同时读写,速率慢了许多。
2) 块存储:
优点: 1、这种方式的好处当然是因为通过了Raid与LVM等手段,对数据提供了保护。 2、另外也可以将多块廉价的硬盘组合起来,成为一个大容量的逻辑盘对外提供服务,提高了容量。 3、写入数据的时候,由于是多块磁盘组合出来的逻辑盘,所以几块磁盘可以并行写入的,提升了读写效率。 4、很多时候块存储采用SAN架构组网,传输速率以及封装协议的原因,使得传输速度与读写速率得到提升。 缺点: 1、采用SAN架构组网时,需要额外为主机购买光纤通道卡,还要买光纤交换机,造价成本高。 2、主机之间的数据无法共享,在服务器不做集群的情况下,块存储裸盘映射给主机,再格式化使用后,对于主机来说相当于本地盘,那么主机A的本地盘根本不能给主机B去使用,无法共享数据。 3、不利于不同操作系统主机间的数据共享:另外一个原因是因为操作系统使用不同的文件系统,格式化完之后,不同文件系统间的数据是共享不了的。例如一台装了WIN7/XP,文件系统是FAT32/NTFS,而Linux是EXT4,EXT4是无法识别NTFS的文件系统的。就像一只NTFS格式的U盘,插进Linux的笔记本,根本无法识别出来。所以不利于文件共享。
3) 对象存储:
优点: 1、为了克服块存储与文件存储各自的缺点,发扬它俩各自的优点(
读写快,利于共享
);简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享 2、对象存储软件是有专门的文件系统的,所以OSD对外又相当于文件服务器,那么就不存在文件共享方面的困难了,也解决了文件共享方面的问题。 缺点: 1、需要独立的软件进行支持; 2、并不完全适用于各种应用场景;
Q: 为什么对象存储兼具块存储与文件存储的好处,还要使用块存储或文件存储呢?
1、有一类应用是需要存储直接裸盘映射的,例如数据库。因为数据库需要存储裸盘映射给自己后,再根据自己的数据库文件系统来对裸盘进行格式化的,所以是不能够采用其他已经被格式化为某种文件系统的存储的。此类应用更适合使用块存储。 2、对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高;
参考链接:
- https://www.zhihu.com/question/21536660/answer/1159036357
- https://www.zhihu.com/question/21536660/answer/33279921