本文是学习AWS框架时做的笔记,主要参考《云计算》以及网上一些东西~
Amazon
云计算服务
AWS
主要包括以下模块:
Amzon平台基础存储架构
Dynamo
,弹性云计算
(Elastic Compute Cloud
,
EC2
),简单存储服务(Simple Storage Service,S3),简单数据库服务
Simple DB
,关系数据库服务
(Relational Database Service,RDS),简单队列服务(Simple Queue Service,SQS),弹性
MapReduce
服务,内容推送服务
CloudFront
等。
1.Amazon
平台基础存储架构:
Dynamo
Twitter
和
Facebook
的
Cassandra
架构以及
NoSQL
数据库等都应用
Dynamo
。
1.1 Dynamo
在
Amazon
服务平台的地位
如图是面向服务的
Amazon
平台基础架构,其是完全的分布式,去中心化的。
Dynamo
采用简单的键值方式存储数据,而非传统的关系型数据库方式。
Dynamo
存储数据值的原始形式,以
bit
形式存储,不解析数据的具体内容,不识别任何数据结构。
1.2 Dynamo
架构的主要技术
Dynamo
定位为高可靠,高可用,具有良好容错性的分布式存储架构,其主要面临的问题及解决方案如下表:
|
|
|
|
|
|
|
|
|
|
|
|
1.数据均衡分布问题(改进的一致性哈希算法+
数据备份
)
(1)一致性哈希算法
一致性哈希算法满足:
1.
平衡性:存储数据哈希完尽量均匀分布在所有节点上;
2.
单调性:新增加节点时,一部分旧节点内容会映射到新节点上,其他的旧节点之间的内容不会重新分配;
3.
分散性:由于分布式环境下,不同节点可能只看到一部分节点,导致同一内容映射到不同节点,需尽量避免或降低分散性;
4.
负载:另一角度看分散性,由于同一内容映射到不同节点,其负载变高。
一致性算法步骤:
1.
计算节点的哈希值,将节点分配到环上;
2.
计算数据的哈希值,按顺时针方向将其映射到最近的节点。
左图为一致性哈希算法,右图为增加节点时的示意图。
(2)Dynamo
采用的改进算法(引入虚拟节点)
由于一致性哈希函数是随机函数,在节点较少时可能造成环上节点数据不均匀,其也没有考虑不同节点的性能差异。因此,
Dynamo
引进虚拟节点,每个物理节点根据其性能分配不同数量的虚拟节点,每个虚拟节点能力相当,随机分布在哈希环空间中。
(3)数据备份
Dynamo
对数据进行冗余备份,一般副本数
N
为
3
,节点的数据副本保存在环上它的顺时针方向的后继节点中。如图,键
k
数据保存在虚拟节点
A
中,其副本保存在虚拟节点
B
,
C
中。
Dynamo
对数据写进行了优化:保证一个副本写入硬盘,其他副本写入内存即返回成功。
Dynamo
还保证相邻的节点位于不同的地区区域,如此某个数据中心瘫痪,保证数据在其他数据中心有副本。
2.数据冲突问题(向量时钟)
根据
CAP
理论,分布式系统的一致性
(Consistency),可用性(Availability),分区容忍性(Partition Tolerance)最多只能实现其中的二者,
Dynamo
选择牺牲一致性,采用最终一致性模型。
Dynamo
用向量时钟
(vector clock)来保证最终一致性。
Dynamo
中的向量时钟用
(node,counter)对表示,
node
代表节点,
counter
为计数器,初始为
0
,每发生一次事件加
1
。当系统有了多个版本的对象发