理解块存储、文件存储和对象存储的应用场景和选择#

应用场景(王豪迈(麦子迈|wheats))#

  分布式存储的应用场景相对于其存储接口,现在流行分为三种:

  • 对象存储: 也就是通常意义的键值存储,其接口就是简单的 GET、PUT、DEL 和其他扩展,如七牛、又拍、Swift、S3

  • 块存储: 这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,青云的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD 是 Ceph 面向块存储的接口)

  • 文件存储: 通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS(CephFS 是 Ceph 面向文件存储的接口),但是有时候又会把 GFS,HDFS 这种非 POSIX 接口的类文件存储接口归入此类。

  按照这三种接口和其应用场景,很容易了解这三种类型的 IO 特点,括号里代表了它在非分布式情况下的对应:

  • 对象存储(键值数据库):接口简单,一个对象我们可以看成一个文件,只能全写全读,通常以大文件为主,要求足够的 IO 带宽。

  • 块存储(硬盘):它的 IO 特点与传统的硬盘是一致的,一个硬盘应该是能面向通用需求的,即能应付大文件读写,也能处理好小文件读写。但是硬盘的特点是容量大,热点明显。因此块存储主要可以应付热点问题。另外,块存储要求的延迟是最低的。

  • 文件存储(文件系统):支持文件存储的接口的系统设计跟传统本地文件系统如 Ext4 这种的特点和难点是一致的,它比块存储具有更丰富的接口,需要考虑目录、文件属性等支持,实现一个支持并行化的文件存储应该是最困难的。但像 HDFS、GFS 这种自己定义标准的系统,可以通过根据实现来定义接口,会容易一点。

  因此,这三种接口分别以非分布式情况下的键值数据库、硬盘和文件系统的 IO 特点来对应即可。至于冷热、快慢、大小文件而言更接近于业务。但是因为存储系统是通用化实现,通常来说,需要尽量满足各种需求,而接口定义已经一定意义上就砍去了一些需求,如对象存储会以冷存储、大文件为主。

如何选择(王旭)#

  首先对象存储和文件存储的区别是不大的,存储的都是一样的东西,只是抛弃了统一的命名空间和目录树的结构,使得扩展起来桎梏少一些。

  独立的互联网存储服务一般都是做对象存储的,因为块存储是给计算机用的,对象存储是给浏览器等 HTTP 客户端用的。独立服务所提供的存储系统,访问都来自互联网,自然是做对象存储;与之相对应,大部分类 AWS 的主机服务商都会提供一个块存储服务搭配主机服务。

  同一个服务商同时提供两个服务是有好处的,除了提供的服务比较全这个优点以外,对象存储还可以支撑块存储的快照、主机的系统镜像存储等应用,可以相互结合的。

  权衡的因素有很多——可靠性要求、可用性要求、时延要求、一致性要求、使用模式相关要求(包括请求大小、QPS/IOPS、吞吐)等。

  比如:

  • 对于块存储,要求的访问时延是 10ms 级的,因为给虚拟机用的,传统硬盘也是 10ms 级的时延,请求尺寸都很小,但 qps(iops)可能会很高,那么在这种情况下:

    • 异地多中心是不现实的,存储要和主机尽量接近,相应地可靠性必然会有所打折
    • 强一致副本不会过多,强一致要求对时延有影响
  • 对于对象存储,要求的访问时延是 100ms - 1s 级的,请求一般是中到大尺寸,低 qps 的,在这种情况下
    • 可以用更多的分散副本数来换取更高的可靠性,但过多副本增加维持一致性的难度,需要折衷

  另外 SSD 随着成本降低,在块存储里逐渐成为主流了,以便提供更好的 IOPS,AWS 这个月开始,创建的 EBS 卷缺省就是 SSD 的了。

  对于评价一个实现,首先是看适合不适合这个用途,然后看这个方案有没有显著的缺点,是否有严重的影响,然后成本之类的也是一个因素,做软件的人总觉的用便宜硬件实现高大上的服务才值得吹牛,呵呵。

  下文链接:https://www.zhihu.com/question/21536660/answer/33279921

块存储#

  典型设备:磁盘阵列,硬盘

  块存储主要是将裸磁盘空间整个映射给主机使用的,就是说例如磁盘阵列里面有5块硬盘(为方便说明,假设每个硬盘1G),然后可以通过划逻辑盘、做Raid、或者LVM(逻辑卷)等种种方式逻辑划分出N个逻辑的硬盘。(假设划分完的逻辑盘也是5个,每个也是1G,但是这5个1G的逻辑盘已经于原来的5个物理硬盘意义完全不同了。例如第一个逻辑硬盘A里面,可能第一个200M是来自物理硬盘1,第二个200M是来自物理硬盘2,所以逻辑硬盘A是由多个物理硬盘逻辑虚构出来的硬盘。)

  接着块存储会采用映射的方式将这几个逻辑盘映射给主机,主机上面的操作系统会识别到有5块硬盘,但是操作系统是区分不出到底是逻辑还是物理的,它一概就认为只是5块裸的物理硬盘而已,跟直接拿一块物理硬盘挂载到操作系统没有区别的,至少操作系统感知上没有区别。

  此种方式下,操作系统还需要对挂载的裸硬盘进行分区、格式化后,才能使用,与平常主机内置硬盘的方式完全无异。

  优点:

  • 这种方式的好处当然是因为通过了Raid与LVM等手段,对数据提供了保护。
  • 另外也可以将多块廉价的硬盘组合起来,成为一个大容量的逻辑盘对外提供服务,提高了容量。
  • 写入数据的时候,由于是多块磁盘组合出来的逻辑盘,所以几块磁盘可以并行写入的,提升了读写效率。
  • 很多时候块存储采用SAN架构组网,传输速率以及封装协议的原因,使得传输速度与读写速率得到提升。

  缺点:

  • 采用SAN架构组网时,需要额外为主机购买光纤通道卡,还要买光纤交换机,造价成本高。
  • 主机之间的数据无法共享,在服务器不做集群的情况下,块存储裸盘映射给主机,再格式化使用后,对于主机来说相当于本地盘,那么主机A的本地盘根本不能给主机B去使用,无法共享数据。
  • 不利于不同操作系统主机间的数据共享:另外一个原因是因为操作系统使用不同的文件系统,格式化完之后,不同文件系统间的数据是共享不了的。例如一台装了WIN7/XP,文件系统是FAT32/NTFS,而Linux是EXT4,EXT4是无法识别NTFS的文件系统的。就像一只NTFS格式的U盘,插进Linux的笔记本,根本无法识别出来。所以不利于文件共享。

文件存储#

  典型设备:FTPNFS服务器

  为了克服上述文件无法共享的问题,所以有了文件存储。

  文件存储也有软硬一体化的设备,但是其实普通拿一台服务器/笔记本,只要装上合适的操作系统与软件,就可以架设FTP与NFS服务了,架上该类服务之后的服务器,就是文件存储的一种了。

  主机A可以直接对文件存储进行文件的上传下载,与块存储不同,主机A是不需要再对文件存储进行格式化的,因为文件管理功能已经由文件存储自己搞定了。

  优点:

  • 造价交低:随便一台机器就可以了,另外普通以太网就可以,根本不需要专用的SAN网络,所以造价低。
  • 方便文件共享:例如主机A(WIN7,NTFS文件系统),主机B(Linux,EXT4文件系统),想互拷一部电影,本来不行。加了个主机C(NFS服务器),然后可以先A拷到C,再C拷到B就OK了。(例子比较肤浅,请见谅……)

  缺点:

  • 读写速率低,传输速率慢:以太网,上传下载速度较慢,另外所有读写都要1台服务器里面的硬盘来承担,相比起磁盘阵列动不动就几十上百块硬盘同时读写,速率慢了许多。

对象存储#

  典型设备:内置大容量硬盘的分布式服务器

  • 对象存储最常用的方案,就是多台服务器内置大容量硬盘,再装上对象存储软件,然后再额外搞几台服务作为管理节点,安装上对象存储管理软件。管理节点可以管理其他服务器对外提供读写访问功能。
  • 之所以出现了对象存储这种东西,是为了克服块存储与文件存储各自的缺点,发扬它俩各自的优点。简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写快,利 于共享的出来呢。于是就有了对象存储。

  首先,一个文件包含了了属性(术语叫metadata,元数据,例如该文件的大小、修改时间、存储路径等)以及内容(以下简称数据)。

  以往像FAT32这种文件系统,是直接将一份文件的数据与metadata一起存储的,存储过程先将文件按照文件系统的最小块大小来打散(如4M的文件,假设文件系统要求一个块4K,那么就将文件打散成为1000个小块),再写进硬盘里面,过程中没有区分数据/metadata的。而每个块最后会告知你下一个要读取的块的地址,然后一直这样顺序地按图索骥,最后完成整份文件的所有块的读取。

  这种情况下读写速率很慢,因为就算你有100个机械手臂在读写,但是由于你只有读取到第一个块,才能知道下一个块在哪里,其实相当于只能有1个机械手臂在实际工作。

而对象存储则将元数据独立了出来,控制节点叫元数据服务器(服务器+对象存储管理软件),里面主要负责存储对象的属性(主要是对象的数据被打散存放到了那几台分布式服务器中的信息),而其他负责存储数据的分布式服务器叫做OSD,主要负责存储文件的数据部分。当用户访问对象,会先访问元数据服务器,元数据服务器只负责反馈对象存储在哪些OSD,假设反馈文件A存储在B、C、D三台OSD,那么用户就会再次直接访问3台OSD服务器去读取数据。

  这时候由于是3台OSD同时对外传输数据,所以传输的速度就加快了。当OSD服务器数量越多,这种读写速度的提升就越大,通过此种方式,实现了读写快的目的。

  另一方面,对象存储软件是有专门的文件系统的,所以OSD对外又相当于文件服务器,那么就不存在文件共享方面的困难了,也解决了文件共享方面的问题。

  所以对象存储的出现,很好地结合了块存储与文件存储的优点。

  最后为什么对象存储兼具块存储与文件存储的好处,还要使用块存储或文件存储呢?

  • 有一类应用是需要存储直接裸盘映射的,例如数据库。因为数据库需要存储裸盘映射给自己后,再根据自己的数据库文件系统来对裸盘进行格式化的,所以是不能够采用其他已经被格式化为某种文件系统的存储的。此类应用更适合使用块存储。
  • 对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高。

理解块存储、文件存储和对象存储的应用场景和选择相关推荐

  1. Kubernetes 集群基于 Rook 的 Ceph 存储之块设备、文件系统、对象存储

    文章目录 1.Rook & Ceph 介绍 2.环境.软件准备 3.Block 块存储 3.1.创建 CephBlockPool.StorageClass 3.2.验证并测试 4.File S ...

  2. 初试 Ceph 存储之块设备、文件系统、对象存储

    目录 Ceph 存储介绍 环境.软件准备 Ceph 块设备 Ceph 文件系统 Ceph 对象存储 1.Ceph 存储介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统.它可靠 ...

  3. ceph(存储之块设备、文件系统、对象存储)

    1.Ceph 存储介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统.它可靠性高.管理方便.伸缩性强,能够轻松应对PB.EB级别数据.Ceph 存储体系中,核心为 RADOS, ...

  4. Java上传文件到ucloud对象存储上

    使用uclpud对象存储存储文件,比如excel.pdf.png等,这里讲述一下完整的一套使用流程. 官方文档说明:https://github.com/ucloud/ufile-sdk-java 首 ...

  5. 不限速真香!Python 转移文件至云对象存储

    对象存储(Cloud Object Storage,COS)是一种存储海量文件的分布式存储服务,具有高扩展性.低成本.可靠安全等优点. 对象存储有什么用呢?对于站长而言,比如Python实用宝典网站的 ...

  6. 马逊s3云存储接口_当对象存储“湖”有了强一致性

    从 2006年第一个云服务对象存储服务 Amazon S3 发布直到 2020年12月1日之前,S3 对象操作都是遵循 "最终一致性"原则,对象存储服务本身就是一个复杂的分布式系统 ...

  7. ossfs挂载百度对象存储_阿里云对象存储OSS挂载工具

    前言 宝塔面板里有类似服务9.9一个月,愿意花钱的大佬们也不会搜到我这篇文章 不想花钱的小伙伴们就仔细看看下面我这篇文章吧 科普:linux常用命令: ls 查看当前目录下文件 安装及配置 下载:安装 ...

  8. 【存储】块存储、文件存储和对象存储的区别?

    目录 简单说明 详细解释 存储分类 01 块存储(提供虚拟磁盘) 02 文件存储 03 对象存储 04 三种存储的区别和对比 分布式块存储.文件存储.对象存储的区别 理解Ceph的三种存储接口:块设备 ...

  9. 对象存储与块存储、文件存储等对比

    看到 一篇文档, 讲 对象存储, 好奇,搜索文章,摘抄,学习记录 ! 背景: 传统存储在面对海量非结构化数据时,在存储.分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结构化内容设 ...

  10. mysql存储文件用什么类型_块存储、文件存储、对象存储的区别是什么?

    块存储: 需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口.提供随机读写,可以像使用物理硬盘一样格式化并建立文件系统来使用块存储,块存储可用于绝大部分通 ...

最新文章

  1. arduino下载库出错_【arduino】DIY音乐播放器,arduino播放wav音乐,TRMpcm库测试及使用...
  2. 想要挑战成功的hongjin2
  3. arcengine遍历属性表_小程序导出数据到excel表
  4. linux查看当前igb的版本信息,Linux下查看网卡驱动和版本信息
  5. go的一个不太理解的赋值问题
  6. SAP自学指南:案例公司的特点
  7. tab和TabHost
  8. 接口与interface关键字
  9. Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程
  10. golang文件传输工具,支持大文件
  11. android 修复工具下载,安卓数据恢复软件(FonePaw for Android)
  12. 汽车销售管理系统源码
  13. 2021-02-04-scrapy爬虫案例1:爬取博客园新闻版块详情页-基础入门篇
  14. UML工具Visual Paradigm最新版本16.2发布
  15. 外派linux运维,请好好善待你身边的Linux运维工程师,因为他们...
  16. Android 应用分屏
  17. 汕尾督办pc端和移动端
  18. 微信小程序 -数字滚动动画
  19. 中国智能手机集成电路(IC)行业市场供需与战略研究报告
  20. python中valueerror是什么意思_python-ValueError:不安全的字符串pi

热门文章

  1. 中大计算机考研复试刷人太狠,来!看看这些院校复试刷人刷的有多厉害
  2. 因你而变——JIRA使用心得
  3. protobuf 性能对比
  4. 使用cocos2d-x实现一款类似《Flappy Bird》的游戏
  5. Python 深度学习 Class 2:神经网络的数学基础
  6. 竣达技术丨机房组态系统综合监控解决方案
  7. 云服务器cms与云虚拟主机区别,虚拟主机和云服务器哪个好?分别有什么优势
  8. knex 找不到mysql_node knex mysql ER_NOT_SUPPORTED_AUTH_MODE
  9. 冒泡排序由浅入深详细分析图解
  10. 2022年美赛e题资料(森林固碳)