很多人觉得云计算应该是个具体的事物,所以初听到云计算时,总会先问一句:“什么是云计算”?
什么是云计算?问的人轻松,回答的人却很费力,仿佛描绘一种味觉,感觉强烈,却不知如何抓住要领呈给面前的人看个仔细。倘若尽心给出一种解释,或画出一张架构图,听众可能还是一脸茫然,回答的人多半会急得皱眉跳脚,也有人会撂下一句:“你记得是IaaS、PaaS和SaaS即可”。
话虽好说,理却难明。即使听懂了解释,还是有许多人会不知道“云计算”缘何而来,用于何处。
“云计算”一词最早被大范围的传播应该是在2006年。2006年8月,在圣何塞举办的SES(搜索引擎战略)大会上,谷歌的CEO施密特(Eric Schmidt)在回答主持人提出的一个有关互联网的问题时说:“……现在出现了一种新的商业模式……人们还没有意识到这个机遇有多大。这种模式的前提是,数据服务的架构应该在他们称为‘云计算’的服务器上,即在某处的云里,如果你有合适的浏览器或接入方式,那么不论你有什么设备,你都可以访问这些数据。”
很多人认为云计算自此出现,因为从此之后各种有关云计算的概念层出不穷, “云计算”开始流行。
但2006年出现的只是“云计算”这个词,仿佛一个幕后工作人员忽然被主持人介绍到台前拿了奖,在媒体长篇累牍的报道下,一夜成名。而实际上,云计算本身无论是商业模式还是技术都已经发展了很长时间,并在实践的过程中逐步演进。在2006年时,云计算本身未必发生质变,但既然人们对云计算的认知发生了质变,所以将其理论化、体系化势在必行。德国政治学家伊丽莎白·诺艾尔-诺依曼(Elisabeth Noelle-Neumann)提出过一种“沉默的螺旋”(spiral of silence)的理论,认为人们在表达想法和观点的时候,如果觉得自己的观点是公众中的少数派,就不愿意传播自己的看法,但如果看到自己赞同的观点受到广泛欢迎,就会乐于公开表示自己的观点或态度。这样,多数派的声音会越来越大,形成一种螺旋式上升的模式。云计算概念的忽然兴起或许就与此相仿。
虽然谷歌为云计算命名,但真正明确云计算商业模式的是亚马逊。在施密特态度鲜明地提出“云计算”这个词的几个星期之后,亚马逊推出了EC2(动态计算云)服务,将“云”这个名词包含在内。
亚马逊是个神奇的公司,销售包括图书、DVD、电脑、软件、电视游戏、电子产品、衣服、家具、计算资源等一切适合电子商务的“商品”。在推出EC2的时候,亚马逊也面临不少“这个零售商为什么想做这些”的质疑,但CEO贝索斯对商业的概念理解明显要宽泛很多。贝索斯无疑认为不管是“PC+软件”,还是这种从“云”里取得服务的方式,不仅关乎技术的问题,还都是一种“商业模式”。最早时,为了让网站能支持大规模的业务,亚马逊在基础设施建设上花了很大功夫,自然也积累了很多经验。为了将平时闲置的大量的计算资源也作为商品出售,贝索斯的亚马逊公司先后推出了S3(简单存储服务)和EC2等存储、计算租用服务。贝索斯表示,“我们认为在某一天这也会是一项非常有意思的业务,所以我们这么做的目的很简单:我们认为这是个好业务。”[1] 虽然媒体认为这是贝索斯安全度过
互联网泡沫之后的一笔冒险赌注,“亚马逊的CEO想要用他网站背后的技术来运行
你的业务,但华尔街只想他看好自己的店面。”[2] 但EC2确实影响了整个行业,也影响了很多人,当时业界明显受到了震动。
在亚马逊之前,虽然有不少服务按现在来看都有云计算服务的特征,但即使是谷歌所提供的服务,仍然可以看做是互联网服务意义内的一种商业模式。而亚马逊推出IaaS(基础设施即服务)之后,仿佛给互联网世界开了一扇窗,告诉人们,还可以这样来运营计算资源,还有一种新的商业模式,叫云计算。而那些与传统互联网服务形似神离的服务模式,也终于可以独立出来,找到自己归属的阵地——云计算服务。
云计算起源于互联网公司。虽然互联网公司给人的印象大多是钱多烧不完,但其实多数互联网公司都很注重成本控制。尤其是早期不少互联网公司都起源于学生宿舍,费用的掣肘使这些公司尽可能合理地利用每一个硬件,最大程度地发挥机器的性能。所以早期的互联网公司都会自己选主板、硬盘等配件,然后进行组装,完成服务器硬件的设计。这种传统沿袭下来,就是现在硬件定制化日趋流行的原因。如今谷歌、Facebook都会自己动手设计和生产服务器,以最少的配件最大可能地支持特定功能需求,并降低服务器的能耗。
对于硅谷工程师而言,超级家电连锁店Fry's或许是最值得逛的“购物天堂”。硅谷有不少Fry's的连锁店,由于Fry's占地面积很大,东西齐全且便宜,理论上一个技术人员可以在这里买到所有的零配件,然后组装一个主板,所以这里很受工程师的欢迎。雅虎的工程师们也曾是Fry's的常客。
2000年,互联网经济处于第一波热潮中。这时全球互联网用户人数已经从1995年的几千万增至数亿,并仍在不断快速增长。快速增长的用户数量,使许多网站感受到了系统支撑的压力。雅虎也一样。当时雅虎经常面临的一个问题是,一个频道设计完成之后,在上线之前测试可支撑一定数量的用户(比如10万人),但第二天一上线就出现达到指标的情况。怎么办?只有增加设备,尽可能提高系统对服务的支撑能力,因此即刻购买设备然后连夜组装机器的情形并不少见。到Fry's选买配件是不少工程师的工作内容之一,当然也是乐趣之一。雅虎的共同创始人之一大卫·菲洛(David Filo)至今还喜欢组装机器,不知道是不是一种习惯使然。
为了支撑业务运转,满足用户需求,服务器的整体性能在不断上升,相应地,服务器的数量也在不断增加。这很自然会引出一个问题,数十台机器可以手动组装维护,上千台机器如何处理?甚至,如果机器数上万呢?人能管理的机器数量始终有限,即使劳作不休,所能承受的负荷也有一定的极限。每一个大型互联网公司,都曾遇到过这个问题:如何管理和维护成千上万台服务器?
很多事情在讲述的时候似乎很有意思,但当时经历的时候会让人觉得绝望。“大系统”的压力对于系统维护工程师而言,就是这样的事情。2000年初,笔者(注:此处指姚宏宇博士。)当时在雅虎公司编程之外做的最多的两件事,现在听起来或许还有些“土”:一件是组装机器,一件是维护机器,而这只是为了保证在足够多且可靠的硬件支撑下,业务系统能够有效应对不断快速增长的用户需求。在当时,笔者加班到晚上十点钟左右是常有的事,然后还要从加利福尼亚州的桑尼维尔(Sunnyvale)开车回家,再和朋友一起找地方吃饭。由于住的地方位于南圣何塞(South San Jose),附近是越南人聚集地,太晚的时间只有越南米粉(Pho)可以吃,于是以越南米粉果腹的时间持续有半年之久,以致现在对“牛肉粉(Beef Pho)”产生排斥感。吃完饭之后回去还要继续工作,凌晨两、三点才能睡觉。美股的开盘时间是东部时间9:30~16:00,这意味着在此之前必须保证交易网站服务的正常运行,所以必须每天早上6点准时起床,来检查系统的运行状态。很多人每天都会收到大量邮件,但早上刚起床就看到上万封邮件和几百条呼叫(Pager)信息,并且全部来自机器的情况并非人人都有体会,虽然是专职于此的技术人员,这种极大的压力状况还是很容易让人产生无力感,持续下去会有崩溃的感觉。怎么办?只有把雅虎财经频道大部分的底层代码进行重写,找回些生活。
现在看来,大量用户带来的大流量的压力,以及大系统的问题不仅对于每一个互联网公司来说仍然普遍存在,而且已经开始越来越多的出现在其他传统企业中。谷歌在1998年时的访问量约为每天1万次,但到2007年时,日访问量已达到5亿多次,机器数量也已经超过50万台。对于大多数互联网企业而言,虽然服务器规模不至于如此庞大,但随着用户规模的增加,少则数百台,多则上千台的服务器仍然对企业的运维管理能力提出了挑战。
对于企业来说,随着系统越来越大,维护人员却不能对应成比例增长——企业要考虑人力成本,还要顾及运维效率的问题——即便如此,雅虎在某一阶段有过半的成本都耗在旧有设备和系统的维护上,而无法把大部分资金投入到新业务的开发中。公司能创造新价值的部分越来越少,创新也越来越少,只能求变。
除了大规模系统的维护之外,海量数据的存储问题同样是互联网公司头疼的问题所在,随着网络技术和服务的快速发展,用户平均在线时间的延长和用户网络行为的多样化,导致各类数据在不断涌现,移动终端的出现更是扩充了网络服务的内容与范围,这些都大大增加了互联网公司需要承载的数据量。大量的用户数据对每一个公司而言都是宝贵的信息财富,但是如果只是购买邮箱存储设备一年就要花费几亿美金的话,每个CEO都会再权衡一下,于是雅虎后来有了Hadoop的研发。
因此,在流量和服务器数量都高速增长的情况下,“一个能够与网页增长速度保持同步的系统”[3]必不可少,这也是谷歌三篇有关分布式的论文*(注:这三篇论文分别是有关GFS(Google File System)分布式存储系统、MapReduce分布式处理技术和BigTable分布式数据库的论文,下文也有所提及。)之所以具有重要指导意义的原因——一切均出自实践。
随着信息经济的发展,许多传统企业现在也在加速向互联网化转型。最初存在于互联网企业的压力也出现于其他组织机构中,对大数据的管理和处理需求也在这些组织中产生。比如一个政府部门,如果考虑到信息中心和各垂直部门的信息资源,可能会有数千台服务器和数百套业务系统需要整合和管理,而且多数分布于不同的地理位置。如何对这些资源进行集中统一管理?
或许,这些组织也可以考虑选择云计算。
对于大多数中小型组织,甚至于个人而言,云计算的魅力来自那些灵活、弹性和随时随处可用的云计算服务,比如亚马逊的计算资源租用服务,或者一些针对企业和个人的“云存储”服务。这些服务是大多数人与云计算最直接的接触,也形成了他们对云计算的直观认识。但是我们知道,云计算应该包含两方面的内容:服务和平台。云计算既是商业模式,也是技术。
美国加州大学伯克利分校在一篇关于云计算的报告中,就认为云计算既是指在互联网上以服务形式提供的应用,也是指在数据中心里提供这些服务的硬件和软件,而这些数据中心里的硬件和软件则被称为“云”[4]。
云计算服务代表一种新的商业模式,SaaS(软件即服务)、PaaS(平台即服务)和IaaS(基础设施即服务)是这种商业模式的代表表现形式,美国国家标准与技术研究院(NIST)就曾于2011年发布过一份《云计算概要及建议(草案)》 (DRAFT Cloud Computing Synopsis and Recommendations)的报告,对SaaS、PaaS和IaaS等进行了详细说明。很多人认为SaaS必须运行在PaaS上,PaaS必须运行在IaaS上,但实际上三者之间并没有绝对的层次关系,它们都是一种服务,可以有层次叠加关系,也可以没有。
对于任何一种商业模式而言,除了理论上可行之外,还要保证实践上可用。因此,伴随着云计算服务理念的发展,云计算也形成了一整套技术实现机制,而云计算平台则是这套机制的具体体现。
但云计算服务和云计算平台之间并没有相互依存的必然关系。即如果以传统的底层架构,或类似超级计算等实现的服务具备云计算服务的三个特点:大用户群、永远在线,以及随时随地可接入,也可称为云计算;而云计算平台本身在设计上就针对了“大用户”、“大数据”和“大系统”的问题提出了解决办法,这也是在提供云计算服务时会遇到的典型问题;所以,以云计算平台支撑的云计算服务,不仅可以提高服务的效率,而且还会充分发挥平台的能力和优势。
很多人会把服务和平台模糊起来进行介绍,也有很多人因此会混淆对云计算的认知。看到云计算,眉眼之间都觉得熟悉,便以为是旧识,不待招呼细聊,引手就向别人介绍,这是云计算,以前是……
按照“选择性认知(selective perception)”的理论,人们在处理信息时都有一种选择性倾向。人们不可能吸收他们所观察到的所有信息,而只能从接收到的零碎信息中依据自己的兴趣、背景、经验和态度主动地进行选择性接受。因而知识结构、看问题的视角和商业利益的各不相同,就使各个群体对云计算形成了多种解读方式。
从技术角度而言,云计算最早的出身,应该是超大规模分布式计算。比如雅虎为了解决系统对大规模应用的支撑问题,而设计的超大规模分布式系统,目的就在于将大问题分解,由分布在不同物理地点的大量计算机共同解决。但随着技术不断的发展和完善,云计算在解决具体问题时,借鉴了不少其他技术和思想,包括虚拟化技术、SOA(面向服务架构)理念等,所以很多人乍看之下会觉得相似。但云计算与这些技术有根本性的差别,不仅体现在商业应用上,还体现在实现细节上,本书将在之后的章节对此进行较为详细的说明。
我们知道,所有科学的认识都是以一种层次递进、螺旋上升的方式发展的,每一种技术都有其适用的场景和范围,比如量子力学不会否认经典力学在一些物理问题上的作用。所以,对于云计算来说,糅合了各种技术不代表云计算比其他技术更优秀,而是说明云计算技术确实是针对“大用户”、“大数据”和“大系统”发展出来的一种新的实现机制。
另外,为了区分云计算的部署使用方式,现在经常提到的还有“公有云(Public Cloud)”、“私有云(Private Cloud)”和“混合云(Hybrid Cloud)”的概念。
公有云通常是指开放给公众使用的云基础设施。可以是企业、院校、政府机构,也可以是一些合作机构来持有、管理和运营公有云。私有云通常是指为一个客户单独使用而构建的云基础设施,因而提供对数据、安全性和服务质量的最有效控制,并可以控制在此基础设施上部署应用程序的方式。通常,多数中小型企业可以从不同服务商提供的各种公有云服务中受益,而鉴于现在企业所需面对的用户量、数据量及系统复杂度都在快速增长,即便是一个小企业所面临的压力,从过去的大型企业的角度来看也都已经是“大”问题,因此通过建设私有云来应对系统压力、满足业务系统需求,正在成为越来越多企业和组织的选择,并且随着企业规模的增加,私有云建设所能带来的收益也在愈发突显。
从现实情况看,公有云和私有云的区别主要体现在商业应用方面,技术上应该是互通的,区别不大。技术层面最根本的区别是访问权限和访问模式的控制,即可访问的范围决定了“云”的业务性质。如前所述,通常意义下,私有云所面向的是一个组织机构,而非公众,但这界限其实并不绝对和清晰。比如谷歌的云操作系统,对内使用而言是私有云,而对外提供Google App Engine时,就变成了公有云的PaaS服务。混合云也并非半“私有”半“公有”,而是在某一块资源不够的情况下,从另一处借用而已。比如游戏服务提供商Zynga有自己的“云”运行服务,但在用户使用高峰期时,又会租用亚马逊的IaaS服务。
长远来看,公有云是云计算的最终目的,但私有云和公有云会以共同发展的形式长期共存。好比银行服务的出现,货币从个人手中转存到银行保管,是一个更安全、方便的过程,但也会有人选择自己保管,两者并行不悖。
本文节选自《云计算:大数据时代的系统工程》
姚宏宇 田溯宁 著
电子工业出版社出版