在写《剖析云计算》(编者注:InfoQ 中文站近期会推出该书电子版)一书的时候,我发现虽然云计算本身有三层之分,也就是 SaaS,PaaS 和 IaaS,但这种分层本身主要是从用户体验的角度来而言,比如,SaaS 主要将应用作为服务提供给客户,IaaS 是主要是将虚拟机等资源作为服务提供给用户。而本文将从技术角度来分析和总结云计算的架构。
综述
基于对现有的一些云计算产品的分析和我个人的一些经验,总结出一套云计算的架构,具体请看下图:
图 1: 云计算的架构
这套架构主要可分为四层,其中有三层是横向的,分别是显示层、中间件层和基础设施层,通过这三层技术能够提供非常丰富的云计算能力和友好的用户界面,还有一层是纵向的,称为管理层,是为了更好地管理和维护横向的三层而存在的。接下来将一个个地给大家介绍每个层次的作用和属于这个层次的主要技术。
显示层
这层主要是用于以友好的方式展现用户所需的内容,并会利用到下面中间件层提供的多种服务,主要有五种技术:
- HTML:标准的 Web 页面技术,现在主要以 HTML4 为主,但是将要推出的 HTML5 会在很多方面推动 Web 页面的发展,比如视频和本地存储等方面。
- JavaScript:一种用于 Web 页面的动态语言,通过 JavaScript,能够极大地丰富 Web 页面的功能,最流行的 JS 框架有 jQuery 和 Prototype。
- CSS:主要用于控制 Web 页面的外观,而且能使页面的内容与其表现形式之间进行优雅地分离。
- Flash:业界最常用的 RIA(Rich Internet Applications)技术,能够在现阶段提供 HTML 等技术所无法提供的基于 Web 的富应用,而且在用户体验方面,非常不错。
- Silverlight:来自业界巨擎微软的 RIA 技术,虽然其现在市场占有率稍逊于 Flash,但由于其可以使用 C#来进行编程,所以对开发者非常友好。
在显示层,大多数云计算产品都比较倾向 HTML、JavaScript 和 CSS 这对黄金组合,但是 Flash 和 Silverlight 等 RIA 技术也有一定的用武之地,比如 VMware vCloud 就采用了基于 Flash 的 Flex 技术,而微软的云计算产品肯定会在今后使用到 Silverlight。
中间件层
这层是承上启下的,它在下面的基础设施层所提供资源的基础上提供了多种服务,比如缓存服务和 REST 服务等,而且这些服务即可用于支撑显示层,也可以直接让用户调用,并主要有五种技术:
- REST:通过 REST 技术,能够非常方便和优雅地将中间件层所支撑的部分服务提供给调用者。
- 多租户:就是能让一个单独的应用实例可以为多个组织服务,而且保持良好的隔离性和安全性,并且通过这种技术,能有效地降低应用的购置和维护成本。
- 并行处理:为了处理海量的数据,需要利用庞大的 X86 集群进行规模巨大的并行处理,Google 的 MapReduce 是这方面的代表之作。
- 应用服务器:在原有的应用服务器的基础上为云计算做了一定程度的优化,比如用于 Google App Engine 的 Jetty 应用服务器。
- 分布式缓存:通过分布式缓存技术,不仅能有效地降低对后台服务器的压力,而且还能加快相应的反应速度,最著名的分布式缓存例子莫过于 Memcached。
对于很多 PaaS 平台,比如用于部署 Ruby 应用的 Heroku 云平台,应用服务器和分布式缓存都是必备的,同时 REST 技术也常用于对外的接口,多租户技术则主要用于 SaaS 应用的后台,比如用于支撑 Salesforce 的 Sales Cloud 等应用的 Force.com 多租户内核,而并行处理技术常被作为单独的服务推出,比如 Amazon 的 Elastic MapReduce。
基础设施层
这层作用是为给上面的中间件层或者用户准备其所需的计算和存储等资源,主要有四种技术:
- 虚拟化:也可以理解它为基础设施层的“多租户”,因为通过虚拟化技术,能够在一个物理服务器上生成多个虚拟机,并且能在这些虚拟机之间能实现全面的隔离,这样不仅能减低服务器的购置成本,而且还能同时降低服务器的运维成本,成熟的 X86 虚拟化技术有 VMware 的 ESX 和开源的 Xen。
- 分布式存储:为了承载海量的数据,同时也要保证这些数据的可管理性,所以需要一整套分布式的存储系统,在这方面,Google 的 GFS 是典范之作。
- 关系型数据库:基本是在原有的关系型数据库的基础上做了扩展和管理等方面的优化,使其在云中更适应。
- NoSQL:为了满足一些关系数据库所无法满足的目标,比如支撑海量的数据等,一些公司特地设计一批不是基于关系模型的数据库,比如 Google 的 BigTable 和 Facebook 的 Cassandra 等。
现在大多数的 IaaS 服务都是基于 Xen 的,比如 Amazon 的 EC2 等,但 VMware 也推出了基于 ESX 技术的 vCloud,同时业界也有几个基于关系型数据库的云服务,比如 Amazon 的 RDS(Relational Database Service)和 Windows Azure SDS(SQL Data Services)等。关于分布式存储和 NoSQL,它们已经被广泛用于云平台的后端,比如 Google App Engine 的 Datastore 就是基于 BigTable 和 GFS 这两个技术之上的,而 Amazon 则推出基于 NoSQL 技术的 Simple DB。
管理层
这层是为横向的三层服务的,并给这三层提供多种管理和维护等方面的技术,主要有下面这六个方面:
- 帐号管理:通过良好的帐号管理技术,能够在安全的条件下方便用户地登录,并方便管理员对帐号的管理。
- SLA监控:对各个层次运行的虚拟机,服务和应用等进行性能方面的监控,以使它们都能在满足预先设定的 SLA(Service Level Agreement)的情况下运行。
- 计费管理:也就是对每个用户所消耗的资源等进行统计,来准确地向用户索取费用。
- 安全管理:对数据,应用和帐号等 IT 资源采取全面地保护,使其免受犯罪分子和恶意程序的侵害。
- 负载均衡:通过将流量分发给一个应用或者服务的多个实例来应对突发情况,
- 运维管理:主要是使运维操作尽可能地专业和自动化,从而降低云计算中心的运维成本。
现在的云计算产品在帐号管理,计费管理和负载均衡这三个方面大都表现地不错,在这方面最突出的例子就是 Amazon 的 EC2,但可惜的是,大多数产品在 SLA 监控,安全管理和运维管理等方面还有所欠缺。
举例
接下来,将以 Salesforce 的 Sales Cloud 和 Google 的 App Engine 这两个著名的云计算产品为例,来帮助大家理解本文所提到的云计算架构:
Salesforce Sales Cloud
也就是之前的 Salesforce CRM(客户关系管理),属于云计算中的 SaaS 层,主要是通过在云中部署可定制化的 CRM 应用,来让企业用户在很低初始投入的情况下使用上 CRM,并且可根据自身的流程来进行灵活地定制,而且只需接入网络就能使用。下图为其在技术层面上大致的架构:
图2: Salesforce Sales Cloud
采用的主要技术:
- 显示层:基于 HTML、JavaScript 和 CSS 这对黄金组合。
- 中间件层:在此层,Salesforce 引入了多租户内核和为支撑此内核运行而经过定制的应用服务器。
- 基础设施层:虽然在后端还是使用在企业环境中很常见的 Oracle 数据库,但是其为了支撑上层的多租户内核做了很多的优化。
- 管理层:在安全管理方面,Salesforce 提供了多层保护,并支持 SSL 加密等技术,除此之外,其还在帐号管理、计费管理和负载均衡这三方面有不错地支持。
Google App Engine
App Engine 属于云计算中的 PaaS 层,其主要提供一个平台,来让用户在 Google 强大的基础设施上部署和运行应用程序,同时 App Engine 会根据应用所承受的负载来对应用所需的资源进行调整,并免去用户对应用和服务器等的维护工作,而且支持 Java 和 Python 这两种语言。由于 App Engine 属于 PaaS 平台,所以关于显示层的技术选择由应用的自身需要而定,与 App Engine 无关,关于 App Engine 在技术层面上大致的架构,具体请看下图:
图3: Google App Engine
采用的主要技术:
- 中间件层:既有经过定制化的应用服务器,比如上面已经提到过的 Jetty,也提供基于 Memcached 的分布式缓存服务。
- 基础设施层: 在分布式存储 GFS 的基础上提供了 NoSQL 数据库 BigTable 来对应用的数据进行持久化。
- 管理层:由于 App Engine 是基于 Google 强大的分布式基础设施,使其在运维管理技术方面非常出色,同时其计费管理能做到非常细粒度的 API 级计费,而且 App Engine 在帐号管理和负载均衡这两方面都有非常好地支持。
虽然用一张这样简单的图和两个简短的例子来描述庞大的云计算整体架构的确是略显寒酸,但是应该能让大家从技术角度对云计算的架构有一个大致的了解。
关于作者
吴朱华,北大硕士,PMP 认证,之前在 IBM 中国研究院参与过多个云计算产品的开发工作,现在专注于研发下一代云计算系统,并同时撰写《剖析云计算》一书。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论