什么是块存储、文件存储、对象存储?

1年前 (2024-07-28)网络技术

聊到企业存储,相信很多人被三个存储名词困扰了很久:块存储、文件存储、对象存储,它们到底有什么区别?

块存储、文件存储、对象存储,傻傻分不清楚


今天我们就跟大家汇报下学习成果:块存储、文件存储、对象存储三者到底有何区别?

我们都知道,存储设备就是为数据提供空间,U盘、硬盘和固态硬盘都是存储最终的存储设备。而块存储、文件存储和对象存储也可以简单地理解是不同类型的存储设备,它们是根据使用介质存储数据的手段或方法不同来划分的。


首先我们来看下块存储:

块存储提供的是不带文件系统裸磁盘,使用之前需先进行初始化。

我们比较常见的块存储形式是我们的Windows硬盘或手机存储空间,数据是按字节块来存储和访问的。

image.png

块存储使用时,文件系统在客户端,例如Windows系统,我们可以在Windows桌面查看我们存储的内容,但是对于硬盘里的内容和格式,我们是一无所知的,只有借助客户端的文件系统才能查看。

通俗的来说,在块存储中,数据就像每个瓜子一样,堆放在存储仓里。瓜子就是每个数据块,这个存储舱就是磁盘。块存储只关心瓜子的进来和出去,不关心瓜子粒之间的关系和用途。

image.png


由于块存储只负责数据读取和写入,因此具有有高带宽、低延迟的优势。

但是块存储一般扩展能力有限,适用于对响应时间要求高的系统。比如数据库、ERP等企业核心应用的存储等。DAS、SAN这两种存储设备属于块存储类型。

下面我们来看下什么是文件存储:

文件存储的存储端带有文件系统,我们常见的NAS存储都是文件存储设备。

这些文件存储设备除了磁盘外还带有文件系统,用户直接通过存储端的文件系统就能调用存储资源。

文件存储一般体现形式是目录和文件(比如CUser\ProgramFiles\CommonFiles),数据以文件的方式存储和访问按照目录结构进行组织。文件存储有自己的文件系统,对于每个客户端而言是一个统一的文件系统,可以同时供多个客户端使用,易于共享。

image.png

好比上面图中,数据像瓜子一样在一起组成了向日葵,再对应到不同的向日葵杆,要找到某个向日葵籽,先找到这个对应的向日葵杆,再找到这个向日葵,然后根据在这个向日葵上对应的位置找到这个瓜子。

相比于块存储,文件存储由于有自己的文件系统,可以实现更高级的管理,可以很方便的共享,因此用途非常广泛。比如常用的NFS、CIFS、ftp等都是基于文件存储的。但相比于块存储,文件存储读写速度相对于块存储要慢一点。

最后我们来看下对象存储:

块存储性能出色但是不能共享,文件存储可以共享但是速度又总是不让人满意。

作为不会做选择题的成年人,既想性能,还要实现共享,同时还要满足大规模扩展需求,所有后来就出现了对象存储。

对象存储一般体现形式是一个UUD(比如我们常见的网址https: //new.qq.com/omn/20201119/20201119A0CE101210.html)这个UUID是唯一性的,即使在全球也只有通过这一个UUID。

数据和元数据打包在一起作为一个整体对象存在一个超大池子里。用户想访问,只需能通过它的UUID,才能找到它

image.png

好比上面图中,数据的葵花籽被做成了包装袋,每个包装袋都有一个唯一出厂条形码,但是找对应的对应的瓜子袋,只能通过唯一条形码找到对应的瓜子袋,但每一次都只能是一袋为单位,

对象存储端的文件系统就是采用这种哈希表-键值(可以理解为查字典,最多两层目录)这种方式来提高读写速度的。

对象存储就可以非常简单的扩展到超大规模,因此非常适合数据量大、增速又很快的视频、图像等,例如百度网盘、大数据存储;

--------------------------------------------------------

01 块存储

块存储有很多名字(如SAN、ServerSAN、DAS),对客户端暴露出来的是“盘”或者“逻辑盘”,数据访问的语义比较简单,主要是对“盘”按照地址偏移访问数据,不能够被多个客户端同时共享访问,常用的访问协议包括FC、iSCSI、NBD、RBD等,优势应用场景是存储结构化数据(数据库)以及作为虚拟机或者容器的后端持久化存储。

03 对象存储

对象存储系统提供了一个平坦的名字空间,对客户端暴露出来的是“桶”。对象存储系统语义比较简单,数据可以被多客户端共享,但是不能被修改,也无法随机访问对象数据的内容,标准的访问协议有S3和Swift。对象存储的优势应用场景是那些不经常修改,但是被多次访问的数据应用场景,例如互联网APP、归档备份、以及音视频分享。

文件存储和对象存储的差别在于语义,对象存储不可能完全取代文件存储。从上面的描述中就可以看出来:

文件存储

文件存储可以随机访问,可以随时修改,可以利用目录和硬链接构建数据之间的“图”包含关系。

对象存储

对象存储却不善于修改,不能随机访问,平坦的名字空间要借助于其他的数据管理方式才能构建简单的数据集合和数据关系。

对象存储,还是文件存储该怎么选?

用对象存储还是文件存储系统取决于数据应用对语义的需求。如果对象存储的语义就可以满足应用的需要,就不需要文件存储,但是反之,对象存储语义满足不了应用需要,就只能用文件存储系统。

文件存储系统无论是标准的NAS还是并行文件系统,都在客户端提供了缓存系统和保证一定程度的一致性,而对象存储系统基本上没有提供任何标准的客户端缓存系统,因此在对性能有严苛要求的数据共享和交换应用场景,对象存储不使用也取代不了文件存储。

在讲到按照语义划分的3种存储类型:文件存储对象存储块存储的时候,经常有人会跟另一组概念混淆在一起,文件系统,对象系统和块设备。那么他们之间的关系是什么呢?

文件系统 vs. 文件存储

文件系统不一定是文件存储, 因为文件系统不一定对外提供多客户端文件共享服务。广义的文件系统是只要能够解决名字空间或者地址空间的存储子系统都叫文件系统。比如EMC VNX/Unity底层的文件系统CBFS(UFS64),VMWare的VMFS或者CEPH的RBD,都称之为文件系统,但是并没有对外提供文件共享服务,因此是广义的文件系统但不是文件存储系统。

对象系统 vs. 对象存储

对象系统是很多文件系统和块存储系统的底层抽象,但是并不一定对外提供对象数据共享,因此不一定是对象存储系统。比如Lustre的OST,CEPH的Rados, Cortx的Motr都是对象系统,但是并不能直接对外提供S3或者Swift协议的对象数据访问,因此不是对象存储系统。
相反,在对象系统之上可以构建出文件存储,比如在Lustre 文件系统就是基于底层对象OSD,CephFS是基于Rados对象系统的文件存储;除此之外,也可以利用对象系统构建块存储,例如Ceph的RBD就是基于Rados的块存储。

块设备 vs. 块存储

基础的块设备HDD/SSD是所有存储系统的基础, 但是块存储系统底层也可以是用对象系统或者文件系统来模拟的虚拟/逻辑块设备,正如之上讲过的Ceph RBD的底层是Rados对象系统,ZFS和ZVOL底层的DMU是个对象系统,EMC VNX的LUN块设备是文件系统CBFS(UFS64)上的一个文件。

https://m.163.com/dy/article/IHR8AD0605319LH8.html


https://zhuanlan.zhihu.com/p/431239740?utm_id=0


https://m.baidu.com/video/page?pd=video_page&nid=15827637517788851552&sign=4370106707807592309&word=%E5%9D%97%E5%AD%98%E5%82%A8+%E6%96%87%E4%BB%B6%E5%AD%98%E5%82%A8+%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8&oword=%E5%9D%97%E5%AD%98%E5%82%A8+%E6%96%87%E4%BB%B6%E5%AD%98%E5%82%A8+%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8&atn=index&frsrcid=48304&ext=%7B%22jsy%22%3A1%7D&top=%7B%22sfhs%22%3A1%2C%22_hold%22%3A2%7D&fr0=A&fr1=A&ms=1&lid=7752673393181070816&referlid=7752673393181070816&frorder=4&_t=1722139516977