12.5 云平台整体架构
云存储是云计算的存储部分,理解云存储架构的前提是理解云平台整体架构。云计算按照服务类型大致可以分为三类:基础设施即服务(IaaS)、平台即服务(PaaS)以及软件即服务(SaaS),如图12-3所示。
图 12-3 云计算服务类型
IaaS将硬件设备等基础资源以虚拟机的形式封装成服务供用户使用,如Amazon云计算AWS(Amazon Web Service)的弹性计算云EC2,PaaS进一步抽象硬件资源,提供用户应用程序的运行环境,开发者只需要将应用程序提交给PaaS平台,PaaS平台会自动完成程序部署,处理服务器故障,扩容等问题,典型的如(Google App Engine)GAE。另外,微软的云计算平台Windows Azure Platform也可大致归入这一类。SaaS的针对性更强,它将某些特定应用软件封转成服务,如Salesforce公司提供的在线客户端管理CRM服务,Google的企业应用套件Google Apps等。
本节首先分别介绍Amazon、Google以及Microsoft这三个云平台的整体架构,其中,Amazon提供IaaS服务,Google和Microsoft提供PaaS服务,接着介绍一般情况下云平台的整体架构。
12.5.1 Amazon云平台
Amazon Web Services(AWS)是Amazon构建的一个云计算平台的总称,它提供了一系列云服务。通过这些服务,用户能否访问和使用Amazon的存储和计算基础设施。如图12-4所示,AWS平台分为如下几个部分:
图 12-4 AWS平台整体架构
●计算类:核心产品为弹性计算云EC2(Elastic Computing)。EC2几乎可以认为是迄今为止云计算领域最为成功的产品,通俗地讲,就是提供虚拟机,用户的应用程序部署在EC2实例中。EC2架构的核心是弹性伸缩,当托管的应用程序访问量变化时能够自动增加或者减少EC2实例,并通过弹性负载均衡技术将访问请求分发到新增的EC2实例上。在计费模式上,EC2按照使用量计费,而不是采用传统的预付费方式。EBS(Elastic Block Store)是一个分布式块设备,可以像本地的磁盘一样直接挂载在EC2实例上,与本地磁盘不同的是,保存到EBS的数据会由EBS的管理节点自动复制到多个存储节点上。EC2实例的本地存储是不可靠的,如果EC2实例出现故障,本地存储上保存的数据将会丢失,而保存到EBS上的数据不会丢失。EBS用于替代EC2实例的本地存储,从而增强EC2可靠性。
●存储类:存储类产品较多,包括简单对象存储S3,表格存储系统SimpleDB、 DynamoDB、分布式关系数据库服务(Relational Datastore Service,RDS)以及简单消息存储(Simple Queue Service,SQS)。S3用于存储图片、照片、视频等大对象,为了提高访问性能,S3中的对象还能够通过CloudFront缓存到不同地理位置的内容分发网络(Content Delivery Network,CDN)节点。SimpleDB和DynamoDB是分布式表格系统,支持对一张表格进行读写操作;RDS是分布式数据库,目前支持MySQL以及Oracle两种数据库。SQS主要用于支持多个任务之间的消息传递,解除任务之间的耦合,相当于传统的消息中间件(Message Queue)。为了提高访问性能,可以使用ElasticCache缓存存储系统中的热点数据。
●工具支持:AWS支持多种开发语言,提供Java、Ruby、Python、PHP、Windows&.NET以及Android和iOS的工具集。工具集中包含各种语言的SDK、程序自动部署以及各种管理工具。另外,AWS通过CloudWatch系统提供丰富的监控功能。
AWS平台引入了区域(Zone)的概念。区域分为两种:地理区域(Region Zone)和可用区域(Availability Zone),其中地理区域是按照实际的地理位置划分的,而可用区域一般是按照数据中心划分的。
假设网站MyWebSite.com托管在AWS平台的某个可用区域中。AWS开发者将Web应用上传到AWS平台并部署到指定的EC2实例上。EC2实例一般分成多个自动扩展组(Auto Scaling Group),并通过弹性负载均衡(Elastic Load Balancing)技术将访问请求自动分发到自动扩展组内的EC2实例。开发者的Web应用可以使用AWS平台上的存储类服务,包括S3、SimpleDB、DynamoDB、RDS以及SQS。
网站上往往有一些大对象,比如图片、视频,这些大对象存储在S3系统中,并通过内容分发技术缓存到多个CloudFront节点。当Internet用户浏览MyWebSite.com时,可能会请求S3中的大对象,这样的请求将通过DNS按照一定的策略定位到CloudFront节点。CloudFront首先在本地缓存节点查找对象,如果不存在,将请求源站获取S3中存储的对象数据,这一步操作称为回源。