作者: Chuanhui | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
本文链接地址: http://www.nosqlnotes.net/archives/250
AWS整体介绍
Amazon平台的产品分为几个部分:
- 计算类:包含弹性计算云(EC2)和弹性MapReduce(Elastic MapReduce)这两个产品。EC2几乎可以认为是迄今为止云计算领域最为成功的产品,通俗地将,就是提供虚拟机。EC2的创新在于允许用户根据需求动态改变虚拟机实例的类型及数量,技术上支持容错并在收费模式上支持按使用量付费,而不是预付费。弹性MapReduce将Hadoop MapReduce搬到云环境中,大量EC2实例动态地成为执行大规模MapReduce计算任务的工作机。
- 存储类:存储类产品较多,包括弹性块存储EBS,简单消息存储SQS,Blob对象存储S3,表格存储系统Simpledb和DynamoDB以及分布式数据库系统RDS。其中,EBS相当于一个分布式块设备,可以直接挂载在EC2实例上,用于替代EC2实例本地存储,从而增强EC2可靠性。另外,S3中的Blob对象能够通过CloudFront缓存到不同地理位置的CDN节点,从而提高访问性能。Simpledb和DynamoDB是分布式表格系统,支持单表的简单操作;RDS是分布式数据库,目前支持Mysql以及Oracle两种数据库。SQS主要用于支持多个任务之间的消息传递,解除任务之间的耦合。
- 工具支持:AWS支持多种开发语言,提供Java、Rupy、Python、PHP、Windows &.NET 以及Android和iOS的工具集。工具集中包含各种语言的SDK,程序自动部署以及各种管理工具。另外,AWS通过CloudWatch系统提供丰富的监控功能。
AWS平台引入了区域(Zone)的概念。它将区域分为两种:地理区域(Region Zone)和可用区域(Availability Zone),其中地理区域是按照实际的地理位置划分的,而可用区域一般是按照数据中心划分的。
如上图,假设用户的网站MyWebSite.com托管在AWS平台的某个可用区域中。用户将Web应用上传到EC2实例中,EC2一般分成多个自动扩展(Auto Scaling)组,并通过弹性负载均衡(Elastic Load Balancing)组件进行负载均衡。用户的Web应用可以访问AWS平台上的存储类服务,包括EBS,S3,Simpledb,DynamoDB,RDS以及SQS。网站上的Blob数据,如视频,图片将通过DNS定位到Amazon CloudFront。CloudFront首先在本地缓存节点查找Blob对象,如果不存在,将请求源站获取S3中存储的Blob对象,这一步操作称为回源。AWS CloudWatch对AWS平台上运行的所有服务及应用程序进行监控。
Amazon EC2
相比传统的虚拟机托管,EC2的最大特点是允许用户根据需求动态调整运行的实例类型和数量,实现按需付费。为了支持这种灵活性,EC2需要在技术上支持容错以及更好的安全性。
架构
Amazon EC2平台主要包含如下部分:
- EC2实例
AMI(Amazon Machine Image)是Amazon虚拟机镜像文件,它是一个可以将用户的应用程序、配置等一起打包的加密机器镜像。用户创建好AMI后,部署在EC2平台上运行,称为一个EC2实例。每个实例自身包含一个本地存储模块(Instance Local Store),临时存放用户数据。如果EC2实例运行过程中出现故障或者实例被终止,存储在其中的数据将会丢失。因此,Amazon建议将重要的数据保存在EBS中以增强可靠性。
- 弹性块存储
弹性块存储(EBS)映射为EC2实例上的块设备,与EC2配合使用。EBS允许用户创建卷(Volume),每个卷可以作为一个设备挂载到EC2实例上。数据在EBS中存储多份,从而保证高可靠性。另外,EBS提供了增量快照功能,可以将当前卷的状态快照增量备份到S3中。假设EBS卷有100G数据,其中只有5GB的数据从上次快照操作以后产生了变化,那么,仅仅需要将这5GB变化的数据备份到S3。
- 弹性负载均衡
弹性负载均衡自动地将流量分发给多个EC2实例,并且在一定程度上支持容错。弹性负载均衡功能可以识别出应用实例的状态,当某个实例出现故障时,它会自动将流量路由到健康的实例上。
EC2存储
EC2本地存储是实例自带的磁盘空间,但它并不是持久的,也就是说这个实例所在的节点出现故障时,相应的磁盘空间也会随之清空,本地存储上的数据随时有丢失的风险。
为了解决本地存储不可靠问题,EC2推出了EBS,数据在EBS中自动在同一个可用区域内复制多份。EBS通过卷来组织数据,每个EBS卷只能挂载到一个EC2实例。EBS卷并不与实例绑定,而是与用户帐号绑定。当EC2实例发生故障时,用户可以在新启动的EC2实例上重新挂载EBS卷。另外,EBS能够以快照的形式将数据增量备份到S3,而S3的数据分布在多个可用区域,进一步增强了可靠性。EBS的设计原理如下:
如上图,EBS包含两个部分:EBS控制层(EBS control plane)及EBS存储节点。EBS客户端通过EBS control plane创建逻辑卷,获取逻辑卷每个副本所在的EBS存储节点位置,然后请求EBS存储节点读写逻辑卷数据。每个逻辑卷存储在多个EBS节点上,多个副本之间数据强同步,其中有一个副本为Primary,其它的为Secondary。当Primary往Secondary传输数据失败时,将请求EBS control plane选取新的EBS节点增加副本,这个过程称为重新镜像(re-mirroring)。EBS control plane负责每个逻辑卷的Primary副本选取,如果Primary出现故障,将选择某个Secondary副本为新的Primary。EC2实例通过EBS客户端访问EBS系统,它们之间遵守一定的协议,比如网络块设备(Network Block Device,NBD)协议,从而EC2实例访问远程EBS节点上的逻辑卷与访问本地的块设备没有差别。
自动缩放
自动缩放(Auto Scaling)可以根据用户自定义的条件,自动调整EC2的计算能力。多个EC2实例组成一个自动缩放组(Auto Scaling Group),当组内的实例负载过高,比如CPU平均使用率超过70%时,可以定义缩放规则自动增加EC2实例;同样地,当组内的实例负载过低时,可以自动缩小EC2实例规模以降低成本。
EC2根据计算能力将实例分为多种类型,如下表:
资源 |
Small |
Large |
Extra Large |
High-CPU Medium |
High-CPU Extra Large |
平台 |
32位 |
64位 |
64位 |
64位 |
64位 |
CPU |
1ECU |
4ECU |
8ECU |
5ECU |
20ECU |
内存 |
1.7GB |
7.5GB |
15GB |
1.7GB |
7GB |
存储容量 |
160GB |
850GB |
1690GB |
350GB |
1690GB |
EC2的一个计算单元称为一个ECU(EC2 Compute Unit),其计算能力相当于1个1.0GHz 2007 Xeon处理器。EC2平台不支持虚拟机实例在线迁移,如果用户需要调整实例类型,EC2内部实现时逻辑上分为两步:a) 终止原有的EC2实例;b) 根据一定的策略(比如负载)动态选择新的服务器节点启动新的EC2实例。自动缩放功能一般会配合弹性负载均衡功能一起使用,弹性负载均衡组件能够自动将流量转发给新实例。
网络路由
通过自动缩放技术,当EC2平台检测到某个实例出现故障时,将动态选择新的节点启动新实例,每个实例重新启动后它的公共IP地址都会发生变化。Internet用户通过域名访问EC2实例,然而,需要一段比较长的时间才能更新公共IP地址与DNS之间的映射关系。为了解决这个问题,EC2提供了两种方式:
- 弹性负载均衡:EC2新实例重启后通知弹性负载均衡组件,弹性负载均衡组件能够自动将流量切换到新实例。
- 弹性IP地址:弹性IP地址和用户账号而不是和某个特定的实例绑定,EC2用户可以将DNS域名设置为指向弹性IP地址。新实例启动时,EC2用户只需要使用管理工具将弹性IP地址与新的实例关联起来,Internet用户感觉不到任何差异。