文/于耳
根据数据局部性原理,往往被频繁访问的数据是局部而有限的。为了应对部分这样的数据而全采用高速存储实在是过于奢侈。如果我们针对这部分数据另开小灶来解决不是更好?分层存储在这里可以发挥很大作用。
分层存储(Tiered Storage)称为层级存储管理(Hierarchical Storage Management),广义上讲,就是将数据存储在不同层级的介质中,并在不同的介质之间进行自动或者手动的数据迁移,复制等操作。同时,分层存储也是信息生命周期管理的一个具体应用和实现。
传统的存储分层技术在磁盘介质管理上基本沿袭了若干年前的“静态”技术,从而使得很多用户在部署实施分层技术后发现,整体IOPS性能依然与传统架构相当,即磁盘吞吐能力并未获得大幅提升。鉴于此问题,本文结合目前最新发布的块级并发架构存储分层技术,通过对实验测得数据分析,着重比较两者在磁盘介质管理上的不同以及后者的优势体现。
从计算机系统角度来说,最上层的存储层应该是CPU内的各类型寄存器,其次是CPU内的缓存,再其次是系统内存。因为从分层存储的定义上,此类型存储器是符合定义规则的。因为这些存储器速度与容量都有差别,越靠近CPU的存储器成本越高,速度越快,容量越小,并且在CPU的控制下,数据在这些不同类型的存储器中间进行自动的转存。我们将此类型的分层存储称为易失性存储分层,或者内部存储器分层存储。
而另外一种分类,则是非易失性分层存储,或者叫外部分层存储。此类型的存储介质一般包括固态硬盘(SSD)、机械式硬盘、光盘、闪存盘(包括外置硬盘)、磁带库等等。而此类的存储介质分层正是我们所要关注的,在没有特殊的说明情况下,在本文中所说的分层存储都是指外部分层存储。一般来说,作为第0层的存储介质通常为 RAM 磁盘(随机访问存储磁盘,其速度与内存同速,但是价格昂贵,使用环境基本上是特殊计算环境)以及 SSD,第1层可能有 FC类型的15K硬盘或者SAS类型的 15K硬盘,或者相应的10K硬盘。第2层可能有SATA类型的7.2K硬盘或其他类型的低转速磁盘。第3层,可能是如磁带库以及光盘库这样的离线介质。当然这样的分层不是标准,但在实际应用中,是常用的分层策略。
传统存储分层技术实现原理
在计算机系统中,CPU 的运行速度往往要比内存速度快上好几百倍甚至更多,为了更多地获取CPU的计算能力,就需要在访问数据的速度上进行提升,否则内存的速度将成为整个系统的性能短板。因此在这样的思想下,CPU慢慢发展出来1级或者2级这样的存储缓存。实际也表明,缓存的存在确实对于系统性能的提升起到了巨大的推动作用。
相应的,内存的访问速度又是硬盘访问速度的几百倍甚至更多,也是基于CPU类似的指导思想,我们能不能在存储之间也进行这样的分层(或者说缓存)以期提高系统的I/O性能,以满足应用对系统提出的更多高I/O的需求呢?
从某种意义上说,内存其实也就是充当了CPU与外部存储之间的另一个级别的缓存。作为用户来讲,我们当然希望所有需要用到的数据都最好是存在最高速的存储当中。但是这样的理想,至少在当前来说是不现实的。在技术上的难度不说,成本的压力就会让用户止步不前,再一个就是有没有必要的问题,因为有的数据根本都不需要一直存于这样的存储中。在计算机界中有一个很有名的理论,就是说,加上一个中间层,就可以解决计算机中许多的问题。而这个“中间层”也正是我们所寻求的,实际也证明这样的中间层确实取得了非常好的效果。
据IDC数据预测,到2012年,信息数据的增长将会达到50%的复合年增长率,这个增长主要源于越来越来多数据内容生成并存储,经济全球化使商业各个部门及与商业伙伴之间需要保持连接,使得更多的数据被生成,复制及保存。法规遵从及管理,还有容灾与备份都使得数据的增长持续上升。我们需要根据不同的数据存储需求,设计不同的存储方案。在具备存储分层功能的主存储中,需要频繁访问的实时数据,我们可以放在内存或者SSD(固态硬盘)设备中,而对于海量、低访问频度的数据以及快照产生的源数据副本,我们可以使用大容量低成本的存储来应对(如图1所示)。这样的做法,目的是希望把资金投向更能产生效益的存储上。
除了需要满足不同的存储需求,还有出于对高性能高吞吐量应用的支持。因为有的应用需要这样的存储系统,特别是现在如火如荼的虚拟化技术。为了在一台设备上支持更多的虚拟应用,就需要系统支持更大的吞吐量以及更高的性能。全部采用高速介质在成本上现在依然不是可行的,也不是必须的。因为我们把高频率访问的数据放在高速存储介质上,而其他的数据放在速度较慢一些的介质上,这实际上就是提高了系统的吞吐量。
传统存储分层的技术瓶颈
传统的存储分层技术从存储系统底层优化了应用数据的存放成本,使得更多需要高存取性能的数据能够存放在读写性能最高的磁盘介质,海量的低访问频度数据存放在低成本大容量的低转速磁盘。但是,传统的存储分层技术依然沿用了基于物理磁盘为最小管理颗粒的介质管理机制(如图2所示),要受到以下几方面的约束。
1. 物理磁盘为最小管理单元,RAID组创建于一定数量的磁盘之上;RAID组中,磁盘数量有一定限制,最多可实施的RAID组为16块磁盘。
图2 传统磁盘管理机制
表1 不同磁盘类型的理论IOPS值
2. 应用数据卷(LUN)与RAID组形成映射关系,RAID组中磁盘的性能表现决定了该数据卷的数据存取性能。
3. 数据卷一旦创建,所有归属于该卷的数据RAID架构即被固定,不能改变。
由此我们不难发现,基于传统的磁盘管理机制存在以下几方面的性能瓶颈:
1. 应用数据卷对应于RAID组,而RAID组则又对应于一定数量的物理磁盘。如果应用数据卷所对应的物理磁盘呈现繁忙状态,那么在一套存储系统中即使有再多的空闲磁盘,也不能改善该应用数据卷的存取性能。
2. RAID组的RAID类型在一旦创建后便不能改变,将严重影响数据写入性能。
通常情况下,我们在部署存储系统过程中,为了达到最高的磁盘空间利用率,通常会将每个RAID组创建为RAID5,如6个数据盘加一个校验盘组成的RAID5(6+1)。但RAID5对于写入操作的惩罚是众所周知的,也就是说在一个6+1的RAID组中,对一个数据块的写入或更新将导致额外的5个读操作,1个异或操作和另一个写操作。
3. 我们知道,任何一套存储系统中,存取速度最快的是存储控制器的处理器缓存,其次是控制器缓存,而最容易成为存取性能瓶颈的,则是靠机械臂转动实现数据存取的磁盘。传统的存储系统依然沿用磁盘这种粗颗粒度的管理机制,无法从根本上改善磁盘的性能表现,而我们则急需一种更高效的存储架构来彻底解放数据卷与物理磁盘之间的一一对应关系,希望借以更细化的介质管理机制大幅提升存储系统的性能。
传统的存储分层技术其磁盘介质管理是静态的方式,局限在于将单个物理磁盘作为管理的最小单元。不能从根本上消除RAID、Striping等各种数据管理操作局限于有限个磁盘体的瓶颈。在静态介质管理机制下,按照业界公认的测试方法,各种类型的物理硬盘能处理的IOPS(每秒IO数量)是有限制的,见表1。
所以,在静态磁盘介质管理方式下,如果一个阵列有60块15K rpm的SAS硬盘,那么,它能撑起的最大IOPS为60x180=10800,这个为硬件限制的理论值,如果超过这个值,硬盘的响应可能会变得非常缓慢而不能正常提供业务。
考虑到RAID产生的额外开销,我们假定一个场景,业务的IOPS需求是10000,读Cache命中率是30%,读IOPS为60%,写IOPS为40%,磁盘个数为120,那么在RAID5的情况下,每个磁盘的IOPS为:单块盘的IOPS=[10000×(1-0.3)×0.6+4×(10000x0.4)]/120=(4200+16000)/12=168,这里的10000×(1-0.3)×0.6表示是读的IOPS,比例是0.6,除掉Cache命中,实际只有4200个IOPS落到磁盘体。而4×(10000×0.4)表示写的IOPS,因为每一个写,在RAID5中,实际发生了4个IO,所以写的IOPS为16000个。计算出来单个盘的IOPS为168个,基本达到15k转速SAS磁盘极限。
从上面的分析,我们可以看到这样一个事实,静态磁盘介质管理方式究其本质,依旧是拘泥于物理磁盘的RAID保护机制。应用数据在写入磁盘介质后,数据在后端物理磁盘的分布依然受限于RAID组所涉及的磁盘数量;对于任何一个应用系统,RAID组内包含的磁盘数量决定了该应用系统所能获得的后端磁盘并发读写性能。由此我们可以看到,这种介质管理机制极大地阻碍了存储系统的整体并发性能。
为了最大化地获得后端磁盘的所有并发读写能力,我们急需一种新的存储介质管理机制。借助这种新型的技术,我们希望任何一个部署于存储系统上的应用能够获得后端磁盘所有的并发访问性能,同时又具备跨介质的分层功能从而实现更好的投资回报和用户体验,由此才有了块级并发存储分层技术。
我们先来阐述块级并发存储分层技术概念、原理、特点,然后我们通过实验室实验采集的数据来分析并检验该技术是否具有明显的优势。
块级并发存储分层技术概念及原理
是指在实现存储分层的同时,为克服单个磁盘设备的物理限制,最大限度地提升存储后端磁盘并发性能,同时不影响用户的存储架构视图及应用部署方式。在块级并发架构里,磁盘介质的管理不再是按照传统的以物理磁盘为最小管理单元,我们将整个存储系统中的所有磁盘空间统一规划,按照一定的颗粒度(通常以KB为单位)来进行划分,对于每一个颗粒度单元采用类似传统磁盘管理的机制进行管理、RAID保护和资源调度。
表2 块级并发架构IOPS实测
图3 块级并发架构示意
其原理是在块级并发架构里,我们将每块物理磁盘空间以4~8K为单元进行划分,划分后的单元通过元数据管理算法实现RAID,镜像等一系列数据管理策略。块级并发架构记录并跟踪关于每一个数据块的特定信息,从而提供数据块是如何被使用的等一系列系统管理信息。数据块信息在无系统额外开销的情况下被收集,包括写入时间、所在的磁盘驱动器类型、数据存储类型、RAID级别已及更多信息。所有这些元数据(或称作“描述数据的数据”)确保了存储可以提供更丰富和智能的存储服务实现数据的存储、恢复和管理。通过块级并发数据管理,利用元数据,动态数据块架构可在数据块级别智能地优化数据移动和访问(如图3所示)。
块级并发架构特点
1. 应用数据卷脱离与RAID的映射关系,数据卷中的数据在存储后端分布于所有物理磁盘,数据卷可以获得存储系统中所有物理磁盘的存取性能。
2. RAID保护以划分后的磁盘块单元为最小单位,RAID组脱离与物理磁盘的映射关系,RAID组由相应的磁盘块组成。
3. 磁盘块单元由元数据表述,元数据管理基于非易失性缓存以获得最佳性能。
4. 任何一个磁盘块单元的RAID方式可按需要随时改变,RAID方式的改变记录于元数据。若当前某磁盘数据块为RAID5保护方式,应用系统需要写入或更新该数据块时,存储系统自动将该数据块的RAID保护由RAID5 转为RAID1以避免写惩罚。反之,则自动由RAID1转为RAID5以获得更高的磁盘空间。
块级并发存储分层技术的优势
为了说明这个问题,我们建立了实验环境,对块级并发架构下IOPS进行实测(见表2),将所测的数值(这里限于篇幅,省略了不同磁盘类型下的IOPS对应La-tency测试数值表3),我们抽出其中60块15K SAS磁盘下的IOPS和Latency的测试结果值来作图(见图3),得出的实测结果并分析如下:
在制定测试计划中,考虑到磁盘阵列缓存带来的正面影响,所以采用了Oracle数据库的测试工具Orion产生大量的随机并发IO,以确保每个IO均最终落到物理盘体。通过测得的数据,计算出在块级并发存储分层环境下,单块盘的IOPS值,IOPS = 19918/60≈332个。而传统存储分层技术下15k单块磁盘理论值IOPS仅有180个(实际上前面计算出IOPS极限值最多有168个)。由此可见,[(332-180)/180]×100%≈84%,即在块级并发存储分层环境下单块盘的IOPS的性能至少提升80%。
由以上测试可以看到,传统的存储分层技术解决了海量数据存储系统中热点数据在各种磁盘介质间动态调度问题,从而提升了数据存储效率,降低了采购成本。但从根本上,传统的存储分层技术依然沿用早前的介质管理策略,使得后端磁盘性能不能获得最大程度的并发。块级并发存储分层技术则不仅解决了存储效率问题,同时在根本上消除了后端磁盘的静态管理方式,大幅提升了存储系统的整体性能。
图4 60块15K硬盘情况下的IOPS和Latency测试结果
块级并发存储分层技术是存储技术发展的趋势,诸多厂家在提供类似方案时,通常也会结合用户的实际应用和数据库等环境特性作一定的客户化集成。以下是笔者认为在部署块级并发存储架构项目中需要注意的要点,供参考。
数据一致性
如果不同的数据在不同的存储层级之间存在,数据的改写必然导致数据不一致的问题。在内部分层存储时,可以采用通写策略或者回写策略。而不同的方法也有各自优缺点,这里就不再赘述。但是外部分层存储与内部分层存储有一个最大的不同是,内存储最终数据需要写到内存中,而外分层存储中,则不是必须的。当然也可以设计成这样的实现方案,但这样的话,分层存储的性能优势则必定会受到影响。数据在不同层级之间的连续性可以由一个虚拟层来保证。
命中率
如何设计一套算法或者实现策略来提高数据系统的命中率是分层存储是否能起到其相应作用的关键。这个与CPU的缓存机制完全一样。不过,CPU的缓存机制已经有一套非常成熟的算法设计。而外部分层存储与内部分层存储有其不同的特性,因此,CPU中的缓存机制不能全部照拿过来用。特别是CPU的缓存机制还主要是硬件设计方面的问题。而外部存储层可能还与一些逻辑设计相关,比如文件系统,文件等。从这点上说,外部分层存储的软件设计上比起CPU缓存的设计可能要更复杂。
分层介质的选择
上面也提过,不同层级之间的介质应该是有差别的,否则就失去了分层的意义。一般来说,高速介质应该是小容量、高成本,随着层级的往下走,其成本容量曲线应该呈现如下的形式:
图5 存储成本容量曲线图
即容量越大的单位成本越低,速度越慢,因此应该放到更低的层级中,反之亦然。因此,在存储介质的配置上如何找到一个合适的点,使得成本与效益最优化则是在分层介质选择及策略制定上需要考虑的问题。
数据分层的级别
对于数据的描述有字节级、块级(包括扇区及簇)、文件级及文件系统级。当然不同的级别有不同的应用场合,并不是哪种级别好于哪个级别。对于文件级的分层,对于归档,法规遵从则比较适合。对于文件系统级的则多用于容灾及备份系统中。对于块级则可能用在虚拟化中较为合适。因此需要根据不同的需求制定不同的分层级别。