Amazon平台的产品分为几个部分:
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平台上运行的所有服务及应用程序进行监控。
相比传统的虚拟机托管,EC2的最大特点是允许用户根据需求动态调整运行的实例类型和数量,实现按需付费。为了支持这种灵活性,EC2需要在技术上支持容错以及更好的安全性。
Amazon 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推出了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提供了两种方式: