本文是学习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定位为高可靠,高可用,具有良好容错性的分布式存储架构,其主要面临的问题及解决方案如下表:
问题 |
采取的相关技术 |
数据均衡分布 |
改进的一致性哈希算法;数据备份 |
数据冲突处理 |
向量时钟(vector clock) |
临时故障处理 |
弱Quorum机制;数据回传机制(Hinted handoff) |
永久故障后的恢复 |
Merkle哈希树;反熵协议 |
成员资格以及错误检测 |
基于gossip的成员资格协议和错误检测 |
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。当系统有了多个版本的对象发