1.1 Linux和开源存储
计算机系统是图灵机的高效实现,即根据输入数据的规则得到输出数据。现在的计算机系统由CPU、内存、总线、外设(如网络设备、存储设备)等组成,其中,存储是非常重要的一部分。系统的启动需要存储,操作系统在启动的时候需要从存储系统中(无论是本地存储还是远端存储)加载相应的镜像数据;在CPU和内存中进行数据计算的时候,需要把数据进行相应的存储,如放入本地或远端存储系统。
为了更好地说明存储的重要性,先回顾一下经典的存储级别图,如图1-1所示。数据在计算机系统中的存储级别自上而下地划分为4大块:CPU、CPU缓存、易失内存、非易失内存。
图1-1 存储级别
在图1-1中,由上到下表现为数据存储级别由高到低,数据访问速度由快到慢,延迟时间由短到长。CPU的计算速度越来越快,但是也达到了一定的瓶颈;计算机工艺(基于硅晶体)可以达到7nm和10nm的级别,但是再往更低突破也不太理想,于是转向了多核化发展;CPU对应的缓存级别,从L1到L2再到更多级别的缓存,扩大了缓存的大小,能让更多的数据位于缓存中,从而更好地降低了延迟。
易失内存主要是指内存,分为SRAM(Static Random Access Memory)和DRAM (Dynamic Random Access Memory),主要以双内联存储器模块(Dual In-line Memory Module,DIMM)接口为主。当然目前也有支持双内联存储器模块接口的非易失内存,如英特尔的Apache Pass(AEP)。
非易失内存种类繁多,可以基于PCIe、SATA(Serial Advanced Technology Attachment)、SAS(Serial Attached SCSI)、AHCI(Advanced Host Controller Interface)等各种协议。根据介质和工作原理,非易失内存可以分为机械硬盘(Harddisk)、固态硬盘(Sdid State Drive,SSD)及磁带(Tape)。其中,固态硬盘根据颗粒和介质可以分为NAND和3D XPoint等。
总的来说,在整个数据的计算层次中,与存储相关的硬件是非常重要的、不可忽略的一部分。这反过来也影响了存储软件的设计和开发,并提高了开发存储软件的门槛。为此,在很长一段时间内,基于存储的开源软件虽然不少,但是基本以商用收费软件,即闭源软件为主。
1.1.1 为什么需要开源存储
在之前,我们并不需要开源存储软件来构建相应的解决方案。当时闭源的商用存储软件就可以满足用户的需求,只是价格比较昂贵。
1.基于商用/闭源存储软件的时代
在Linux没有流行的时候,并没有太多操作系统可供选择。例如,微软的Windows、Sun的Solaris、运行在IBM大型机上的操作系统,以及流行的UNIX等。基于这样的现实,存储系统大多构建在闭源的操作系统上,自然没有太大的动力去推出开源存储软件。
另外一个客观的事实是,存储软件的第一个版本基本都是闭源的。而开源存储软件出现的原因是某些公司觉得应该把这样的技术公之于众或回馈社会,或者迫于其他类似开源软件的先声夺人。另外形成开源社区也需要时间,10~20年之前,没有太多的开源存储项目,自然谈不上使用开源存储软件来进行实际的部署。另外,还有以下几点原因也在客观上限制了存储系统的发展。
1)存储设备的发展
开源存储软件之前未得到发展的一个主要原因是受限于存储设备。从存储设备的发展历史来看,每GB存储空间的成本一直在降低。直到2000年左右,存储设备的发展仍不太迅速。从用户角度来看,当时的存储设备容量太小、价格太贵、速度太慢,这在很大程度上制约了存储应用的发展。
2)存储的整体需求不高
存储设备的发展制约了存储的需求,反过来,没有需求,存储设备的发展速度也会变慢,这两者既是相互制约,也是相互促进的。例如,在2000年左右,存储需求不太明显,互联网行业虚假繁荣,直至泡沫破裂,当时崛起的一些IT公司从市值很高的神坛跌落。例如,EMC(昌安信)公司的市值曾达到2000多亿美金,但泡沫破裂后,其股票一路下跌,直到2015年被戴尔公司以670亿美金收购,也没有恢复元气。以EMC为例是为了说明在互联网发展初期,其实存储公司的发展前景并不是特别明朗的,尤其在市场整体股价下跌的时候,因为没有大量数据的存储需求,所以可能跌得更厉害。
在那个时代,存储数据主要以结构化数据为主,如数据库、有索引的文件、档案等。对致力于企业级存储的EMC来讲,虽然有很多高端的金融客户等,但是这些客户对存储设备的需求量还是非常有限的。在互联网发展初期,一方面,还没有太多的结构化数据,主要是用于搜索的非结构化数据,如图片等。那些占据大量存储的视频、音频文件在当时并不流行,所以对于存储的需求还是以企业为主的,以支持个人用户为导向的存储系统并没有太大的市场,当然这也与当时网络不发达有关。另一方面,当时各种产生大量存储需求的设备,如个人使用的智能相机,还没有流行起来。
3)开发存储产品的高门槛
评估一个存储系统,一般有以下指标。
· 性能指标:业界有相关的存储性能委员会(Storage Performance Council,SPC)发布相应的测试规范(Benchmark)和测试工作集(Workload)。典型的测试工作集包括SPC-1(主要评估存储系统面向事务性业务的性能)、SPC-2(评估不同业务类型,大规模连续数据访问的存储系统的性能,如大量文件并发性访问、视频点播业务等)、SPC-3(提供应用层的模拟,如存储管理、内容管理、信息生命周期等性能)。
· 可靠性标准:如数据的可用性、完整性、安全性,在不同领域有不同的标准。
· 功能性标准:如是否符合业界定义的规范,不同的国家有不同的标准。想要获得更详细的信息,可以参考主流供应商提供的存储产品进行相关的对照,如EMC、华为、NetApp提供的产品。
· 能耗标准:主要用于评估存储系统在不同负载情况下的功耗,显然在相同负载的情况下,功耗消耗越低越有竞争力。因为这个标准涉及运维的代价,因此,数据中心的运行者对这个指标比较关心。
这些存储系统的评估标准是在不断演化的。总的来说,想要打造一款具有竞争力的存储产品并不是一件容易的事情。作为一个合格的存储提供厂商,即使是一个创业小公司,也是竭尽全力地想要通过一些标准组织委员会提供的性能、可靠性等不同的测试的,从而在交付用户之前,能够及早发现各种问题,并加以修正。如果想做到盈利,公司提供的相应的产品就要有竞争力,如产品性能、性价比、存储安全性等方面的优势,只有这样才能在竞争激烈的市场中占据一席之地。由此可知,开发存储产品的门槛很高。
在互联网还没有蓬勃发展的时候,一些开源存储软件显然不能满足相应的需求。
2.风向的转变
近几年,随着CPU、内存等硬件技术的快速发展,以及互联网的高速发展和数据的爆炸式增长等,传统的商业存储软件已经难以满足人们的应用需求了。为此, Google开发了Google文件系统(Google File System,GFS),以满足搜索引擎的后端存储(Backend Storage)需求;Amazon推出了EBS(Elastic BlockStore),以满足提供EC2(Elastic Computing Cloud)服务的虚拟机的持久化存储需求。为了满足人们对开源分布式存储的需求,学术界诞生的Ceph在社区管理的缓慢推动下,形成了一套可实际部署的开源存储软件,被广泛部署在各个领域。
从商用/闭源存储系统到开源的存储系统,这个变化是令人欣喜的,仔细分析其中的原因,主要有以下几点。
1)商用存储软件功能的局限性
在数据爆发式增长的时候,一些存储系统,如单机,已经不能满足存储需求了。当数据的容量从TB到PB甚至继续增长的时候,这些商用/闭源存储系统由于可扩展性的缺失,已经不能适用于某些数据持续增长的应用场景。我们知道,扩容无非是两种形式,即Scale-up(针对单机)和Scale-out(针对分布式存储)。因此,扩容成了一件棘手的事情。在开始的时候,单机扩容还可以解决问题,但是其容量终究是有上限的。
2)商用存储系统的价格昂贵
有些企业销售的高端存储系统价格非常昂贵,一台机器可能卖到几十万美元甚至几百万美元。这些系统虽然在性能评估等各个方面非常有优势,但是昂贵的价格让很多人望而却步,只有一些大公司,如银行、证券公司,才可能配备这样的系统。在市场和行业没有对比的情况下,售卖这些存储系统带来的盈利是非常可观的。
另外,企业在给客户售卖闭源存储系统的时候,也会搭配相应的售后服务。从系统稳定性和良好的售后服务来看,这些存储系统可以说是无可挑剔的,但生产成本始终是不可忽略的一个因素。在开源存储不断崛起的时代,这些存储系统慢慢转变成云存储服务,这对这些昂贵的存储系统的销售将是一个挑战。虽然某些特殊领域对存储系统还有一些需求,但是不可否认的是,这个需求量在不断下滑,市场在进一步萎缩。
3)开源生态圈的蓬勃发展
开源软件越来越流行,生态圈发展越来越好,主要是因为互联网企业在广泛使用开源软件,包括开源存储软件,并且向社区提交补丁,以改善代码质量,这样就形成了一个良性循环。互联网企业对于开源软件的使用或验证(所谓的Dogfood测试)极大地提高了开源软件的影响力,让用户意识到由社区维护的开源软件一样可以作为商用软件来使用。
4)互联网企业的身体力行
很多互联网企业最初在运营的时候并没有把自己定位为高科技公司。Amazon最初是一家电子商务公司,它很大一部分收入来自书籍的售卖,后来慢慢转型为一家提供云计算、云存储等服务的高科技公司,虽然电子商务仍是其业务的一部分,但是也许已经不再是支持其高速发展、股价一路上涨的重要部分了。
存储方面,Amazon一开始搭载了存储巨头,如戴尔、EMC、IBM等公司的存储产品或软件,目前可能依然在使用,但已经不是其后端存储业务的核心了。为了适应自身发展的需求,Amazon在存储方面做了自己的开发工作,例如,Amazon的基础架构即服务(Infrastructure as a Service,IaaS)最早采用了Xen虚拟化的架构,为虚拟机的后端存储开发了EBS和S3(Simple Storage Store);针对电子商务业务, Amazon开发了基于键值的NoSQL数据库——Dynamo,满足了自身业务的需求。
1.1.2 Linux开源存储技术原理和解决方案
前面提到开源存储软件已经成为趋势,在Linux下构建开源存储的服务也顺理成章地成了大势所趋。最近,Linux在服务器端蓬勃发展,代替Windows、FreeBSD等操作系统成为了业界的主流,因此,在Linux下开发开源存储软件及进行相关的运维已经成为一件非常平常的事情。
在讨论Linux开源存储软件之前,我们先来回顾一下在Linux上部署的比较流行的网站服务。该网站服务的关键组件称为LAMP,其中,L为Linux操作系统;A为Apache网页服务器;M为MariaDB或MySQL数据库系统;P为PHP、Perl或Python用于网页后台编程的脚本语言。这些软件并不是一开始就是网站服务的组合的,而因为是开源软件,并且比较廉价和普遍,自然而然地就有人把这些软件组合起来,并提出了将这个组合用于网站服务可行的解决方案,接着就成了流行的组合方案,并被默认是安装Linux系统的标准套件。随着时代的变化,LAMP演变成了LNMP,其中N为nginx。
LNMP流行的原因有两点:一是软件廉价或容易获取,如打包在常见的Linux系统发行版本中,如Fedora、Ubuntu、CentOS、Redhat;二是软件的高效性。这也是为什么那些开源软件都要按照各个Linux发行版做成相应的包,只要打包在这些发行版中,就能被广泛接受。所以对应Linux的开源存储软件,需要满足如下要求。
1)软件集成在Linux发行版本中
如果该软件只有开源版本,并没有集成在主流的Linux发行版本中,那么就会对软件的易用性带来很大挑战。如果只能下载源代码安装,对于软件运维人员来讲,这是不太友好的。因为很多软件对于其他软件或系统有一定的依赖性,如果直接从源码安装软件,那么这个版本可能未必和当前的操作系统(包括内核版本)及其他依赖软件相匹配,因此在运行的时候,可能会发生一些未知的问题。所以,一个成熟的开源软件需要和主流的Linux发行版本集成,确保每当发布一个新的发行版本,都会有最佳适配的版本。
2)软件有活跃的社区
存储软件服务的运营商或企业在采用开源软件的时候,都希望该软件有活跃的社区,原因主要有以下几个:①该软件持续开发和迭代,有活跃的开发者工作在这个软件上;②该软件对于Linux系统的支持友好,要不断更新相关代码以适配Linux系统;③软件的开发要遵循相应的标准,对使用开源软件的用户是福音。
现在主流的开源分布式系统解决方案是Ceph,其原因是Ceph社区非常活跃。而其他的开源解决方案,如Sheepdog则基本上处于停滞状态,因用户少而导致社区不活跃,目前主要由日本的NTT公司在维护该社区,很难看到一个良好发展的前景。
3)软件的特性满足应用的需求
很多开源软件都有很大的局限性,不能很好地满足应用的需求。例如,在大请求场景下,不能满足延时需求;软件只支持单机版本,支持的存储容量有限制;软件支持分布式版本,但是扩容有限制。要满足这些需求,就需要存储软件的用户或运维人员充分了解软件的特性和配置,并且进行相关的压力测试,如测试这些配置是否有效,面对一些给出的极限情况的值是否能达到使用手册的标准。
如果应用的需求超过了该软件的支持范围,那么只有两种选择:一是放弃该软件,寻求新的软件;二是组织相关的研发人员,改造已有的软件,或者提交需求到软件开发社区寻求相应的帮助。对于比较流行的软件,用户一般都会选择第二种,该软件就会根据用户的反馈及提交的补丁被不断改进,进入良性循环。