文件-块-对象存储的区别
文件-块-对象存储的区别
DiffDay开门见山
对比项 | 文件存储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个机械臂在读写,但只有读到第一个块,才知道下一个块在哪里,相当于只有一个机械臂在实际工作。
对象存储将原数据独立出去,控制节点叫元数据服务器(服务器+对象存储管理软件),还有专门负责存储数据的分布式服务器。当访问文件对象,元数据服务器反馈对象存储在哪些数据节点,当有多台数据节点同时对外传输数据时,读取速度就加块了。当数据节点服务器数量越多,读写速度提升就越大,继而达到读写加快的目的。
说的这么牛,咋不上天一统江湖
- 一类应用需存储直接磁盘映射,如数据库,为性能计,为历史资产继承计。
- 对象存储在非海量场景,成本还是较文件存储高,如需买专门的对象存储软件和大容量硬盘。