05Amazon云计算AWS
为专业课复习用
介绍
Amazon Web Service(AWS)
Amazon云的提出
IaaS:将硬件设备等基础资源封装成服务供用户使用
Amazon提供的服务主要包括
- 弹性计算云EC2
- 简单存储服务S3
- 简单数据库服务Simple DB
- 简单队列服务SQS
- 弹性MapReduce服务
- 内容推送服务CloudFront
- 电子商务服务DevPay
- 灵活支付服务FPS
🌿基础存储架构Dynamo
🌿Amazon平台基础存储架构:Dynamo
Amazon平台的架构是完全的分布式、去中心化
需求——Amazon平台中有很多服务对存储的需求只是读取、写入,(满足简单的键/值式存储)
🌿Dynamo
- 简单的键/值方式存储数据,不支持复杂的查询
- 存储的是数据值的原始形式(bit),不解析数据的具体内容、不识别任何数据结构,这使得它几乎可以处理所有的数据类型
🌿Dynamo需要解决的主要问题及解决方案
问题 | 采取的相关技术 |
---|---|
数据均衡分布 | 改进的一致性哈希算法 |
数据备份 | 参数可调的quorum机制 |
数据冲突处理 | 向量时钟Vector Clock |
成员资格及错误检测 | 基于Gossip协议的成员资格和错误检测 |
临时故障处理 | Hinted handoff(数据回传机制) |
永久故障处理 | Merkle哈希树 |
Dynamo的存储节点
Dynamo中的存储节点呈无中心的环状分布。
两个基本概念
preference list
存储与某个特定键值相对应的数据的节点列表
coordinator
执行一次读或写操作的节点
通常,coordinator 是 preference list 上的第一个节点
Dynamo架构的主要技术
数据均衡分布的问题
Dynamo采用了分布式的数据存储架构,均衡的数据分布可以保证负载平衡和系统良好的扩展性。
因此,各个节点上数据的均衡性是影响Dynamo性能的关键问题。
取模分配方式:如果增加一台主机,会有大量的数据进行迁移
🌿🌿🌿一致性哈希算法
一致性哈希算法是目前主流的分布式哈希表(Distributed Hash Table,DHT)协议之一
一致性哈希算法除了能够保证哈希运算结果充分分散到整个环上外,还能保证在添加或删除设备节点时只会影响到其在哈希环中的前驱设备节点,而不会对其他设备节点产生影响。
一致性哈希算法可以大大降低在添加或删除节点时引起的节点间的数据传输开销
改进的一致性哈希算法
Dynamo中引入了虚拟节点的概念
每个虚拟节点都隶属于某一个实际的物理节点,一个物理节点根据其性能的差异被分为一个或多个虚拟节点。
各个虚拟节点的能力基本相当,并随机分布在哈希环上。
Dynamo将整个哈希环划分成Q等份,每个等份称为一个数据分区(Partition)
在存储数据时,每个数据会被先分配到某个数据分区,再根据负责该数据分区的虚拟节点,最终确定其所存储的物理节点。
数据分区的好处
- 减小数据分布不均衡的可能性
- 添加或删除设备节点时引起较小的数据传输
改进的一致性哈希算法的优势
- 负载均衡
- 屏蔽节点处理能力差异
数据备份
可以参照上面的数据分区的图来看
- 在Dynamo中,每个数据的副本备份存储在哈希环顺时针方向上该数据所在虚拟节点的后继节点中。
- 数据备份在存储数据的同时进行,会使每次写操作的延时变长。
- Dynamo中对写操作进行了优化,保证一个副本必须写入硬盘,其他副本只要写入节点的内存即返回写成功。
- 每个虚拟节点上实际存储了分配给它以及分配它的前N-1个前驱虚拟节点的数据。
参数可调的弱quorum机制
读写参数W、R、N
N:系统中每条记录的副本数
W:每次记录成功写操作需要写入的副本数
R:每次记录读请求最少需要读取的副本数。
满足R+W>N,用户即可自行配置R和W
数据冲突问题
分布式系统架构中通常考虑的三个因素
- 可靠性 Reliability
- 可用性 Availability
- 一致性 Consistency
Why数据冲突?
- Dynamo选择通过牺牲一致性来保证系统的可靠性和可用性,没有采用强一致性模型而采用了最终一致性模型。
- 由于Dynamo中可能出现同一个数据被多个节点同时更新的情况,且无法保证数据副本的更新顺序,这有可能会导致数据冲突。
How解决数据冲突?
采用向量时钟技术。
Dynamo中的向量时钟通过[node, counter]
对 来表示。
node表示操作节点 counter是其对应的计数器,初始值为 0节点每进行一次更新操作则计数器加 1
成员资格及错误检测
由于Dynamo采用了无中心的架构,每个成员节点都需要保存其他节点的路由信息。
为了保证每个节点都能拥有最新的成员节点信息,Dynamo中采用了一种类似于Gossip(闲聊)协议的技术
Dynamo中还通过Gossip来实现错误检测。任何节点向其他节点发起通信后,如果对方没有回应,则认为对方节点失效
为了避免新加入的节点之间不能及时发现其他节点的存在,Dynamo中设置了一些种子节点(Seed Node)。种子节点和所有的节点都有联系。当新节点加入时,它扮演一个中介的角色,使新加入节点之间互相感知。
- 自底向上每一层代表一次随机通信
- 第一层节点1将信息交换给节点2
- 第二层节点1和2同时开始随机选择其他节点交换信息
- 直到N个节点全部传遍
容错机制——临时故障处理机制
为了处理临时失效的节点,Dynamo中采用了一种带有监听的数据回传机制(Hinted Handoff) 当虚拟节点A失效后,会将数据临时存放在节点D的临时空间中,并在节点A重新可用后,由节点D将数据回传给节点A。
容错机制——永久性故障处理机制
Dynamo采用Merkle哈希树技术来加快检测和减少数据传输量