计算机系统中最快的存储方式是传统上主要用作内存的RAM。由于硬盘的访问性能多年来有恶化的趋势,而RAM的成本不断降低,近年来,有很多研究者都在探索如何用内存取代硬盘。
早在1980年代,David DeWitt等和Garcia-Molina等就发表过主存数据库方面的论文。Steven Robbins的文章指出,图灵奖得主Jim Gray更明确提出了“内存将成为硬盘,硬盘将成为磁带”的说法(出自2006年Tim Bray一篇讨论网格计算的博客,2003年的访谈中他已经表达了同样的意思)。IMDG(内存数据网格)曾经是一种非常流行的概念。在实践中,Google和Yahoo等搜索引擎已经完全将索引放在DRAM中,Google甚至把互联网中所有网页的快照都保存在内存里。memcached和BigTable也是利用内存作为重要存储介质的实际案例。2008年Dare Obsanjo在分析Twitter的架构时也看到,类似的新型应用的最大负担是硬盘I/O,因此会倾向于将随机操作都放到RAM里,只将顺序操作留给硬盘。
Tcl/Tk的创始人、美国工程院院士、ACM Fellow John Ousterhout 2008年离开工业界到斯坦福大学任教,在Facebook、Mellanox、NEC、NetApp、SAP的支持下,领导一个团队从事RAMCloud——内存云方面的研究,更是将这一趋势推到了极致。顾名思义,RAMCloud就是这样一种新型数据中心存储系统,它是由成千上万台普通服务器的主存所组成的大规模系统,任何时候、所有信息都存储在这些快速的DRAM(动态随机访问存储器,即俗称的内存)中,内存取代了传统系统中的硬盘,而硬盘只作为备份使用。
2009年底Ousterhout团队曾经在SIGOPS Operating Systems Review发表了论文“The Case for RAMCloud”,引起了广泛关注。最新出版的Communications of ACM 2011年8月刊发表了Ousterhout与他的团队合作撰写的同名论文,更加全面和完整地阐述了内存云的理论与实践。
文章指出,在过去四十年,计算机系统的主要存储方式是硬盘,文件系统和关系型数据库都是针对硬盘发展起来的。但是,虽然硬盘的容量提高很快(自1980年代中期以来提高超过1000倍),但性能相比之下却一直难如人意,传输速率仅提高50倍,延迟更是只提高了2倍。如果按容量/带宽(Jim Gray's Rule)来衡量,硬盘的访问延迟实际上急剧恶化了,如下图(本文中图均来自CACM论文)。
与此同时,互联网的迅猛发展,使软件的架构也发生了巨大变化。如下图所示,与传统应用数据和计算、应用逻辑都在一台计算机上不同,Web应用架构往往采用计算与存储分离的方式,在数据中心中有专门负责应用的业务逻辑、前端呈现的应用服务器,另外还有专门的存储服务器。其中应用服务器是无状态的,只存储当前浏览器请求的状态。这种分离和无状态的方式使系统能够很好地扩展到成百上千台服务器,满足动辄数百万用户的访问需求。但是,这种架构也使数据访问的延迟问题加剧了——大型网站如Facebook或Amazon为了生成一个HTML页面,需要发出一两百次内部请求,访问多次硬盘。当服务器增加了4-5个数量级后,应用程序的复杂性也大大增加,软件开发难度和工作量都激增。
于是,硬盘访问速度成为目前计算机系统发展的主要瓶颈。
为了解决数据访问延迟问题,研发人员和研究者们提出了各种解决方案:用memcached等缓存(Cache),数据库的分区,更多地用闪存替代硬盘,SSD,采用MapReduce和Hadoop等异步作业调度,NoSQL,分布式文件系统等等。
而Ousterhout团队则提出了一种新的解决方案——RAMCloud(内存云),通过大规模普通服务器的内存集群,将在线数据的主要存储中心从硬盘迁移到DRAM上,而硬盘只作为备份/归档之用。这种内存云可以同时实现大规模(100~1000 TB)和低延迟(同一数据中心应用程序访问少量内存云数据只需5~10ms,比目前系统快100~1000倍)。
RAMCloud概述
论文中指出,RAMCloud最适合的场景是已经将服务器分为应用服务器(主要实现生成网页和执行业务规则等应用逻辑)和存储服务器(为应用服务器提供长期共享存储)的数据中心。这些数据中心一般支持许多应用,有的很小,只使用一台服务器的一部分能力,有的很大,要用到数千台专用应用和存储服务器。
RAMCloud与其他存储系统有两点不同:
所有信息任何时候都保存在DRAM中,不是memcached那样的缓存,也不使用闪存那样的I/O设备; 必须能够自动伸缩到数千台存储服务器,而存储服务器的数量对于应用而言是透明的,在开发人员看来,好像就是一个存储系统。
而且,内存云中保存的信息必须和硬盘一样持久,单个存储服务器的故障不能造成数据丢失和哪怕几秒钟的服务不可用。
RAMCloud将所有数据存放在DRAM中,性能可以达到比目前最高性能的硬盘存储系统还要高100~1000倍。在访问延迟方面,RAMCloud方案中运行在应用服务器中的一个进程从同一数据中心的存储服务器中通过网络读取数百字节数据只需5~10μs,而目前实际系统一般要花费0.5~10ms,具体取决于数据是在服务器内存缓存中,还是硬盘中。而且,一台多核存储服务器每秒可以服务至少100万次小读取请求。而硬盘系统中同样的机器每秒只能服务1000~10000次请求。
RAMCloud的实用性
全面采用内存作为主存储介质,一个常见的问题当然是成本。论文中对此作出了说明。下表中列出了一个RAMCloud配置,2000台服务器,每台服务器配置24GB的DRAM,整个内存云的容量可以达到48TB,按2010年的价格计算,平均每GB成本是65美元。通过增加服务器数量,总容量可以高达数百TB。而到2020年,随着DRAM技术的不断完善,价格不断降低,内存云容量可能达到1~10PB,而每GB成本仅需6美元。
RAMCloud已经可以用于许多实际应用。下表估计了一个大型的网络零售商和大型机票订票系统如果采用RAMCloud的成本,在几万到几十万美元之间。而截止2009年8月,Facebook所有非图像数据大约有260TB,这可能是目前RAMCloud实际应用的上限。内存云目前还无法用来存储视频、照片、歌曲等数据,但情况在几年之内有望很快改变。
与其他方案的比较
目前为了解决大规模互联网应用系统的数据访问延迟瓶颈,已经提出了很多方案,但这些方案各有各的问题。论文中对此进行了概述。
1.MapReduce
MapReduce将应用组织成多个并行步骤,数据分成多个大块顺序读取,有效地解决了许多大规模问题,因此近年来变得非常流行。但是MapReduce难以应用于必须随机访问数据的应用。事实上,Google除MapReduce之外还有一种专门用于图处理的架构,称为Pregel。另外透露一下,Pregel项目的创始人G.Malewicz将出席今年的Hadoop in China大会。
而RAMCloud由于同时具备可伸缩性和低延迟,基本上没有这样的局限。相反,大规模集体协作型的应用、统计语言翻译这样需要遍历图模型的应用很可能是内存云的最佳用武之地。
2.NoSQL
NoSQL的兴起主要是因为互联网站达到了前所未有的规模,用常规关系型数据库无法应对。但各种NoSQL方案总体上都无法达到关系型数据库的那种通用性,而且,它们仍然受硬盘存储性能的限制。
RAMCloud的目的是提供可伸缩性远远超过已有方案的统一存储系统,大大简化开发,不仅适于新应用,也可以为已有应用进行扩展,甚至无需重组应用代码。
3.Caching
在理想情况下,Caching(缓存)可以为系统带来DRAM级的读写性能。但是,缓存的问题在于,未命中的数据仍然保存在硬盘上,因此很小的失效率也会带来很大的性能损失。而且,越来越多应用生成的数据之间有更复杂的联系(比如Facebook、微博中朋友或者关注关系),很难局部化,造成Cache越来越大。以Facebook为例,2009年8月时近25%的所有在线数据保存在memcached服务器中,如果加上数据库服务器中的缓存,实际上已经有近75%的数据在内存中。
显然,RAMCloud与缓存相比只需要增加少量成本(Facebook的例子里增加四分之一内存),却能避免访问模式和局部性问题。
4. 闪存
RAMCloud其实可以用闪存搭建,成本和能耗更低。但延迟和吞吐量上与DRAM仍有差距。即使是成本方面,高查询率和小数据集的情况下,DRAM是成本最低的;低查询率和大数据集的情况下,硬盘成本最低;而闪存处于中间。
未来闪存在延迟上可能赶上DRAM,相变内存等新技术也可能比DRAM更有优势,但现在基于DRAM研发的好处是没有不确定性,现有方案(复制机制、群集管理和延迟的系统方法)对未来其他技术仍然可以沿用。
RAMCloud面临的挑战
低延迟RPC:大多数目前的网络设计都是牺牲延迟保吞吐量。虽然已经有Infiniband、Myrinet、Arista 7100S等高速网络设备,但普通数据中心还是基于以太网/TCP/IP的,要达到5~10μs延迟(Ousterhout最初设想RPC能达到1μs,看来有相当难度),必须解决软硬件的诸多问题。
持久性和可用性:DRAM属于易失性存储,要达到至少和硬盘相当的持久性和可用性当然至关重要。一台服务器的故障、数据中心的系统性断电等都不能导致数据丢失和服务中断。容易想到的解决方法是在不同服务器的DRAM里保存多个副本,但成本太高,而且数据中心全部断电的话,数据仍然会丢失。备份在服务器上如何呢?但是写操作时如果要同步更新硬盘,延迟就太大,丧失了内存云的优势。为此,Ousterhout等提出了“缓冲日志”(buffered logging)的思路。其原理如下图所示。
群集管理:但数据表很大的时候,RAMCloud软件必须能够透明地在多个服务器上进行自动分区,且不影响运行中的应用。为保证系统的吞吐量,尽量减少复制,只在维护数据持久性和可用性必需时才进行复制。
多租户:为支持云计算的多租户模式,内存云需要支持各种规模的应用,并提供相应的计费方式。而且,需要为不同用户提供访问控制和安全机制。另外,高负荷的应用不能影响其他应用的性能。
数据模型:关系型数据库与生俱来的开销较大,与内存云的低延迟不兼容。内存云可能需要具有ACID特性的K-V存储。
并发、事务与一致性:内存云应该提供何种程度的事务性,这是一个问题。但内存云的高速更新,可以明显缓解事务冲突,而且能在较大规模提供原子性和一致性。
RAMCloud的缺点
RAMCloud最明显的缺陷,是按bit计算成本和能耗都比较高,比硬盘系统要差50~100倍,比闪存系统要差5~10倍。而且所占数据中心的面积也更大。如果你的系统成本要求高,而且对访问性能要求不高,那么RAMCloud不是理想方案。但是,按操作次数计算的话,RAMCloud的成本和能耗却要远远好于其他类型。对于高吞吐量的系统,RAMCloud不仅能提供高性能,还能提供高能效。
RAMCloud的另一个缺点,是只能在一个数据中心中提供高性能。对于跨多数据中心的应用,更新延迟是由数据中心之间的距离决定的,因此RAMCloud在写操作上没有优势,但对跨数据中心的读操作仍然能提供更低的延迟。
RAMCloud的潜在影响
显然,内存云如果能够得到大量实际运用,将对计算机界产生广泛影响。
首先,将催生新的数据密集型应用,比如涉及大规模图算法的应用。解决了目前最影响开发人员生产力的许多可伸缩性问题,从而简化了大型Web应用的开发。1 000~10 000台存储服务器组成的RAMCloud能够支持成千上万的应用服务器以109–1010次请求/秒的总速度访问1014~1015B (100TB~1PB)的数据集。而且内存云的存储模型是平的,任何对象无论放在哪里都可以高速访问。 其次,提供云计算和其他数据中心应用所需的可伸缩存储基础,将加速云计算的采纳进程。 第三,内存云要求极低的延迟,将对原来主要考虑带宽的网络基础架构包括协议、设备都产生显著影响。 第四,可能影响数据中心的设计与管理。运维经理要更多地从低延迟的角度思考问题,内存云将推动新型存储设备的采用。 最后,会激发服务器架构新方法涌现,包括新的电源管理技术(电池备份、超级电容),体现速度、内存容量、能耗新平衡的服务器设计,服务器集群的自动管理等。
对内存云的评论
基于内存的各种架构其实很多,Highscability的文章曾经提到思科的UCS、Oracle的Coherence、IBM的WebSphere eXtreme Scale、Terracota、GigaSpace等等,最近可能还要加上SAP宣传非常多的内存计算。但是像RAMCloud这样完全要将硬盘降格为备份设备的激进项目,是否会得到实际应用乃至成为主流,持怀疑态度的大有人在。
Hacker News上讨论中有人直言这是纯粹的忽悠。Infoq今年1月的一篇文章中收集了两个反对的声音。其中,在Red Hat负责云文件系统开发的Jeff Darcy写了一篇批评IMDG的博客,他认为所谓基于内存的架构与目前已经成熟的缓存系统本质其实是一回事,前者在容量上肯定还是会遇到限制,这时仍然需要依赖硬盘,而且采用的是事后补救的方式,那何必不采用已经经过实践检验、算法非常成熟的缓存系统呢?纽约大学布法罗分校的副教授Murat Demirbas则指出,论文中对成本的分析过于乐观。由于硬盘的价格下降更快,内存的成本劣势长远看仍然非常明显——当硬盘每GB成本只需要0.07美元的时候,谁会用60美元/G的内存呢?
Amazon的James Hamilton2009年底第二次听Ousterhout的相关讲座,在博客中做了详细笔记,称赞讲座“发人深省”,值得再听一遍。不过信奉“没有放之四海而皆准”的他也对Ousterhout预言关系型数据库将消失、未来数据全部将在内存中的说法不敢苟同。
曾经任职Amazon和微软的资深架构师Greg Linden评论说,内存数据库的概念并不新,但此前他认为仅适合一些特殊场合,没想到Ousterhout会预言内存云未来成为主流。
事实上,RAMCloud最初的论文版本发表到本月,已有一年多的时间,Ousterhout的主要观点并无变化,相反,RAMCloud项目的进展很快。值得注意的是,这篇CACM论文的审稿人里有Google MapReduce等项目的主要开发者Jeff Dean,有微软研究院的资深研究院James Larus,Veritas创始人Jeff Rothschild,计算机体系结构权威David Patterson等。在RAMCloud项目网站里还能看到Jeff Dean等人对项目所作的设计评审。
回顾历史,电力系统在大联网之后,原来各个工厂和居民区的自备电厂、自有小发电机等渐渐消失,全社会除了紧急备用电源之外,基本全部使用大型电网的供电。而电网公司也由此发展了之前不可想象的一系列高度专门化的大规模发电和输电技术。我们预测,随着云计算进入主流,计算、网络和存储由少数云计算服务商提供,也会发展出一系列与今天非常不同的高度专门化的技术。今天Google、Facebook等大型互联网公司的特殊技术可以说这种趋势的初露端倪。所以,一切皆有可能,不能用以前线性的观点来看,内存云也是如此。