本文原载于InfoQ中文站,版权所有,原文为从技术角度剖析云计算的架构,如需转载,请务必附带本声明,谢谢。在这里也要稍微谢谢InfoQ霍主编,如果不是他的坚持,这篇文章也不会像现在这样成熟,还有,InfoQ本身也是一个比较高端的技术网站,为Java、.NET、Ruby、SOA、敏捷、架构等领域提供及时而有深度的资讯、高端技术大会如QCon、免费迷你书下载如《架构师》等,大家如果没去过的话,请点击此!
在写《剖析云计算》(编者注:InfoQ中文站随后推出该Minibook)一书的时候,我发现虽然云计算本身有三层之分,也就是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在帐号管理和负载均衡这两方面都有非常好地支持。
虽然用一张这样简单的图和两个简短的例子来描述庞大的云计算整体架构的确是略显寒酸,但是应该能让大家从技术角度对云计算的架构有一个大致的了解。