云计算传奇故事:亚马逊“误入”云计算始末

摘要:2007年后,云计算的名词可谓不绝于耳。不过根据笔者与不同行业的从业人员共事的经验来看,多数人对于云计算这个术语到底是什么含义还是一头雾水。2008年,亚马逊在线推出了自己的云计算版本进军云计算市场。本文意在向大家展示亚马逊的云计算之路。

2007年后,云计算的名词可谓不绝于耳。不过根据笔者与不同行业的从业人员共事的经验来看,多数人对于云计算这个术语到底是什么含义还是一头雾水。

2008年,亚马逊在线推出了自己的云计算版本进军云计算市场。本文意在向大家展示亚马逊的云计算之路。

首先我们需要了解的是:为什么是亚马逊?

亚马逊并非我们认为最可能进军云计算业务的公司。多数人认为这种业务应该是IBM和甲骨文这样的厂商来做才对。

让我们先看看亚马逊是如何进入这个领域的。当用户访问亚马逊网站时需要注册登录,用户将看到他可以自己定制的店面。这些推荐出于某种原因不会储存在收藏夹里,也不会通过用户的浏览器体现出来;他们完全是通过亚马逊服务器来决定的。

对于一名网络开发者来说,汇总这些推荐信息是很容易的:当用户登录时,最新的采购信息会展现在你眼前,类似条目的数据库查询也准备就绪并且显示在主页上。除了这个问题外:你会为数百万在线用户同时发生的几行代码花费几分钟或者几小时做这种统计吗?

多数网络服务器尽管功能强大,但都不具备这种能力。因此亚马逊的工程师们就被迫要想出新的办法来应对如此繁杂的数据库交易和实现软件的快速计算。他们的解决方案是使用一组由多重计算机组成的分布式计算环境,每台计算机都专门执行一项任务,这些计算机都互相通信协同工作。

对于一名软件研发人员来说,多数时间所处的环境都是要向人们不停的解释,尽管很多人都能编译代码,但要完美的执行软件研发任务通常需要整个团队的协同工作,甚至可能是整个公司。举例来说,这就是为什么你会发现,高度专业的软件公司都是专门向某一特定行业供应软件。为什么企业不能只研发他们自己的软件?因为他们不从事这样的业务。事实上,多数经济实用的解决方案通常是从其他专门致力于此类软件开发的公司购买软件。

不过这种情况也有例外。有时一家公司所需的软件并不存在。看看亚马逊的发展就是这样。他们最初的业务是在线销售书籍,但现在他们发展成了百货纷陈的在线商店。为了跟上用户规模的发展速度,亚马逊需要能适应他们运营模式的硬件设备和软件系统。但不幸的是,在亚马逊发展的初期阶段,这种系统还没有诞生。亚马逊的工程师除了自己研发以外别无选择。

亚马逊工程师们被迫开始研发应对他们零售业务的大规模分布式系统。当这一切完成后,亚马逊意识到他们不仅可以自己掌握主动权,而且研发成果还能为其他用户所用。由此2002年亚马逊网络服务(AWS)诞生了。

众所周知的亚马逊网络服务伞状系统包含了许多不同的技术。最新的技术之一被称为为亚马逊弹性计算云,简称EC2。

当亚马逊刚开始研发亚马逊网络服务时,他们决定除了要简化个体计算机工作负载的分配,还要确保个体计算机能在随需基础上提供服务。

举例来说,如果有人登录亚马逊这样的大型网站去浏览视频,如果他们没在使用留言板,那么处理留言板的服务器就没理由为他留出存储空间。亚马逊研发的大型分布式系统能根据用户的需求分配资源,当用户不需要这些资源时,亚马逊就会将这些资源释放。

在小型网络服务器环境中,随着程序员了解了如何按需分配对象,这种资源分配的应用就越来越多。对于大型系统这种方式尤其的重要。这便是云计算的雏形。在云计算的世界里,大型网络服务器的每个部分都成为了一种服务,可供执行每项特别任务使用。这些服务在独立的硬件上运行。在其他计算机上运行的软件也能按需访问服务。

这就是云计算的真实体现:可以互相提供服务的多重系统。软件功能即服务(也被称为软件即服务)。但是在云计算的情况下,这些独立的系统通常本身就很大;他们不仅是独立的网络服务器,而且更像是容量巨大的数据库。当所有这些大型系统作为整体在网络上铺展开来协同工作,这样形成的系统池就被称为云。

如今这个概念进入了新的层次:即创建独立的服务这样就可以按需使用。想象一下用户想要将这些服务的某些部分用于他们自己的软件开发。他们想在网络上运行自己的软件,并且通过这些服务的交付来获益。他们不需要所有可供使用的服务,只选择自己需要的部分。

这就是亚马逊弹性计算云的使用原理:即用户租用亚马逊云上的空间,只需为他们需要和使用的部分付费。软件也是在运行的时候分配使用空间(甚至是计算机新增虚拟机亦是如此)。云的每个部分都能提供给用户使用,他们都是按需付费。

对于用户来说无疑是好处多多。因为通过云的方式,他们的软件就可以在大型系统上运行,这种系统功能强大,每天处理的交易量可以达到数百万;这样用户就不必非要购买属于自己的物理硬件。他们也不必订购在数据中心的物理台式机中拥有一个虚拟区域的托管服务。而结果就是他们的软件功能可以和大型厂商的一样强大。

这种云计算的方式并非亚马逊所独有的。不过亚马逊自己的系统被称为弹性计算云,因为亚马逊的工程师认为它有具有弹性的。用户的软件能向闲置的服务提出请求,在软件运行时按照需求相应增长,当需求减少时资源也会随之逐渐释放。换句话说,软件是很灵活的,在需求的基础上发展,用户按照使用的服务进行付费。这种方式与传统的托管服务是有所不同的,传统的托管服务通常都是用户对固定限度的资源每月按照固定费用支付。

不过亚马逊的弹性计算云与传统的托管服务也有类似之处。当用户在弹性计算云上运行应用软件时,他们创建的虚拟机与小型托管提供商的虚拟服务器十分相似。从这里可以看出,他们的系统能随着新增虚拟机需求时一同成长。这些虚拟服务器就是云服务提供的最小的原子单元。

接下来随着用户软件的运行,他们可能要对软件的代码进行编译来决定是否需要增加额外的虚拟机。他们的软件可能需要处理一些复杂的数字运算,但他们又不想将目前使用的虚拟机供这个运算过程使用。此时他们可以分配第二个虚拟机给这个运算过程,这个虚拟机拥有与一台独立的单机系统同样的能力。当数字运算过程完成后,第二个虚拟机可以将运算的结果返回给第一个虚拟机,然后关机,这样亚马逊其他的用户就能使用这段处理时间了。

创建这样的弹性计算环境需要精密的计算能力,比如一座由专门执行这些任务的很多计算机组成的服务器机房。有了这些计算机,工程师可能会有额外的需求,让系统具备按照需求分配多重虚拟机的能力,以便系统更加高效。

有时一个小型项目可能会会变得复杂。程序员可能对创建这种的系统充满雄心。但谨记我之前所说的。你在什么样的企业里?他们想要创建的系统并非是微不足道的,也不是一个独立的程序员花费几个周末就能完成的。

这就是为什么很多公司对亚马逊提供的产品感兴趣的原因:允许用户的应用软件随需升级的大容量并行基础架构,所有人都必须考虑执行这项任务的具体细节或者维护他们自己的数据中心所需的财力状况。

在构思这篇文章时,笔者参阅了许多来自亚马逊的正式文档,包括对这种体系架构的描述文件。这篇文章提供了一些实例来阐述弹性计算云体系架构和亚马逊网络服务的其他方面是如何体现他们的优势的;吸引我们注意力的是我们需要将数百万页的文档从微软的Word格式转换为PDF格式。

有许多桌面系统应用软件能实现这种转换,也有一些可以通过网络服务器供用户使用。用户可以从网络服务器上上传这份文档然后转换为PDF文件。

不过想象一下用户通过网站托管平台来上传文档,此时有数万文档在排队等待。这样的工作无异于梦魇。我可能会退出这项作业然后转移到其他的方式。

不过在云环境下从事这项作业就不同了。大容量的并行云环境能轻松的让系统处理这些任务,我可能根本不需要打开手机,甚至放心的去睡大觉。

弹性计算云环境是在某些经过验证的技术上创建的,包括用JAVA语言编写的,用于开发分布式应用软件的开源框架Hadoop。

我曾经提到亚马逊能提供虚拟机。当创建虚拟机时,用户能根据详细说明和AMI来选择应该怎么做。举例来说,他们可以在2007 32位至强处理器基础上创建标准化Linux分布式虚拟机,这个虚拟机可以拥有1.7GB内存和16GB存储容量。用户还可以根据需要建立其他的虚拟机。目前创建虚拟机的数量上限为20,不过大客户可以和亚马逊合作要求更多虚拟机。

亚马逊还提供给研发人员大量的资源,包括使用指南,正式文档和工具。亚马逊还创建了几个工具来帮助研发人员,包括能够配置系统的命令行工具。还有注册工具等。研发人员还能从亚马逊云上找到更多的工具来设置虚拟机。亚马逊还提供了供用户交流和解决问题的大型论坛。

结论

在云计算之初,笔者也对亚马逊网络服务的出现,特别是亚马逊进军云计算领域的行动心存疑虑。确实它看起来如此与众不同,如今想象一下我们可以通过云服务轻松创建和升级网络软件,这多么令人振奋。还会有像EC2这样的云服务接踵而至,我知道迎接它们的时候到了。