Dynamo-Amzaon's Highly Available Key-value Store阅读笔记
摘要
亚马逊平台,基于成百上千万,分布于世界各地的服务器和网络组件,为众多网站提供服务。
本文呈现了Dynamo的设计与实现,亚马逊部分核心业务所使用的高度可用的实时在线键值存储系统。在特定的场景下牺牲了一定的一致性来维护可用性,对对象版本,冲突解决做了拓展,为开发者提供了新式的接口。
引言
Amazon:
高度去中心化,松散耦合(联系紧密却独立),面向服务的架构。
Dynamo:
1.综合多种知名技术来实现可拓展性和可用性;
2.保证最终一致性。
背景
现有的复制架构技术,过于局限,且太重视一致性,而导致可用性不高。
满足ACID性质的,可用性都不高。Dynamo不提供任何分离保证,且只允许单键更新。
Dynamo:
1.增量式拓展性
单次可以加入一台主机(节点)。
2.对称性
每个节点上的职责是一致的。
3.去中心化的
更偏向于点对点的去中心化技术。
4.异质性
可以根据机器的能力,分配相应比例的工作负载。
相关工作
P2P系统
- Freenet,Gnutella,P2P文件分享系统。
- Pastry,Chord,使用特定的路由机制,确保查询可以在一定的条数内得到回应。
- Oceanstore,提供在分布式数据上支持序列化更新,全局事务持久性存储服务。
分布式文件系统/数据库
- Ficus,Coda,牺牲了一致性来提高可用性。
- Farsite,通过复制架构来完成高度可用性和可拓展性。
- Google File System(GFS),单一中心服务器,多分支服务器分割存储。
- Bayou,分布式关系型数据库,支持无网操作,保证最终一致。
Dynamo:
支持无网状态下读写操作,高速读写,使用多种冲突解决机制,维护最终一致性,基于可靠网络环境设计。
架构
分布式架构要处理的问题:
- 负载均衡
- 错误检测
- 错误恢复
- 架构同步
- 过载处理
- 状态转换
- 并发控制
- 工作计划
- 请求编组
- 请求路由
- 系统监测与警报
- 配置管理
- 身份信息
本文专注于Dynamo的核心技术,如下表所示
Problem | Technique | Advantage |
---|---|---|
Partioning | Consistent Hashing | Incremental Scalability |
High Availability for writes | Vector clocks with reconciliation during reads | Version size is decoupled from update rates |
Handling temporary failures | Sloppy Quorum and hinted handoff | Provides high availability and durability guarantee when some of the replicas are not available. |
Recovering from permanent failures | Anti-entropy using Merkle trees | Synchronizes divergent replicas in the background. |
Membership and failure detection | Gossip-based membership protocol and failure detection. | Preserves symmetry and avoids having a centralized registry for storing membership and node liveness information. |
系统接口
get(key),返回内容,及与内容冲突矛盾的对象。
put(key,context,object),根据key确定确认对象写入位置,再将副本写到磁盘上。
分配算法
一致性哈希,分配到一个首尾相接的环空间上。一个节点对应环上多个位置节点。
一对多好处:
1.如果节点故障,可以将工作均派给相同节点。
2.新加入节点,可以从其他节点中获取工作内容。
3.满足了异质性。
复制架构
每个数据对象在多个站点上备份。
数据版本
Dynamo保证最终一致性,故而更新操作可以同时传播到全部站点。