文件-块-对象存储的区别

各种存储模式

开门见山

对比项 文件存储NAS 对象存储 块存储
共享访问 多台ECS(千级别上限)同时挂载,并发访问同一个文件系统 客户端(百万级别上限)向同一个存储空间并发上传下载文件 单台ECS通过POSIX接口访问
操作对象 文件和文件夹 依软件系统而定,常见亦是文件 磁盘
协议接口 POSIX/NFS/SMB/MPI 注重接口灵活及访问权控制
(Lookup/Access/Read/Write/Create/Remove/Rename
/MkDir/RmDir/ReadDir等等)
RESTful/SDK/客户端
PUT/GET/DELETE,更注重简洁
格式化后支持POSIX协议
Read/Write/Read Capacity/Inquiry,更注重传输控制
读写模式 随机读写 顺序读写 随机读写
存储结构 目录树 扁平结构 格式化后支持目录树
最大容量 10PB 无限 32TB
时延 低时延(毫秒级) 较低时延(几十毫秒级) 极低时延(微秒级)
吞吐 数百Gbps 数百Gbps 数十Gbps
用户 自然人 计算机软件 可读写块设备的软件系统,如文件系统,数据库

存储模式分类

NAS

将存储作为网络文件系统公开,当设备附加到NAS系统时,将显示一个挂载文件系统,用户可使用适当的访问权限访问其文件。对NAS的访问通过NFS和SMB/CIFS协议进行处理。与任何服务器和存储解决方案一样,文件系统负责在NAS中定位文件,这对于数十万甚至数百万文件非常有效,但对于数十亿的文件就不行了。

块存储

这些玩意-磁带,光盘,软盘 都是块存储

哪些块组成一个文件,哪些块记录的是目录/子目录信息,这是文件系统的事情

弹性块存储采用三副本分布机制可靠性高;本地存储即本地盘,是指云服务器ECS所在宿主机上的本地硬盘。无论是弹性块存储还是本地块存储,一般用于服务器系统盘或数据盘使用。

块存储EBS是裸磁盘,挂载到ECS后不能被操作系统应用直接访问,需要格式化成文件系统(ext3、ext4、NTFS等)后才能被访问。块存储EBS的优势是性能高、时延低,适合于OLTP数据库、NoSQL数据库等IO密集型的高性能、低时延应用工作负载。但是块存储EBS无法容量弹性扩展,单盘最大只能32TB,并且对共享访问的支持有限,需要配合类Oracle RAC、WSFC Windows故障转移集群等集群管理软件才能进行共享访问。因此,块存储EBS主要还是针对单ECS的高性能,低时延的存储产品

NAS和块存储都需要实现用户访问权限的功能,以便对数据进行修改。

对象存储

之所以出现对象存储这种东西,是对块存储与文件存储的扬长避短。简单来说,块存储读写快,不利于共享;文件存储读写慢,利于共享。能否搞一个读写块,利于共享的出来呢,这就是对象存储了。另外文件存储的树状结构以及路径访问方式虽然方便人类理解、记忆和访问,但计算机需要把路径进行分解,然后逐级向下查找,最后才能查找到需要的文件,对于应用程序来说既没必要,也很浪费性能。

对象存储最常见解决方案,就是多台服务器内置大容量硬盘,再装上对象存储软件,然后再额外搞几台服务作为管理节点,安装上对象存储管理软件,管理节点可管理其它服务器对外提供读写访问功能。

以往像FAT32这种文件系统,文件数据和文件Metadata一起存储。存储过程先将文件按照文件系统的最小块大小来打散(如4M的文件,建设一个块4K,那么将文件打散成1000个小块),再写进硬盘里,每个块最后会告知你下一个读取的块的地址,一直这样按图索骥,最后完成整份文件所有块的读取。这种清咖滚下,读写速率很慢,因为就算你有100个机械臂在读写,但只有读到第一个块,才知道下一个块在哪里,相当于只有一个机械臂在实际工作。

对象存储将原数据独立出去,控制节点叫元数据服务器(服务器+对象存储管理软件),还有专门负责存储数据的分布式服务器。当访问文件对象,元数据服务器反馈对象存储在哪些数据节点,当有多台数据节点同时对外传输数据时,读取速度就加块了。当数据节点服务器数量越多,读写速度提升就越大,继而达到读写加快的目的。

说的这么牛,咋不上天一统江湖

  1. 一类应用需存储直接磁盘映射,如数据库,为性能计,为历史资产继承计。
  2. 对象存储在非海量场景,成本还是较文件存储高,如需买专门的对象存储软件和大容量硬盘。