常用的存储类型主要有三种,块存储
,文件存储
和对象存储
。我们在介绍这几种存储类型的过程中会以 Ceph 为例进行演示和对比。
块存储
指将物理存储介质上的物理空间按照固定大小的块组成逻辑盘,并直接映射空间给服务器使用的存储设备。块存储的常用协议包括 SCSI、iSCSI 等。
块设备可理解成一块硬盘,用户可以直接使用不含文件系统的块设备,也可以将其格式化成特定的文件系统,由文件系统来组织管理存储空间,从而为用户提供丰富而友好的数据操作支持。
使用场景
-
适用于对 IOPS 要求高,延迟低的结构化数据场景,多用于提供虚拟化、私有云、数据库等使用块存储资源的结构化数据业务,业务应用直接对磁盘块进行访问操作。
- 虚拟化环境 : VMware 、 KVM 、OpenStack、容器等;
- 云环境 : CloudStack 、ZStack 等;
- 数据库: Oracle、MySQL 等。
如果通过 K8S CSI 使用的话,只支持 ReadWriteOnce(RWO) 模式,即可读可写,但只支持被单个节点挂载使用。
文件存储
文件存储以自上而下的层次结构将存储的信息整理到文件和文件夹中。计算机使用文件存储让用户可以轻松地存储、搜索和检索信息。我们可以使用文件存储系统来存储和组织几乎任何类型的数据。虽然文件存储易于使用,但由于其紧密连接的架构,很难横向扩展。
- 以盘符/目录的形式展现给用户
- POSIX 接口
- NFS/CIFS 等访问协议
使用场景
- 提供文件存储功能,支持 NFS/CIFS 等访问协议,常用于传统局域网共享型的业务应用,以支持多个用户对同一文件协同操作为特征。适用于高性能计算、非结构化数据、内容管理、数据归档等。
- 如果通过 K8S CSI 使用的话,可以支持 ReadWriteMany(RWX) 模式,即可读可写,可以同时被多个节点挂载使用。
针对块存储和文件存储,需要回答的问题:
-
以我们使用的 Ceph 为例,Ceph 有了块设备接口,在块设备上完全可以构建一个文件系统,那么 Ceph 为什么还需要文件系统接口呢?
-
为什么 Ceph 的块设备接口不具有共享性,而 Ceph 的文件系统接口具有呢?
对象存储
对象存储主要面向存储大量的非结构化数据,通俗来说,我们日常生活中生成的照片、视频、音频、文档等都属于非结构化数据。这些日常产生的数据都适合存储在对象存储中。对象存储中的所有对象都存储在单个平面地址空间中,而没有传统文件系统复杂的目录层次结构。对象存储的常用协议包括 S3、SWIFT 等。
- 对象访问语义,扁平目录结构
- RESTful 接口
- HTTP 访问协议
- 支持副本和 EC
一句话概况,对象存储使用方式就是通过 http 协议上传下载删除对象(文件即对象)。
EC 和 副本
提到存储不得不提到 EC 和副本,顾名思义,副本就是数据写多份,而EC 的全称是Erasure Code——纠删码,是一种编码理论。
- EC 策略:一般就是我们常说的(K+M),K 个数据块,M 个校验块。
- 条带(stripe):和磁盘阵列中的条带类似,是把连续的数据分割成相同大小的数据块,把每块数据分别写入到 EC 中的不同磁盘上,EC 会针对这些数据块计算校验块,1 个条带包含多数据块和多个校验块,数据块的个数一般称为 K,校验块的个数称为 M,每个条带包含 (K + M) 块。
EC 和副本的选择
- 选择 EC 的首要出发点是降低单位存储成本,比起传统的 3 副本存储方式,选择 8 + 3 EC 策略,存储副本数变为 1.375( 11/8),节约了 1.625 的存储副本。
- 同时相比三副本的存储方式(不管是客户端直接写 3 副本,还是由复制组中的 primary 节点接收数据后写两个 secondary 节点)写入流量减少将近 1 倍。
- 副本是基于数据完整复制,没有涉及额外的运算,对 CPU 开销较低。EC 由于读写都需要计算校验值,需要额外的 CPU 资源开销。
- 副本读写性能好,得盘率低。EC 校验码计算有性能损耗,得盘率高。
基于性能的原因,块和文件存储目前只支持副本,因而磁盘利用率较低,而对象存储元数据使用副本存储,数据使用 EC 进行存储。因此,存储优先推荐使用对象存储。
使用场景
- 提供 S3 协议接口服务,支持通过 Restful 的访问方式进行数据的上传、下载、删除。常用于互联网、移动终端应用业务云存储,以海量非结构化类型数据为特征。
- 支持 EC 功能,空间利用率高。
针对对象存储,需要回答的问题:
- 有了块存储和文件存储,为什么还整个对象存储呢?