第1章 存储系统设计原理
自从5000年以前,埃及人把象形文字记录在石牌上面开始,人类可以通过记录有文字的载体把思想从一个人告诉给另一个人,从一代人传递给下一代人。无数的壁画、石碑、甲骨、竹简等记录了无数的故事和传说,人类的文明通过这种方式,经过无数人知识和经验的积累和世代传承逐渐发展壮大。纸张的出现、印刷技术的发明使得承载各种知识的文明之火熊熊燃烧并迅猛传播开去。
60多年前,计算机系统的出现,人类纪录知识和信息的方式摆脱了纸张的约束,以数字方式存放在计算机系统之中,这一过程并得到不断的深化和发展,直到有一天人类突然发现通过网络互联的计算机系统取代了充满藏书的图书馆成为知识和信息存储和传播的主体;无数电子设备(数字摄像机、数字照相机等)可以无时无刻纪录人类身边的每一个变化取代了书斋中的作者以优雅的文字辛勤地纪录身边的历史;敲几下键盘、点几下鼠标获取所需的信息取代了辛苦的大量翻阅。计算机存储系统成为无数知识和信息的最主要载体,同时也是社会正常运转不可或缺的重要保证。
1.1 应用需求
新的信息和网络时代对现代存储的要求使得存储技术正经历着革命性的发展。依托于计算机技术发展的信息革命就是不断把各种人类活动过程数字化,并通过各种不同的计算机系统对于这些数字化信息进行存储、传输和处理。
60多年前,第一代计算机ENIAC每秒5000次加法或400次乘法操作的处理速度仅需要100字磁芯存储容量;而当前一张3600*2700分辨率的数码照片压缩后的大小大约为4MB,一部1920*1080(HDTV)画质电影需要大约20GB的存储容量和3MB/s的I/O持续数据传输率,与此同时许多应用程序对于I/O的响应时间也有了严格的要求,例如许多SLA(Server-Level Agreement)应用(例如银行和网站)对于I/O请求的响应时间有了严格的规定。正是这种不断增长的应用需求推动着存储系统从小到大,从慢到快,从简单到复杂,并对存储系统的健壮性、可用性、安全性和管理性提出了更高的要求。
一个有意思的现象是整体而言数字化发展过程大体上正比于当前的数字化程度,从这个结论很容易推导出整体数字化过程具有指数增长的特征。这产生一个值得探究的问题:这种发展速度背后的推动力是什么?一个直接的原因归功于科学技术的发展,而任何一个技术的发展速度又依赖于当前技术的发展水平和对于新技术的期望程度(事实上就是开发这种新技术的投入,包括人力在内的各种投入力度,这也反映对这种新技术的需求)。显然存储系统的发展符合上述观察,大容量高性能的存储系统满足了当前应用的要求同时也导致更多对于存储系统有更高要求的应用产生。一个例子就是google搜索平台推进了大规模集群存储的发展,而大规模集群存储系统的发展促进了云存储的需求。
1.1.1 数据量增长
存储系统革命性变化首先表现为其容量的急剧膨胀。根据权威机构国际数据公司(International Data Corp.,IDC)最新的研究报告《数字宇宙膨胀:到2010年全球信息
增长预测》中统计的数据,2006年全球每年制造、复制出的数字信息量共计1610亿GB,而人类开始记录历史以来,到2006年为止全部的书本文字加起来大约50PB,显然当年信息产生量大约是图书信息总量的300万倍。如果将书籍排列起来,总长度为地球到太阳距离(约1.5亿公里)的12倍。IDC报告同时显示,至2010年,这个数字将猛增到6倍,达9880亿GB,年复合增长率为57%。当前,AT&T的网络每天流动16PB的数据,Goolge 每天处理20PB的数据,Facebook每天存储1PB的照片,Opera浏览器每个月处理多于1PB的数据,而BBC的iPlayer每个月有大约7PB的数据流,Youtube存储了31PB的流媒体数据。Cisco估计到2012年每个月网络上视频流大约为5Exabytes(5000PB)。
摩尔定律断言CPU的处理速度每18个月增加一倍,同样通过若干年的观察发现网络带宽和存储容量增长也都具有指数增长的规律。图灵奖获得者Jim Gray提出了一个新的经验定律:网络环境下每18个月产生的数据量等于有史以来数据量之和。至少到目前为止,数据量的增长基本满足这个规律。
在数字化和网络互联环境中,数据信息膨胀的具体表现为: 1. 比特流的无限蔓延,电子数据无处不在; 2. 数据就绪时间的延展:过去的信息系统基本上都有后台作业时间,而今天的信息系
统却要求网络数据每周7×24小时时刻处于就绪状态; 3. 数据存储的结构产生了巨大的变化:在信息孤岛时代,存储设备基本上是与封闭的、
特定的计算机系统对应,而在网络互联时代,数据是跨系统、跨部门、甚至是面向全世界用户的。除去安全性要求,数据的存取不再受到时间或者空间约束;
4. 数据类型的多样化:基于文本或者固定结构的数据曾经是计算机处理的主要对象,
而当前数据类型极其丰富,特别是具有不同结构的多媒体数据层出不穷。 设计新型存储系统以满足海量数据存取的要求成为一种必然的要求。当然海量数据本身就是一个具有相对性的概念,20年前1GB就是海量数据,10年前1TB也可以称得上海量数据,而当前1PB的系统也并不少见。 虽然在这期间作为主流存储介质的磁盘系统的容量也不断的增加,但一般海量存储系统的容量大约是主流单个磁盘容量的1000倍以上,这必须通过系统的方法构建海量存储系统以满足数据容量的要求。因此在本书中讨论的海量存储系统并不限定于一个绝对的容量,而是重点讨论通过特定的系统结构增加整体的存储容量和性能。
1.1.2 数据的价值
与数据量增长相适应的是数据已成为人类最宝贵的财富之一。人们在日常生活和工作中越来越依赖于信息技术,越来越多的重要数据被存储在计算机系统中,这在很大程度上促进了信息和数据管理的自动化,提高了工作效率。对于个人来说,最典型的数据可能是数日撰写的文稿,也可能是数月辛苦下载的多款游戏和数百集的珍藏电视剧,还可能是数年积累的珍贵的摄影照片或家庭摄像作品。对于公司和企业用户,信息系统的使用提高了企业事务处理和业务运行的效率,用户需求可以得到方便快捷的响应。尤其在金融、通讯、交通等行业中,信息系统中保存的可能是非常重要的商业机密,也可能是大量的设计资料和财务数据,还可能是集团公司庞大的人力资源数据库等。因此,企业对信息系统的依赖性已经到了关系企业存亡的程度。
数据的价值如此宝贵,一旦数据发生丢失或损坏,会给个人和企业都带来不可估量的损失。对于个人用户,数据丢失将会给个人带来精神和物质的双重损失;对于企业和公司,一旦信息系统发生故障导致数据丢失并且不能得到及时恢复,其造成的损失可能是毁灭性的。根据IDC调查,美国在2000年以前的10年间发生过数据灾难的公司中,55%当即倒闭,29%在两年内倒闭,生存下来的仅占16%。在类似的大量调查报告中也表明,大约40%左右的企
业在遭遇数据灾难之后没有恢复运营,由于缺少远程备份以及有效的数据恢复技术,剩下的也有1/3在两年内破产。每500个数据中心中,就有1个每年要经历一次灾难。
数据恢复的及时性成为企业兴衰成败的关键所在。一项来自美国明尼苏达大学的研究报告显示,在灾害之后,如果无法在14 天内恢复资讯作业,有75%的公司业务会完全停顿,43%再也无法重新开业,因而有20%的企业在两年之内被迫宣告破产。另一方面,对于灾害所造成的冲击分析显示,各行业最长可忍受的信息系统停机时间分别为:金融业2天、销售业3.3天、制造业4.9天、保险业5.6天。平均来看,一般行业可忍受的信息系统停机时间为4.8天。
人们对于数据价值的日益重视也极大地推动着存储系统发展,大量的提升存储系统安全和可靠的技术不断产生并应用于现实系统之中。
1.2 计算机存储系统概述
应用推进了存储系统的发展,这使得我们有必要对计算机存储系统的内涵和外延进行全面的分析,进而为设计新型存储系统提供更加清晰的思路。
1.2.1 计算机存储系统
现代计算机以图灵机为基本计算模型,以冯.偌依曼的“存储程序式计算机”为基本实现模型。其对于数据处理依赖于数据存取的过程,表现在两个方面,首先数据计算部件和数据存储是分开的,只有在需要时处理器才按照指令要求把所需的数据从存储设备读入处理器内部寄存器进行处理,在运算完成后把无需立即使用的数据写回存储设备进行保存;另一方面,所有的程序也是以数据的形式存放在存储器上,在执行时把每条指令依次读到处理器执行。
计算机存储系统是用来保存数据,并能够按照用户请求提供相应数据的部件、设备和计算机系统。事实上存储设备在本质上也是一种计算机系统,例如内存条本身也具有计算部件和寄存器。
在计算机系统中存储系统具有层次性的结构,存储系统根据和CPU的距离可分为多个层次,每层存储器的数据存取时间、数据传输带宽和容量是不同的。第0层一般是指处理器内部的寄存器组和一级、二级cache,第一层是指主板上的cache和随机存储器,这两层构成第一级存储,也被习惯称为主存储器。CPU可以通过指令直接访问主存储器中的数据。第二层是外存储器,相对于主存储器,二级存储系统不能直接被CPU访问,必须通过输入/输出(I/O,Input/Output)通道进行存取并且提供大容量和非遗失的数据存储能力,典型的二级存储设备就是磁盘。第三级存储往往通过mount和dismount操作连接到计算机系统中,它们具有离线存储的特征,典型第三级存储设备是磁带库。
广义的存储设备包括CPU中的寄存器、多级Cache、内存和外部存储系统。前者也称为内存系统(Memory System),而后者称为存储系统(Storage System)。狭义的存储系统通常就是仅仅指外部存储系统。在本书中如果没有特别说明,存储系统就指外部存储系统。相对于内存系统,存储系统必须提供大容量和非遗失的数据存储能力,非遗失性使得存储系统在掉电或者断连主机的情况下能够正确的保存数据。
存储网络的出现,使得存储的层次更加复杂,一个远地存储系统可以为主机提供存储服务,极大地扩充主机可以使用的存储空间,但同时引入了存储空间管理的复杂性。因为每个存储设备总是要提供相应的存储空间供系统存取数据,必须把这些独立的、基础的物理存储空间构成统一使用的逻辑存储空间,这也是存储虚拟化所做的工作,但随着数据存储系统中
存储设备和存储层次的增加,这种统一过程的复杂度和难度也相应地增加。
以二进制形式存在的比特数据是计算机系统处理的基本对象,文字、数字、图像、声音和其他各种形式的信息被转化为比特。计算机本质上就是对数据的存储和运算。为了使得计算机能够方便得到数据的存储地址,存储设备必须能够提供数字地址空间,使得处理器通过计算地址读取所需数据或者存放结果数据到相应的存储位置。也就是存储器中的地址信息也是以数字的形式编址的。另一方面使用以数字标识的逻辑地址空间可以有效屏蔽底层存储设备的差异,例如磁盘和光盘在物理结构和存储原理上有很大的不同,但都能够提供寻址空间供计算机存取数据。也就是地址信息作为一种数据和其他的数据是同构的,计算机可以统一处理,这就为间接寻址提供了可能。其中线性编址是最简单的存储空间组织方式,也是计算机最容易理解和处理的。作为主要的存储设备,内存和磁盘都是通过提供线性的存储空间供计算机进行数据存储的。
间接寻址可以产生层次性存储结构。寻址方式可以通过执行特定的程序产生更多变化,文件系统本质上也完成了寻址功能。在现代计算机层次性存储结构中,各层的存储容量有很大的不同。Cache以KB为单位,内存以MB为单位,而磁盘等存储设备是以GB为单位,海量存储系统是以TB为单位。在内存中存取数据的最小单位是机器位长,而磁盘中存取数据的最小单位是数据块,都是线性编址。磁盘等块设备是以LBA的形式提供线性地址的,网络存储系统一般提供数据块和文件两种操作接口。
网络存储系统出现和发展以前,存储系统主要为单个计算机系统提供存放数据的功能,由于存取过程的指令通过CPU发出,因此存储子系统往往依附于CPU和内存子系统为核心的主机系统,提供低速、大容量(相对于内存系统而言)和非遗失的基本存储功能,其数据整个存取过程基本上由主机的操作系统控制,这种存储系统称之为DAS结构(Direct-Attached Storage)。事实上,在这种结构中存储系统数据管理和组织功能由本机操作系统实现。在使用存储系统方面也分为两种方式,一种是存储子系统作为层次内存结构的第三级载体,实现和内存交换页的虚拟内存器功能,页的大小是固定的,虚拟内存模块通过在磁盘上开辟一段连续空间保存置换出内存的页;另一种方式就是通过文件系统管理和存取磁盘系统上的数据,其基本方式是通过文件目录树的方式组织数据,而文件通过相应的文件分配表记录数据在磁盘上的物理存放。
数据量的大幅增长对于存储系统设计带来新的挑战,第一,需要更多的存储设备存放不断增加的数据;第二需要在多个用户之间共享数据,以提高存储系统的利用率;第三,海量数据管理的复杂性必须占用相应服务器的大部分处理能力,这三方面的需求推动独立于单个主机的存储系统的出现。在充分吸收网络技术的基础上,具有大容量、可共享和可扩展的网络存储系统应运而生。这种存储系统具有高性能的处理部件、高速的内外部传输部件和大容量、可扩展的存储能力,事实上它已经成为提供大容量数据存储服务的独立计算机系统。
存储系统虽然在过去几十年内无论在功能还是在规模方面都有了极大的发展,计算机存储系统最为基本的功能依然是保存数据,并提供存取数据的操作集。存储系统通过存储介质存放数据,每种存储介质有其自身的物理存储机理,例如磁盘通过磁记录方式保持二进制数据,并能通过磁头的读写过程实现数据在物理介质的存取。作为存储系统的设计者往往并不需要了解物理存储过程的全部细节,例如磁介质中每个磁簇的磁场变化的具体物理过程。但必须知道实际存储过程的一些宏观特征和操作特征,包括容量、数据布局、性能和可靠性等,例如在磁盘驱动器中,数据是如何按照磁道和扇区分布,磁头的寻找磁道和定位扇区过程及其相应的时间开销。因为这些存取特性直接决定了存储系统的性能和可靠性等设计参数。
另一方面存储系统必须提供一系列存取操作实现对于存储系统中数据的访问,存取操作包括访问接口及其相应的存取操作集。访问接口也提供了用户对于存储系统访问的操作语义集,例如很多块存储设备采用SCSI的访问接口,这种接口提供了以固定大小块为单位的线