[TOC]
描述:本文主要针对以下方面的进行记录学习
Q:对象存储、文件存储和块存储介绍? 描述:三个概念都是分布式存储中的概念,由于分别对应不同的网络存储协议也就决定了他们的本质差别。
例如Linux中的“/etc/systemd/system.conf”或者Windows中的“C:\Windows\System32\taskmgr.exe”
, 人类用路径作为唯一标识来访问具体的文件。而由作为自然人的程序员所编写的各种软件程序,绝大部分也使用这种方式来访问文件。FAT/FAT32/NTFS
,Linux的EXT2/EXT3/EXT4/XFS/BtrFS
等。网络文件系统(Network File System)
,常见的网络文件系统有Windows网络的CIFS(也叫SMB)
、类Unix系统网络的NFS等。而文件存储除了网络文件系统外 FTP、HTTP其实也算是文件存储的某种特殊实现,都是可以通过某个url来访问一个文件。老式硬盘用柱面-磁头-扇区号(CHS,Cylinder-Head-Sector)组成的编号进行寻址
),新硬盘是4K字节大小(现代硬盘用一个逻辑块编号寻址(LBA,Logical Block Addressing)
)。所以硬盘往往又叫块设备(Block Device),当然除了硬盘还有其它块设备,例如不同规格的软盘,各种规格的光盘,磁带等。例如各种级别的RAID,JBOD,某些操作系统的卷管理系统(Volume Manager)如Windows的动态磁盘、Linux的LVM等
。补充一下的是,块设备的使用对象除了传统的文件系统以及一些专用的管理工具软件如备份软件、分区软件外,还有一些支持直接读写块设备的软件如数据库等,但一般用户很少这样使用。对于应用程序来说既没必要,也很浪费性能
。块存储是排它的,服务器上的某个逻辑块被一台客户端挂载后,其它客户端就无法访问上面的数据了。而且挂载了块存储的客户端上的一个程序要访问里面的数据,不算类似数据库直接访问裸设备这种方式外,通常也需要对其进行分区、安装文件系统后才能使用。除了在网络上传输的数据包效率更高以外,并不比使用文件存储好多少,客户端的文件系统依然需要对路径分解,然后逐级查找才能定位到某一个具体的文件。
# 理论上是可以的,但对块设备的访问方式虽然比文件存储快,其实也很麻烦——一个文件往往是由多个块组成,并且很可能是不连续的。例如要读取一个文件,可能需要发出这样的指令:
读取从编号A₁开始的N₁个块;
读取从编号A₂开始的N₂个块;
读取从编号A₃开始的N₃个块;
…………
读取从编号Ai开始的Ni个块;
# 最后自行把这i个连续的块自行拼接成一个文件,这才完成了一个文件的读取操作。为了发出这些指令,访问文件的软件系统需要记录下这个文件分成多少个部分,每个部分的起始块编号是多少,有多少块,顺序如何。不单是读取操作,删除、写入、修改操作也是如此,非常麻烦复杂。而且往往一个文件可能需要被多个系统访问使用,这就更麻烦了
每个文件一个唯一的标识
,其它系统需要访问某个文件,直接提供文件的标识就可以了。存储系统可以用更高效的数据组织方式来管理这些标识以及其对应的存储介质上的块。当然对于不同的软件系统来说,一次访问需要获取的不一定是单个我们传统意义上的文件,根据不同的需要可能只是一个/组值
,某个文件的一部分,也可能是多个文件的组合,甚至是某个块设备,统称为对象。这就是对象存储。
为了满足不同的访问需求,往往一个分布式存储系统,可以同时提供文件存储、块存储和对象存储这三种形式的服务。
Q:对象存储、文件存储和块存储区别? 描述:三者的本质差别是使用数据的“用户”不同:块存储的用户是可以读写块设备的软件系统,例如传统的文件系统、数据库;文件存储的用户是自然人;对象存储的用户则是其它计算机软件。
典型设备:FTP、NFS服务器
)典型设备:磁盘阵列,硬盘
)Object - 典型设备:内置大容量硬盘的分布式服务器
)SMB(CIFS)
;各个存储类的优缺点:
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、对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高;
参考链接: