持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中,如磁盘等。
数据按存储类型可以分为缓存数据库、关系型数据库、NoSQL数据库、图片和视频等文件的对象存储数据库等。
其中缓存数据库是应用内存存储数据,其余的存储类型都是持久化的存储。
联机交易区,即需要进行OLTP(On-line Transaction Processing,联机事务处理)的数据区域,与统计分析区相比,数据为近期产生的,热度较高,数据量相对较小,并发较高,要求实时处理。
统计分析区,即需要进行OLAP(On-line Analytical Processing,联机分析处理)的数据区域,单个数据的查询频率较OLTP更低,但数据量大,通常会涉及较复杂的聚合计算。
联机交易区和统计分析区之间使用ETL工具如Kattle或其他数据复制技术来实现数据的导入。
RAID(Redundant Array of Independent Disks)即独立磁盘冗余阵列,通常简称为磁盘阵列。
RAID是由多个独立的高性能磁盘驱动器组成的磁盘子系统,能提供比单个磁盘更高的存储性能和数据冗余的技术。当单块磁盘出现故障时,RAID会根据剩余磁盘中的数据和校验数据重建丢失的数据,保证数据一致性和完整性。数据分散保存在RAID中的多个磁盘上,并发数据读写要大大优于单个磁盘,因此可以获得更高的聚合I/O带宽。磁盘阵列会减少全体磁盘的总可用存储空间,牺牲空间换取更高的可靠性和性能。
RAID中主要有三个关键概念和技术
1)镜像(Mirroring)
镜像是将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本读取数据来提高读性能。镜像的写性能要稍低,确保数据正确地写到多个磁盘需要消耗更多的时间。
2)数据条带(DataStripping)
数据条带是将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本。数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上的数据进行读写操作,从而获得非常可观的I/O性能提升。
2)数据校验(Data Parity)
数据校验是利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。利用校验功能,可以在很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。
通过组合运用这三种技术,可以把RAID分为不同的等级,以满足不同数据应用的需求。实际应用领域中使用最多的RAID等级是RAID0、RAID1、RAID3、RAID5、RAID6和RAID10。
(1)RAID0
RAID0将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并发读访问。由于可以并发执行I/O操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0的性能在所有RAID等级中是最高的。
RAID0具有低成本、高读写性能、100%的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。因此,RAID0一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。
(2)RAID1
RAID1称为镜像,它将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为50%。RAID1在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。RAID1提供了最佳的数据保护,一旦工作磁盘发生故障,系统会自动从镜像磁盘读取数据,不会影响用户工作。
RAID1与RAID0刚好相反,是为了增强数据安全性而使两块磁盘数据呈现完全镜像。RAID1拥有完全容错的能力,但实现成本高。RAID1应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。
(3)RAID3
RAID3采用一个专用的磁盘作为校验盘,其余磁盘作为数据盘。RAID3完好时读性能与RAID0完全一致,并行从多个磁盘条带读取数据,性能非常高,同时还提供了数据容错能力。向RAID3写入数据时,必须计算所有同条带的校验值,性能较低。
RAID3只需要一个校验盘,阵列的存储空间利用率高,再加上并行访问的特征,能够为高带宽的大量读写提供高性能,适用于大容量数据的顺序访问应用,如影像处理、流媒体服务等。目前,RAID5算法不断改进,在大数据量读取时能够模拟RAID3,而且RAID3在出现坏盘时性能会大幅下降,因此常使用RAID5替代RAID3来运行具有持续性、高带宽、大量读写特征的应用。
(4)RAID5
RAID5和RAID3类似,但校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。
RAID5技术实际上没有备份磁盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID5这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。是目前综合性能最佳的数据保护解决方案。RAID5基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。
(5)RAID6
RAID6引入双重校验的概念,可以保证阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。RAID6思想最常见的实现方式是采用两个独立的校验算法,假设称为P和Q,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解二元方程来重建两个磁盘上的数据。RAID6具有快速的读取性能、更高的容错能力。但是,它的成本要高出RAID5许多,写性能也较差,并且设计和实施非常复杂。因此,RAID6很少得到实际应用,主要用于对数据安全等级要求非常高的场合。
(6)RAID10
RAID10也称为RAID1+0,实际是将RAID1和RAID0标准结合的产物。RAID10技术需要至少4块硬盘来组建,先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1按阵列实施RAID0技术。RAID10方案造成了50%的磁盘浪费,但是它提供了200%的速度和防止单磁盘损坏的数据安全性。
扇区是磁盘的最小存储单位,多个连续的扇区组成一个块,也叫物理块。
文件由多个不连续的物理块组成,文件系统使用块来读取设备,块是文件系统的最小单位。使用块存储信息的设备叫作块设备,块设备是I/O设备中的一类,每个块都有自己的地址。
文件系统是操作系统在存储设备上组织文件的方法,是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
直连存储存储通过SAS、iSCSI或FC等接口与服务器直接连接,中间没有任何转换交换设备,作为服务器内置硬盘容量的扩充,具有一定的灵活性和限制性。RAID通常在服务器端进行设置,通常将单一存储与服务器直连也称为DAS。
网络附加存储存储设备通过标准的网络拓扑结构(以太网)添加到一群计算机上,可以理解为服务器+硬盘+文件系统软件的组合。存储可配置网络IP地址,直接接入IP局域网络,RAID在存储器端进行设置并配置文件共享功能。NAS利用现有以太网网络,因此部署灵活,成本非常低,基于TCP/IP协议的特性可以提供丰富的网络服务,基于文件的形式提供数据的存储及备份,但是TCP/IP协议决定了数据传输的数据打包及解包,会占用系统资源,传输速率受限于以太网的速率。
在存储功能上面有一个文件系统,NAS是文件存储,聚焦在应用、用户和文件以及它们共享的数据上,NAS通过网络共享协议使用一个文件系统,应用服务器和NAS之间使用的协议有SMB、NFS以及AFS等网络文件系统协议。对于应用服务器来说,NAS就是一个网络上的文件服务器,可以上传、下载文件。
SAN通过光纤通道交换机连接存储阵列和服务器主机,成为一个专用存储网络。RAID在存储器端进行设置。SAN的结构允许任何服务器连接到任何存储阵列,这样不管数据放在哪里,服务器都可直接存取所需的数据。
SAN存储使用光纤网络进行传输,并且独立于应用网络,可以提供非常高的带宽,数据的传输基于块协议,无需对数据进行处理,直接进行传送,因此性能最好。另外光纤线路可以提供远距离的高带宽链路,可以实现数据中心的异地灾备应用。但是SAN部署复杂,成本较高。NAS和SAN又叫网络存储,都是使用RAID技术提供冗余和并发读写,两者最本质的区别在于文件管理系统位置。在SAN存储架构中,文件系统是部署在每个应用服务器上,SAN是块存储,聚焦在磁盘、磁带以及连接它们的基础结构,而把文件系统的抽象交由应用服务器负责。
SAN的客户端和服务器端之间的协议有Fibre Channel、iSCSI、ATA overEthernet(AoE)和HyperSCSI。对于应用服务器来说,SAN就是一块磁盘,可以对其格式化、创建文件系统并挂载。
传统的网络存储价格较贵,扩展数量有限,互联网生态下的云存储则用数量弥补质量,以大量低成本的普通PC服务器组成网络集群来提供服务。相比传统的高端服务器,同样价格下分布式存储提供的服务更好、性价比更高,且新节点的扩展以及坏旧节点的替换更为方便。
对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠性的云存储技术,适合存放任意类型的文件。对象和存储空间是对象存储的核心概念,围绕对象和存储空间需要建立访问控制、数据管理、数据加密、容灾备份机制。
(1)对象存储的概念
对象是OSS存储数据的基本单元,也称为OSS的文件。对象由元信息(ObjectMeta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一组键-值对,表示了对象的一些属性,如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。其中地域表示OSS的数据中心所在物理位置,一般来说,距离用户更近的地域访问速度更快。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。每个用户可以拥有多个存储空间。存储空间的名称在OSS范围内必须是全局唯一的,一旦创建就无法修改名称。存储空间内部的对象数目没有限制。
(2)对象存储的实现机制
OSS,依赖于文件系统提供了从“对象”到“块”的映射,采用key-value的扁平化存储架构设计,调用API就能进行数据存储和读取。对象存储最常用的方案就是多台服务器内置大容量硬盘,再装上对象存储软件,然后再额外配置几台服务器作为管理节点,安装上对象存储管理软件。管理节点可以管理其他服务器对外提供读写访问功能。
数据冗余存储机制,OSS将每个对象的不同冗余存储在同一个区域内多个设施的多个设备上。OSS周期性地通过校验等方式验证数据的完整性,及时发现因硬件失效等原因造成的数据损坏。当检测到数据有部分损坏或丢失时,会利用冗余的数据进行重建并修复损坏数据,确保硬件失效时的数据可靠性和可用性。
(3)OSS与传统存储的区别
与传统存储相比,OSS使用方便,价格低,扩展方便,可以存储海量数据。网络文件系统的客户端通过NFS等网络协议访问某个远程服务器上存储的文件。块存储的客户端通过数据块的地址访问SAN上的数据块。对象存储则通过REST网络服务访问对象。对象存储提升了存储系统的扩展性。当一个存储系统中保存的数据越来越多时,存储系统也需要同步扩展,然而由于存储架构的硬性限制,传统网络存储系统的管理开销会呈指数上升。而对象存储架构的扩展只需要添加新的存储节点就可以。它解决了存储海量大数据的问题。
(4)对象存储的开源实现
对象存储的实现方案包括Swift、Ceph、Minio、HBase MOB、Hadoop Ozone等。