3.5 企业存储关键技术及特性
企业存储的数据有一个从产生、保护、读取、更改、迁移、存档、回收、再次激活以及退出的生命周期。数据信息生命周期管理需要相应的策略和技术实现手段,目的在于帮助企业在数据信息生命周期的各个阶段以最低的成本获得最大的价值。
一般来说,企业存储是靠以下关键数据存储技术来保障的:数据可靠性技术(如RAID-Redundant Array of Independent Disks,EC-Erasure Code,备份双活、双控多控等),数据存取低时延技术(如PCIe、InfiniBand、FC-Fiber Channel等高速互联技术、RDMA、DMA多播以及用户态软件栈技术),数据重删压缩技术以及多租户技术(提高资源利用率),日志驱动的事务存储技术(原子写、快照、克隆等),分布式一致性技术(Paxos算法、MVCC-Multi-version Concurrency Control等)。
3.5.1 RAID和EC技术
RAID是“独立磁盘构成的具有冗余能力的阵列”的意思。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生的加成效果提升整个磁盘系统的效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。
RAID是由加利福尼亚大学伯克利分校(University of California-Berkeley)在1988年发表的文章A Case for Redundant Arrays of Inexpensive Disks(《低价磁盘冗余陈列的使用案例》)中提到的。文章中,提出了RAID这个词汇,而且定义了RAID的5个层级。伯克利大学的研究目的是反应当时CPU快速的性能。CPU效能每年大约成长30%~50%,而硬磁机只能成长约7%。研究小组希望找出一种新的技术,在短期内,立即提升效能来平衡计算机的运算能力。在当时,柏克莱研究小组的主要研究目的是效能与成本。另外,研究小组也设计出容错(fault-tolerance),逻辑数据备份(logical data redundancy),而产生了RAID理论。研究初期,便宜(inexpensive)的磁盘也是主要的重点,但后来发现,大量便宜的磁盘组合并不能适用于现实的生产环境,后来便宜(inexpensive)被改为“independent”,即许多独立的磁盘组。
RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(throughput)。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。这也是RAID最初想要解决的问题。因为当时CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。RAID最后成功了。
通过数据校验提供容错功能。普通磁盘驱动器无法提供容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每个磁盘驱动器的硬件容错功能之上的,所以它提供更高的安全性。在很多RAID模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了RAID系统的容错度,提高了系统的稳定冗余性。
EC(Erasure Code)可以认为是RAID的通式,任何RAID都可以转换为特定的Erasure Code。在传统的RAID中,仅支持少量的磁盘分布,当系统中存在多个分发点和多节点时,RAID将无法满足需求。比如RAID5只支持一个盘失效,即使是RAID6也仅支持两个盘失效,所以支持多个盘失效的算法也就是Erasure Code,这是解决这一问题的办法。
Erasure Code是一种数据编码技术,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原原始数据。定义中包含了编码和解码两个过程,将原始的n份数据变为n+m份是编码的过程,之后这n+m份数据可存放在不同的存储设备上,如果有任意小于m份的数据失效,仍然能通过剩下的数据还原出全部的原始数据。
3.5.2 重删压缩技术
企业存储的数据一般具有很强的相关性,尤其对于传统的关系数据库(RDBMS)而言,所以重删压缩技术的有效利用将大大提高数据库数据存储和处理的效率以及存储资源的利用率。
3.5.3 数据重删技术
数据重删是一种数据缩减技术,通常基于磁盘的数据库等应用数据的备份系统,旨在减少存储系统中使用的存储容量。它的工作方式是在某个时间周期内查找不同文件中不同位置的重复可变大小的数据块。重复的数据块用指示符取代,以大幅减少存储资源的使用。高度冗余的数据集(例如全量备份数据)从数据重复删除技术的获益极大,用户可以实现高达10比1甚至50比1的缩减比。而且,重复数据删除技术可以允许用户在不同站点之间进行高效、经济的备份数据复制和传输。
数据重删包括相同数据重删和相似数据重删两种。相同数据主要包括相同文件及相同数据块两个层次。完全文件检测(whole file detection,简称WFD)技术主要通过哈希(Hash)技术进行数据挖掘。细粒度的相同数据块主要通过固定分块(fixed-sized partition,简称FSP)检测技术、可变分块(content-defined chunking,简称CDC)检测技术、滑动块(sliding block)技术进行重复数据的查找与删除。
相似数据的检测与编码技术利用数据自身的相似性特点,通过shingle技术、bloom filter技术和模式匹配技术挖掘出相同数据检测技术不能识别的重复数据;对相似数据采用delta技术进行编码并最小化压缩相似数据,以进一步缩减存储空间和网络带宽的资源占用。
3.5.4 数据压缩技术
数据压缩技术在数据库存储中占有重要位置。对于数据库数据而言,包含OLTP(Online Transaction Processing)在线压缩、归档压缩、行压缩、列压缩、混合列压缩等多种压缩方式。数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率,或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间的一种技术方法。数据压缩包括有损压缩和无损压缩。在数据库应用中,我们主要关注无损压缩技术。
压缩的理论基础是信息论(它与算法信息论密切相关)以及失真理论,这个领域的研究工作主要是由信息论的奠基人美国麻省理工学院的Claude Shannon教授奠定的,他在20世纪40年代末期及20世纪50年代早期发表了这方面的基础性的论文。数据压缩被称为所有的工程领域最简单、最优美的设计理论之一。数据压缩跟密码学与编码理论也是密切相关的学科,数据压缩的思想与统计推断也有很深的渊源。
数据压缩的方式非常多,不同特点的数据有不同的数据压缩方式(也就是编码方式),下面从几个方面对其进行分类。
(1)即时压缩(Online compression)和非即时压缩(Offline Compression)
数据库应用中的OLTP压缩属于即时压缩,归档压缩属于非即时压缩。
(2)数据块压缩(Data block compression)和文件压缩(File compression)
主流关系数据库应用的数据组织是以一定大小的数据块为单位的,所以在数据库应用中会经常采用基于数据块的压缩。由于数据库表格组织的特点,其还有有基于数据库行的压缩和基于数据库列的压缩,基于行与列的混合压缩方式等。
(3)无损压缩与有损压缩
无损压缩利用数据的统计冗余进行压缩。数据统计冗余度的理论限制为2∶1到5∶1,所以无损压缩的压缩比一般比较低。这类方法广泛应用于文本数据、程序和特殊应用场合的图像数据等需要精确存储数据的压缩。有损压缩方法利用了人类视觉、听觉对图像、声音中的某些频率成分不敏感的特性,允许压缩的过程中损失一定的信息。虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响较小,却换来了比较大的压缩比。有损压缩广泛应用于语音、图像和视频数据的压缩。在数据库应用中,基本采用无损压缩的方式。
3.5.5 分布式一致性技术
分布式数据存储最大的挑战之一是分布式存储的一致性问题。解决分布式数据库存储中的数据一致性的问题主要依靠Paxos一致性算法和多版本一致性控制技术(Multi-version Consistency Control,MVCC)。
3.5.5.1 Paxos算法
Paxos算法是Leslie Lamport于1990年提出的一种基于消息传递的一致性算法,这个算法被公认为是类似算法中最有效的。
Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”,以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。因此从20世纪80年代起对于一致性算法的研究就没有停止过。节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。Paxos算法就是一种基于消息传递模型的一致性算法。
不仅只用于分布式系统,凡是多个过程需要达成某种一致性的都可以使用Paxos算法。一致性方法可以通过共享内存(需要锁)或者消息传递实现,Paxos算法采用的是后者。下面是Paxos算法适用的常见的几种情况:(1)一台机器中多个进程/线程达成数据一致;(2)分布式文件系统或者分布式数据库中多客户端并发读写数据;(3)分布式存储中多个副本响应读写请求的一致性。
3.5.5.2 MVCC机制
大多数的开源关系数据库,如MySQL事务型存储引擎、InnoDB等都不使用一种简单的行锁机制。事实上,他们都和另外一种用来增加并发性的被称为“多版本并发控制(MVCC)”的机制一起使用。MVCC不只使用在MySQL中,Oracle、PostgreSQL以及其他一些数据库系统也同样使用它。
你可将MVCC看成行级别锁的一种妥协,它在许多情况下避免了使用锁,同时可以提供更小的开销。根据实现的不同,它可以允许非阻塞式读操作,在进行写操作时只锁定必要的记录。
MVCC会保存某个时间点上的数据快照。这意味着事务可以看到一个一致的数据视图,不管他们需要跑多久。这同时也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。如果你从来没有过这种体验的话,可能理解起来比较抽象,但是随着慢慢地熟悉,这种理解将会很容易。
各个存储引擎对于MVCC的实现各不相同,其中包括乐观和悲观并发控制。
通过使用MVCC(Multi-Version Concurrency Control)算法,其可自动提供并发控制。MVCC维持一个数据的多个版本,使读写操作没有冲突。也就是说,数据元素X上的每一个写操作产生X的一个新版本,GBase 8m为X的每一个读操作选择一个版本。由于消除了数据库中数据元素读和写操作的冲突,GBase 8m得到优化,具有更好的性能。特别是对于数据库读和写两种方法,他们不用等待其他同时进行的相同数据写和读的完成。在并发事务中,数据库写只等待正在对同一行数据进行更新的写,这是现有的行级锁的弱点。同时MVCC回收不需要的和长时间不用的内存,防止内存空间的浪费。MVCC优化了数据库并发系统,使系统在有大量并发用户时得到最高的性能,并且可以不用关闭服务器就直接进行热备份。
使用MVCC多版本并发控制的主要优点是在MVCC里,对检索(读)数据的锁要求与写数据的锁要求不冲突,所以读不会阻塞写,而写也不会阻塞读。
3.5.6 存储虚拟化整合技术
存储虚拟化技术通过向下异构存储资源并向上提供统一的存储资源访问接口,大大简化了服务器软件对存储资源的管理,同时通过集中的资源管理,可以实施统一的存储资源数据保护及分级存储,从而达成云化环境下的存储资源池,是现代存储产品面向云环境不可或缺的管理技术。
存储虚拟化可实现数据的分级存储。对于不少用户的业务系统,这一功能非常有效:用户可以选择将使用频率最高、访问最密集的数据存放在高端存储内部磁盘的一级存储上,而将那些需要归档或者是访问品率降低的老数据转移到由高端存储设备管理的外部存储设备上,这些外部设备可以选择容量更大、成本更低的存储来实现,也可使用客户已有的旧设备。所有应用访问都不用关心任何后台存储环境的真实变化,仅仅需要访问统一的高端存储访问接口。这样既满足了用户各种集中访问的需要,又能依据数据的时效性和重要性,灵活地进行数据部署,最大限度地降低建设和维护成本,真正实现数据生命周期管理。
图3-21为华为OceanStor 18000通过RAID2.0+及SmartTier实现SSD/SAS/SATA分级存储示意图。
图3-21 实现SSD/SAS/SATA分级存储示意图
3.5.7 存储分区技术
高端存储系统主要为客户数据中心的多业务和大量数据整合设计的。在多业务整合的过程中,越来越多的业务在整合的同时,需要强调数据的安全性以及相互隔离,同时强调不同级别的应用系统对系统资源的不同占用,因此业务整合本身就强烈地要求存储分区技术与之配套。
图3-22为华为OceanStor 18000 SmartPartition与SmartQoS的结合,提供不同应用不同优先级存储资源并保障各自服务质量的示意图。
图3-22 OceanStor 18000 SmartPartition与SmartQoS的结合