《云计算应用架构》连载一:什么是云?

时髦词有一个共同特征:它们善于传达事物的表象,而不传达事物的真正含义。对许多人而言,“云计算”这个词听起来就是个时髦词。

这个词被用于许多互不相干的场合,在其中,它往往指的是完全不同的东西。人们有时用它指GoogleGmail,有时又用它指Amazon的“有弹性的计算云”(Elastic Compute Cloud)(后面这个词至少在名字中有“云”!)。

但是,云计算已经变得和Web一样,不再是什么时髦词了。云计算是多种技术演进的结果,最终,这些技术结合到一起,形成了新的方法,改变了组织机构建设自己IT基础设施的方式。和10多年前Web的情况很相似,从根本上来看,云计算没有使用任何新技术。当Netscape出现时,构成Web的很多技术已经有几十年的历史了,Netscape只是使它们更便于使用。同样,构成云计算的大多数技术已经有很长的历史,Amazon仅仅让这些技术能够为大众所用。

本书的目的:让事务型Web应用开发人员在部署程序时,能用上云这种基础设施。因此,当本书讲云时,会更多地讲像AmazonEC2这样的东西,而不是GoogleGmail。话说回来,要讨论云计算,我们首先应该建立一个基础概念框架。

1.1 云

“云”不是最近刚流行起来,用于简单地代指Internet的词。虽然Internet是云的一个必要基础,然而,云的意义比Internet深。“云”是当你需要使用技术时去的地方,用的时间与需要的时间完全一致,一分钟都不多。你不必在自己的台式机上安装任何东西,也不必为未使用的技术付费。

云既可能是软件,也可能是基础设施。它可能是通过Web调用的应用程序,也可能是一台只在需要时才装备到位的服务器。不管服务采取的形式是软件还是硬件,以下的简单测试可以判断服务是否是一个云服务:

如果不用关心图书馆或Internet咖啡馆的电脑用什么样的操作系统,浏览器和接入设备是什么,坐下来就能使用服务,则该服务是基于云的。

衡量一个特定的服务是否是云服务时,我使用自己定义的3条标准:

  • 服务可以通过浏览器(非专有的、大众化的浏览器)使用,或者具备Web Services形式的API
  • 开始时无须支出任何资金。
  • 只针对使用行为付费,并且,只对自己所用的部分付费。

我不指望这3条标准能结束争论,但是,它们为讨论提供了一个坚实的基础,反映了我在本书中对云服务的看法。

如果你不喜欢这个过于简化的云计算定义,James Governor有一篇很棒的博客,题目是“证明不是云计算的15种方法”,地址是http://www.redmonk.com/jgovernor/2008/03/13/15- ways-to-tell-its-not-cloud-computing.

 

1.1.1 软件

正如我之前指出的,云服务分为软件服务和基础设施服务。按成熟度来看,云里的软件发展得比云里的硬件好。

“软件即服务”(SaaS)这个术语,基本上是指云中的软件。虽然并非所有SaaS系统都是云系统,但绝大多数是。

SaaS是个基于Web的软件部署模型,它使得软件可以完全通过Web浏览器使用。作为一名SaaS软件的用户,你不用关心软件装在哪儿,用的是何种操作系统,是用PHPJava还是.NET开发的。并且,最关键的是,不用在任何地方安装哪怕一丁点儿软件。

例如,Gmail不过就是个在浏览器中使用的Email程序。它不使用胖客户端,提供了和苹果的Mail或微软的Outlook一样的功能。即使你所在的域不通过Gmail接收邮件,你也照样可以用Gmail来收发自己的电子邮件。

SalesForce.comSaaS的另一种变体。SalesForce.com是一个企业客户关系管理(CRM)系统,它使得销售人员可以跟踪自己的潜在客户和销售线索,查看人员在组织机构销售过程中所处的位置,管理从初次接触到销售完成,再到售后的整个销售过程工作流。和Gmail一样,使用SalesForce.com不需要任何软件:将你的浏览器指向SalesForce.com网站,开通一个账户就可以开始用。

SaaS系统有一些典型特征:

通过Web浏览器访问

SaaS软件不需要在笔记本或台式机上安装软件。通过使用符合公开标准的Web浏览器,或者使用常见的浏览器插件,就能用SaaS软件。云计算和专有桌面软件之间格格不入。

随时可供使用

基于SaaS的软件不需要传统的销售过程。一旦获得使用权,就可以随时随地使用SaaS软件。

按使用量计费

SaaS软件不需要任何基础设施投资,也没有让人眼花缭乱的安装过程,因此,无须支付大笔的安装费。你只需要在使用的时候,针对自己用到的那部分服务付费。当不再需要服务时,只需停止付费即可。

最小化的IT要求

如果不需要买任何服务器,也不需要铺设任何网络,当然也就没必要搞什么IT基础设施建设。虽然配置SaaS系统可能要求具备一些最基本的技术知识(比如,Google Apps要进行一些DNS管理),但是,一位高级用户就具备这些知识,不见得非要一名熟练的系统管理员不可。

我有意没讲SaaS部署的一个特性:多租户。许多SaaS供应商都在吹嘘自己的多租户能力有的甚至暗示,多租户是任何SaaS系统所必需的。

多租户应用程序是基于服务器的软件,它支持在一个软件实例中部署多个客户。虽然最终用户多少也会因此受益,然而,这种能力给SaaS供应商带来的好处更明显:

  • 在较少的硬件上支持更多的客户。
  • 更快,更简单地升级应用程序和打安全补丁。
  • 通常而言,多租户的架构更完善。

对最终用户来说,得到的好处是间接的,它体现在更低的服务价格,更快地获得新功能,以及(有时)更快地针对安全漏洞提供保护上。然而,因为云计算的核心原则是无须考虑你所使用应用程序的底层架构,所以,从这个角度来看,多租户的重要性不高。

正如我们将在下一节讨论的,类似于“多租户有架构方面的优势”这种不着边际的话题,主要是由虚拟化技术引起的。


1.1.2硬件


对普通大众来讲,一般情况下,比起“云中的软件”来,“云中的硬件”这样的概念更难接受。硬件是些你看得见摸得着的东西:你拥有硬件,而不是通过授权获得硬件。如果你的服务器着火了,这可是件要命的事。对许多人来说,很难想象放弃自己实实在在拥有硬件的权利。

当硬件在云中时,如果你需要一台新的“服务器”,直接请求就行。请求发出后10分钟,硬件就准备好了。用完之后,一释放硬件,它就回到云中。你不知道自己这台基于云的服务器到底在哪台物理服务器上运转,你甚至很可能不知道服务器的地理位置究竟在哪儿。

旧观念形成的障碍

作为云计算服务供应商,我觉得最难回答的问题是“服务器放在什么地方?”。如果实话实说,答案当然是,“我不知道——在美国东海岸某地,或者西欧某地,”这样的回答会让客户很不满意。然而,有趣的是,不知道服务器的位置,反而形成了某种物理安全性,因为如此一来,蓄意攻击者几乎不可能用物理攻击的方法侵入系统。

云基础设施的优势

想想你拥有并管理自己的服务器时,需要担心和处理的各种事情吧:

容量不足怎么办?

容量规划永远是件要紧事。当硬件归自己管时,你必须解决两个问题(云能帮你处理这些问题):如果你估计错了(有可能过于乐观,也可能过于保守)怎么办?如果需要购买新硬件,而你却没有用于扩充硬件的资金怎么办?当管理自己的基础设施时,每买一台新服务器,每增加一个新的存储域网络(SAN),你都必须支付大量现金。你也需要提前相当长一段时间准备,从决定购买,到走完采购流程,到接货,到最后的系统上架、安装和测试完毕,这会有一个过程。

出了问题怎么办?

不用说,任何好服务器都配有冗余以应付常见的硬件故障。如果RAID阵列中坏了一块硬盘,就算有一块冗余硬盘,也要有人把老的坏硬盘从服务器中拔出来,管理好RMA1),再把新硬盘塞进服务器。这需要时间,也需要技巧,并且,为了不让服务器完全无法响应请求,所有这些事情需要在很短的时间内完成。

发生灾难怎么办?

如果整个服务器都坏了,除非基础设施充分考虑了系统的可用性,否则,等待你的将是灾难。此时,工作人员所能做的不过是跑出去通风报信而已。你唯一能指望的是有一份完整的备份,以及有一套行之有效的灾难恢复计划,必须靠它们来克服灾难,让业务尽快运转起来。这个过程几乎肯定是手动的。

不需要服务器了怎么办?

也许你不再需要以前那样大的容量,或者,一台已经折完旧的服务器应该报废。怎么处理这台老服务器?即使你报废这台服务器,也需要有人为它付出点与报废相关的劳动。并且,如果这台服务器还没有折旧完,你就得为它不停地花公司的钱,而这样做不会给业务带来任何效益。

浪费了机房和电力怎么办?

当管理自己的基础设施时(或者,甚至只是在ISP那儿租了个机架),你也可能在为大部分没被用上的机房和电力支付费用。这非常不环保,也很浪费钱。

如果你选择了云基础设施,以上这些都不是问题:

  • 在需要它的那一特定时刻,云基础设施才会扩容,不需要提前哪怕一点点。容量分配不会产生任何费用,因此,不用担心容量需求和预算需求的时间点之间会出现矛盾。最后,你可以在几分钟内增加新容量并运转起来,因此,即使由于容量不够造成了问题,情况也不会太糟糕。
  • 永远不需要担心底层的硬件。甚至当运行中的物理服务器完全损坏时,你可能也永远不会知道发生了这样严重的事情。通过使用合适的工具,系统可以自动从最严重的灾难中恢复,你的工程师可以宽宽心心地睡大觉。
  • 当容量需求变化时,或者,需要另一套虚拟硬件配置时,你只需简单地停用服务器。你不用处置资产或担心对环境的影响。
  • 你不必为从来没用到的机房和电力付费。在云中,你所用到的硬件性能强悍,确实大大超出了所需,然而,由于你只占用它的一小部分,所以,硬件物理空间的利用效率得以最大化。说得更直白些,你没有为一整机架服务器和绝大多数消耗在空闲CPU周期上的电力付钱。

硬件虚拟

正因为背后有硬件虚拟技术,许多云基础设施供应商才能提供自己的服务,比如,Amazon Web ServicesAWS)服务。如果你有一台苹果机,在ParallelsFusion里运行WindowsLinux,那么,所采用的虚拟化技术和那些用来支撑云计算的技术就相差无几。通过虚拟化,IT管理员可以将一台物理服务器分成若干台虚拟服务器,它们在各自被分配的内存、CPU和磁盘空间中运行各自的操作系统。有的虚拟化技术甚至能将一个运转中的虚拟服务器实例从一台物理服务器挪到另一台。任何用户,或者任何运行在虚拟服务器上的应用程序,都无从知晓它是否运行在真实的、物理的服务器上。

为解决虚拟化问题,市场上不同的虚拟化技术采用的方法各不相同。Amazon的解决方案基于时下流行的、被称为Xen的开源虚拟化系统,在其上进行了扩展。Xen提供了一个管理程序层,一个或多个客户操作系统可以运行于其上。管理程序将硬件抽象化,使得客户操作系统可以共享物理服务器的资源,但是,客户操作系统无法直接访问这些资源,也无从了解这些资源如何被别的客户操作系统使用。

对虚拟化常见的批评是那些在桌面软件上有过虚拟化经验的人尤其喜欢这样批评虚拟系统的性能损失相当大。就云中的世界而言,这种针对虚拟化的批评往往站不住脚,其原因如下:

  • 即使由于虚拟化造成性能上有所下降,比起用自己的服务器达到的最佳情况来,云供应商依靠其强大的硬件也能提供更好的性能。
  • 企业虚拟化技术,如XenVMware,使用了准虚拟化及许多CPU制造商提供的、由硬件直接提供帮助的虚拟化功能,这些东西能使虚拟化的性能接近于不用虚拟化时的性能。

云存储

将硬件抽象到云中所涉及的不仅仅是用虚拟化技术替换物理服务器,物理存储系统也需要替换。

云存储使你能将数据“扔”到云中,不用担心它们如何存储,或者应该如何备份。当你需要这些数据时,只需简单地将手探进云中,抓出数据。你不知道数据如何存储、存在何处,或者,从你把数据放进云中,到你从云中取出数据这段时间内,所有相关的硬件都发生了什么事。

和云计算其他构成元素的情况一样,市场上提供云存储的方法有很多。一般而言,它们都会把你的数据分成小块,将这些小块存储到多台服务器上,附带着再存些神奇的校验数据,这样就能很快地取回数据不管构成云的存储设备在这段时间发生过怎样的事情。

我见过很多人在开始尝试云时,都把云存储当做某种形式的网络存储设备来用。从运行时的角度来看,云存储和传统意义上的网络存储要达到的目的非常不同。云存储由于结构更复杂,往往要慢得多,不管应用程序运行在云中还是别的地方,将云存储用作应用程序的运行时存储机制都不太现实。

一般而言,云存储不适宜运行基于云的事务软件。后面我们会更详细地讨论在事务型应用程序管理中,云存储所扮演的角色。现在,你只需把云存储想象成某种你永远都不需要管理任何磁带的磁带备份系统就行了。

注意:

Amazon最近推出了一项新服务,称为“Amazon云前端”(Amazon CloudFront),它把AmazonS3用作内容发布网络。Amazon云前端的想法是将你的云内容复制到网络的边缘。虽然AmazonS3云存储可能不适合于运行大多数事务型的Web应用程序,但是,云前端很可能会是快速向世界范围发布静态内容的一个关键构件。



1RMA即退货授权(Return Merchandise Authorization),是指要退还有缺陷的零件时,一般情况下,应按照供应商规定好的流程进行,才能退还零部件和得到相应的替换品。

 

《云计算应用架构》豆瓣地址:http://book.douban.com/subject/4922691/

《云计算应用架构》互动网购买:http://www.china-pub.com/196990

posted @ 2010-08-18 21:45  博文视点  阅读(1330)  评论(0编辑  收藏  举报