01-按照存储类型分类

01、独享式存储


指由单台存储设备提供服务,且相同的一块存储区域同一时间只能被单台设备访问(读写)。

如DAS,块存储,SAN网络下的存储,具体产品包括磁盘阵列,硬盘。

此种存储,存储区域通常以裸盘映射的方式映射给服务器,由服务器的操作系统中的文件系统对裸盘进行格式化,然后再挂载使用。但是挂载完成后,该区域仅能给挂载的服务器A访问,B服务器无法访问这一块空间。

优点:访问速率高(DAS基于内部总线,SAN架构有8/16/32Gbps的端口,传输速率比普通GE速率高,所以速度快)。

缺点:此种方式不利于数据的共享,同一块区域不能供多台设备访问。另外由服务器的文件系统访问后端存储,服务器需要消耗CPU资源来管理数据到底存放在存储的哪个地址段与寻址,有性能损耗。

02、共享式存储-非集群式存储

指由单台存储设备提供服务,且相同的一块存储区域同一时间能被多台设备访问(读写)。

如NFS/CIFS/NAS/文件存储/特殊条件下的SAN与块存储/分布式文件系统(单机)。具体产品如普通X86服务器安装NFS或SAMBA(CIFS)软件,NAS磁盘阵列,SAN网络下的块存储再通过服务器部署集群软件访问等。

优点:此种存储,通常通过IPSAN组网,并且存储先通过网络文件系统将裸盘格式化,再对外提供服务。访问设备无需管数据存在哪个地方,寻址的工作由文件服务器或NAS阵列的文件系统处理,因此服务器可以释放CPU寻址的性能占用。此外,此方式便于数据共享,而且成本较低。

缺点:但是读写性能没有块存储好。

03、共享式存储-集群式存储-单节点/多节点式存储-集中/分布式存储

指由多台存储设备提供服务,且相同的一块存储区域同一时间能被多台设备访问(读写)。

03-01、集群式存储分单节点/多节点式区别:

单节点式通常指仅部署有一个本地节点,而多节点式指设备分别部署在多个节点的机房/机楼/城市。

每种模式下都分别有集中式与分布式两种,其中,集中式指存储采用单台集中式设备(如磁盘阵列),分布式指存储采用多台设备采用分布式软件部署(如多台X86服务器)。

多节点式比单节点容灾功能更强,而且可以结合智能DNS等进行用户调度,根据用户的位置调度访问最近/链路质量最优的节点,优化用户访问速度。

分布式由于存在多台设备,多台设备时可以同时提供访问服务的,所以相当于可以无限量地提升了IO,设备越多,并发IO支持能力越大。

03-02、分布式存储与对象存储

分布式存储分为分布式块存储、分布式文件存储、分布式对象存储。对象存储一定是分布式存储,分布式存储不一定只能是对象存储。

分布式存储(块/文件存储)原理与部署模式基本上就是上一页的对称式/非对称式的Name Node+Data Node的部署模式。其中:

Name Node负责:a、提供存储数据的逻辑视图、文件名列表及目录结果(VFS);b、提供组织物理存储介质的数据分布(inode);C、保持数据一致性。

Data Node负责:只管数据的实际存放,什么管理功能都不管。

而对象存储:分为OSD(相当于Data Node)与MDS(相当于Name Node)。但是:

MDS只负责: a、提供存储数据的逻辑试图、文件名列表及目录结果;b、数据一致性。

OSD负责:a、数据的实际存放;b、数据的分布。

由于一般分布式存储的Name Node中,CPU中10%的负载在于逻辑视图部分(VFS),90%的负载在与计算数据的分布部分(inode)。而由于一般Name Node肯定是少于Data Node的,因此对象存储将数据分布方式的计算部分下沉到了OSD(Data Node),降低了Name Node的负载,因此性能更好。

存储类型类型分类总览图

02-按照存储用途分类

01、块存储

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

块存储相当于裸硬盘映射给文件系统/操作系统,需要进行分区与格式化之后才能给操作系统识别使用。

块存储可以通过RAID与LVM等方式将物理磁盘构成逻辑磁盘后再映射给操作系统使用。

优点:

1、通过RAID与LVM等手段,对数据提供了保护。

2、可以将多块硬盘组织起来,成为更大容量的硬盘。

3、逻辑盘由多块硬盘组成,读写时多个磁头并行读写,效率高,速度快。

4、多采用SAN组网,传输速率以及封装协议的原因,使得传输速度与读写速率得到提升。

缺点:

1、采用SAN架构组网时,需要额外为主机购买光纤通道卡,还要买光纤交换机,造价成本高。

2、服务器不做集群的情况下,块存储裸盘映射给主机,再格式化使用后,主机间无法共享磁盘。

3、不利于文件共享(不同文件系统间的数据是共享不了的。例如Linux下的EXT4文件系统,无法识别NTFS格式U盘,不同文件系统下的数据无法共享。)

02、文件存储

典型设备:FTP、NFS、CIFS服务器

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

有软硬一体化的设备,普通服务装上网络文件系统,也可以充当文件存储。

主机A可以直接对文件存储进行文件的上传下载,与块存储不同,主机A是不需要再对文件存储进行格式化的,因为文件管理功能有文件存储的系统负责。

优点:

1、造价交低:普通的服务器即,另外只需要普通以太网即满足网络要求,不需要专用的SAN网络,成本低。

2、方便文件共享:例如主机A(WIN7,NTFS文件系统),主机B(Linux,EXT4文件系统),原来无法对一个文件进行共享。当中间添加了主机C(NFS服务器),可以先从A拷到C,再C拷传输到B,即解决了文件共享的问题。

缺点:

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

03、分布式存储典型设备:Ceph、Swift

03-01、分布式块存储:

典型产品:GlusterFS, Ceph等

通过分布式的X86服务器,安装上述的软件,实现分布式块存储部署,客户端通过Rest接口,可以挂在分布式块存储划出来的卷,然后进行数据访问。

部分厂商偷换概念,将磁盘阵列说成几个不同控制器分别控制几块不同的硬盘框,然后将其称作分布式块存储产品。

03-02、分布式文件存储:

典型产品:NFS、GFS、HDFS、Ceph等

通过分布式的X86服务器,安装上述的软件,实现分布式文件存储部署。访问的用户不需要对区域进行挂载,即可实现目录级别的访问。

03-03、分布式对象存储:

典型产品:Ceph、swift

通过分布式的X86服务器,安装上述的软件,实现分布式对象存储部署,客户端通过Rest接口,可以访问MDS。

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

传统存储数据与元数据都同时放在文件块中,数据寻址效率低,寻道时间长,查找时间慢。

对象存储解决方案通过元数据服务器MSD存储元数据,用户访问对象时MDS负责查找对象元数据信息(信息量小),得出数据存储在OSD(存储数据的节点)上面的地址,用户再并发访问多个OSD读取数据。查找速度快,并行读写。

此外,如前说所,OSD负责了数据如何分布的计算,这是很多文献都会称OSD是智能化设备的原因。

另外对象存储提供基于对象的访问接口供应用系统访问非结构化数据,与文件系统无关,因此也解决了数据共享的问题。支持一次写多次读取。

04、表存储典型设备:

Hbase、MongoDB

传统数据库强调ACID原子性,对于数据一致性要求高,但现阶段WEB应用很多场景对读、写得一致性要求并不高,因此传统数据库限制了数据库向分布式的扩展。

因此出现了表存储这种类型的设备。表存储用于处理半结构化数据,每次更新或查找少量。

表存储以键值对的形式进行存储,而数据没有固定的字段与长度,每个元组有唯一的键值,查找的时候通过键值的索引进行查找。

04-01、交易型(NoSQL存储):

典型产品:Redis、MongoDBT,CssandraDomain

每次更新或查找少量记录,并发量大,响应时间短。

KV(键值对)存储,通常不支持SQL、只有主索引、半结构化,适合微博、博客、社交网络等。

04-02、分析型(日志箱单存储):

典型产品:Hbase、BIG Table,EMC Greenplum更新少,批量导入,每次针对大量数据进行处理,并发量小。

兼容SQL、索引通常只对单表有效、多表Join需扫描,支持MapReduce并行计算。

大规模日志存储处理、信令系统处理、经分系统ETL等

03-存储的数据类型

01、结构化数据

可以通过构建二维表表示的数据(块存储合适存储这种内容)

02、非结构化数据

像图片、声音、视频等等。这类信息通常无法直接知道他的内容,数据库也只能将它保存在一个BLOB字段中,对以后检索非常麻烦。

一般的做法是,建立一个包含三个字段的表(编号 number、内容描述 varchar(1024)、内容 blob)。引用通过编号,检索通过内容描述。(文件存储/对象存储合适存储这种内容)

03、半结构化数据

这样的数据和上面两种类别都不一样,它是结构化的数据,但是结构变化很大。因需要了解数据的细节所以不能将数据简单的组织成一个文件按照非结构化数据处理,由于结构变化很大也不能够简单的建立一个表和他对应。

例如:比如存储员工的简历。不像员工基本信息那样一致每个员工的简历大不相同。有的员工的简历很简单,比如只包括教育情况;有的员工的简历却很复杂,比如包括工作情况、婚姻情况、出入境情况、户口迁移情况、党籍情况、技术技能等等(No SQL存储适合存放这种内容)

按存储用途分类总览图

为什么部分数据库适合用块存储

以下以Oracle数据库为例:

数据库的物理组成

控制文件、日志文件、控制文件

数据库的逻辑组成

表空间、段、区、块。其中数据库块并非前面的文件系统块。数据库安装在操作系统之上,有自己的一套编制的方式,类似有自己的文件系统。因此数据库会将多个操作系统块组成为一个数据库块,数据库块为数据库的最小单位。

为何不能存放在文件存储/对象存储:

文件存储/对象存储优点是数据共享,服务器共享访问数据,文件的访问控制管理很复杂,且数据一致性难以保障。

数据库块是由数据库自己的文件系统维护的,数据库实例都要通过数据库的文件系统才能读写数据文件里面的数据,因此外面这一层文件存储的文件系统是多余的,对于数据库实例来说根本用不上。

因此,数据库更合适使用块存储,裸盘映射后由数据库对区域进行格式化,并且单一区域仅能供单机访问,需要启用数据库集群软件后,才能共享访问,而数据库集群软件中有相应的锁机制以确保数据的一致性。