什么是云计算?
云计算(Cloud computing)可以粗略地定义为根据需要使用在用户环境之外以服务形式提供的可伸缩计算资源。用户只使用需要的资源,只为使用的资源付费。在任何时候,在 Internet 上的任何地方,都可以访问 “云” 中的任何资源。不需要关心云中的资源在幕后是如何维护的。
|
云计算影响了我们设计和交付可伸缩应用程序的方式。在过去,公司要花费宝贵的时间和资源构建基础设施,从而提供竞争优势。常常是 “构建它,它们就来了”。在大多数情况下,这种方式有以下缺点:
未使用的计算能力被浪费了,其他公司或用户可能愿意付费购买多余的计算周期,但是无法实现。
有了云计算,就能够把多余的计算能力销售给客户。这就把计算和 IT 基础设施转换为一种实用工具,就像球场一样,可供所有人使用。这使竞争取决于创新思想而不是计算资源。
应用程序和 IT 系统需要的资源(为了满足日益增长的存储、计算、消息传递和数据库需求)本质上是 “日用品”。可以从价格最优惠、服务最好的卖家那里租用这种基础设施。很简单,不是吗?这是一个简单但革命性的思想,尽管它并不是完全的新概念。它现在之所以成为技术潮流,是因为 Amazon 引入了大范围的云计算环境。
Amazon Web Services
Amazon Web Services 是一组服务,它们允许通过程序访问 Amazon 的计算基础设施。Amazon 多年来一直在构建和调整这个健壮的计算平台,现在任何能够访问 Internet 的人都可以使用它。Amazon 提供几个 Web 服务,但是本系列只关注满足大多数系统的核心需求的基本服务:存储、计算、消息传递和数据集。
通过在 Amazon 提供的可靠且经济有效的服务上构建功能,可以实现复杂的企业应用程序。这些 Web 服务本身驻留在您的环境之外的云中,具备极高的可用性。只需根据使用的资源付费,不需要提前付费。因为硬件由 Amazon 维护和服务,所以您也不需要承担维护费用。
|
这个虚拟的基础设施大大降低了当今 Web 环境中的 “贫富差异”。您可以在几分钟内快速地获得一个基础设施,而这在真实的 IT 工作室中可能会花费几周时间。要点在于这个基础设施是弹性的,可以根据需求扩展和收缩。世界各地的公司都可以使用这个弹性的计算基础设施(见边栏)。
公司不再需要承担高额的基础设施投资和维护成本,这为创新提供了更大的机会。现在,您可以把注意力集中在业务思想上,而不需要为服务器操心,不需要担心磁盘空间不足等问题。根据 Amazon 的估计,企业把大约 70% 的时间花在构建和维护基础设施上,在推动企业发展的思想上实际上只花费 30% 的时间。Amazon 会处理与硬件和基础设施相关的繁琐工作,并确保其高可用性,您只需关注如何把您的思想变成现实。
下面是这个全 Web 范围的基础设施的主要元素,它们提供几乎所有应用程序最常用的构建块:
可以根据需要结合使用这些服务;它们能够很好地相互协作。因为这些服务在 Amazon 环境中运行,它们之间的所有通信通常非常快。
|
Amazon Web Services 的用户可以使用两个支持级别:
Amazon 在一个所有人都可访问的 指示板 上公布所有 Web 服务的健康状态;当服务出现任何问题时,都会更新这个指示板。在任何服务停止运行期间,Amazon Web Services 团队会每隔 15-30 分钟发布更新信息,直到问题被解决。
Amazon 为与每个服务进行交互提供了基于标准的 SOAP 和 REST 接口。Amazon 和第三方提供多种语言的开发人员库,包括 Ruby、Python、Java™、Erlang 和 PHP,可以使用这些库与服务通信。还可以使用命令行工具管理 EC2 上的计算资源。REST 接口很容易使用;可以用任何编程语言编写客户机,通过 HTTP 向 Web 服务发出请求。
用 S3 进行存储
Amazon Simple Storage Service (S3) 提供一个用于数据存储和获取的 Web 服务接口。数据可以是任何类型的,可以从 Internet 上的任何地方存储和访问数据。可以在 S3 中存储任意数量的对象;存储的每个对象的大小可以从 1 字节到 5 GB。存储本身位于美国或欧盟。在创建 bucket (与操作系统中的文件夹概念相似)时,可以选择对象的存储位置。使用与 Amazon 电子商务网站的全球网络相同的数据存储基础设施存储数据,确保安全性。
对于存储在 S3 中的每个对象,可以指定访问限制,可以用简单的 HTTP 请求访问对象。甚至可以让对象可通过 BitTorrent 协议下载。
S3 让用户完全不必为存储空间、数据访问或数据安全性操心。甚至不必承担维护存储服务器的成本。
|
用 EC2 实现弹性计算
Amazon EC2 是一个 Web 服务,它让用户可以在几分钟内获得虚拟机器,根据需要轻松地扩展或收缩计算能力。您只需为实际使用的计算时间付费。如果需要增加计算能力,可以快速地启动虚拟实例;当需求下降时,可以马上终止它们。
这些实例基于 Linux®,可以运行您需要的任何应用程序或软件。您可以控制每个实例。EC2 环境本身基于在剑桥大学开发的开放源码的 Xen 系统管理程序。Amazon 允许创建 Amazon 机器映像 (AMI) 作为实例的模板。可以通过指定权限控制对实例的访问。可以用这些实例做任何事;惟一的限制是,它们必须是基于 Linux 的映像。最近,Amazon 宣布与 Sun Microsystems 合作提供 Open Solaris 支持,但是 EC2 可用的大多数免费和商业预构建映像是基于 Linux 的。
Amazon EC2 提供真正全 Web 范围的计算,很容易扩展和收缩计算资源。您可以完全控制在 Amazon 数据中心中运行的这个计算环境。Amazon 提供五种服务器类型;可以选择适合自己应用程序需要的服务器类型。服务器的范围从普通的单核 x86 服务器直到八核 x86_64 服务器。可以把实例放在不同的地理位置或可用性区中,从而确保对抗故障的能力。Amazon 最近还引入了弹性 IP 地址的概念,弹性 IP 地址可以动态地分配给实例。
用 Amazon Simple Queue Service 实现可靠的消息传递
Amazon Simple Queue Service (SQS) 允许访问 Amazon 提供的可靠的消息传递基础设施。可以使用简单的基于 REST 的 HTTP 请求在任何地方发送和接收消息。不需要安装和配置任何东西。可以创建任意数量的队列,发送任意数量的消息。Amazon 把消息存储在多个服务器和数据中心中,从而提供消息传递系统所需的冗余和可靠性。每个消息最多可以包含 8KB 的文本数据。可以在消息中使用的 Unicode 字符只包括
#x9 | #xA | #xD | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to #x10FFFF]。
每个队列可以有一个可配置的可见性超时周期,用来控制多个读者对队列的访问。一个应用程序从队列中读取一个消息之后,其他读者就看不到这个消息,直到超时周期期满为止。在超时周期期满之后,消息重新出现在队列中,另一个读者进程就可以处理它。
SQS 与其他 Amazon Web Services 很好地集成。可以使用 SQS 构建松散耦合的系统;在这种系统中,EC2 实例可以通过向 SQS 发送消息相互通信并整合工作流。还可以使用队列为应用程序构建一个自愈合、自动扩展的基于 EC2 的基础设施。可以使用 SQS 提供的身份验证机制保护队列中的消息,防止未授权的访问。
用 Amazon SimpleDB 进行数据集处理
Amazon SimpleDB (SDB) 是一个用于存储、处理和查询结构化数据集的 Web 服务。它并不是传统意义上的关系数据库,而是一个高可用的模式,是云中的非结构化数据存储,可以使用它存储和获取包含键的值。每组包含键的值需要一个惟一的条目名;条目本身划分为域。每个条目可以包含最多 256 个键-值对。可以在每个域中对自己的数据集执行查询。SDB 当前还不支持垮域查询。
SDB 便于使用,提供关系数据库的大多数功能。SDB 的维护比典型的数据库简单得多,因为不需要设置或配置任何东西。Amazon 负责所有管理任务。Amazon 自动地为数据编制索引,可以在任何时候任何地方访问索引。不受模式限制的关键优点是,能够动态地插入数据和添加新的列或键。
SDB 是 Amazon 基础设施的组成部分,会在幕后自动地扩展。您可以把注意力放在更重要的方面。同样,只需为实际使用的数据集资源付费。
可伸缩的体系结构
Amazon Web Services 通过提供以下特性帮助实现可伸缩的系统:
准备
为了通过这个 “用 Amazon Web Services 进行云计算” 系列中的其他文章详细了解这些服务,需要注册一个 Amazon Web Services 账户(见 参考资料)。它会提供公共和私有安全访问密钥以及 x.509 安全证书,在 “第 2 部分:用 Amazon Simple Storage Service (S3) 在云中存储数据” 中开始使用各种库时需要这些密钥和安全证书。
用于与这些 Web 服务进行交互的工具和库有用多种语言编写的不同版本。本系列中的文章力求与语言无关,提供多种语言的示例,但是熟悉 Java、Ruby 或 Python 会有帮助。
结束语
在本文中,介绍了 Amazon 的云计算环境,概述了这个基础设施的四个主要部分。本系列的后续文章详细讨论每个 Amazon Web Service,以及用于利用这个虚拟基础设施构建应用程序的各种库和工具。