Amazon Dynamo阅读笔记(一)

Amazon Dynamo阅读笔记

摘要:
大规模系统的可靠性是Amazon面临的巨大挑战之一,Amazon.com平台,为全球许多客户提供服务,它构建于成千上万的服务器之上,由许许多多网络基础设施组成。
在这一规模中,故障时时刻刻都在发生,这对系统的可靠性与扩展性提出了很高的要求。

Dynamo是一个高可用的kv(key value)存储系统,Amazon的核心服务使用它,以提供“永远在线(always on)”的用户体验。
Dynamo在某些故障场合,牺牲了一致性以换取更好的可用性;并大量使用对象版本(objectversioning)与应用协助的冲突协调(application-assisted conflict resolution)方式向开发人员提供接口。

1.简介
Amazon运行着一个全球性的电子商务平台,它使用全世界各处多个数据中心的千万台服务器为客户提供服务。
Amazon平台有严格的性能、可靠性、效率、扩展性方面的需求,可靠性(Reliability)是众多指标中最重要的一个指标,
短暂的系统问题都可能引起严重的经济损失,影响客户的信赖。

在运营和维护Amozon平台的过程中最大的收获是,一个可靠、可扩展(Scalability)的系统严重依赖于它的应用状态(Application State)如何管理。
Amazon采用一种高度去中心化(Decentralized)、松散耦合(loosely coupled)、面向服务(services oriented)的策略构建分布式集群服务器。
典型服务应用是:购物车。任何故障下,如磁盘故障、网络不稳、数据丢失等,客户都能够查看、添加物品到自己的购物车。
负责购物车管理的服务,需要能够随时写入和读取数据,这可能还要跨越多个数据中心,这需要始终可用的存储技术支持。

系统假设:故障是常态
由数以万计的基础设施组成的分布式系统中,任何时段,假设总有一些服务器、网络、磁盘故障等,系统的构建会建立在这个假定基础之上。

为了满足可靠性与扩展性需求,Amazon开发了许多存储技术,广为人知的有Amazon S3(SimpleStorageServie)。
这里再介绍Dynamo的设计与实现,另一个考度可用、可扩展的分布式存储系统。
Dynamo是一个kv存储系统,提供基于主键的存取服务,它能满足Amazon服务平台很多应用的需求。

Dynamo综合运用了一些著名的技术来实现可用性与可扩展性:
(1)使用一致性哈希(consistent hashing)进行数据分区(Data Partitioned)与复制(replicated);
(2)使用对象版本(object versioning)提供一致性;
(3)数据更新时,副本间的一致性使用仲裁技术(quorum-like)与去中心化(Decentralized)的副本同步协议;
(4)使用基于gossip的分布式故障检测以及成员(membership)协议;
核心思想,Dynamo是一个去中心化的系统,它只需要很少很少的人工管理。存储节点的添加、删除,不需要任何手工划分或重新分配并提供最终一致性(eventually-consistent)保证。

评论关闭。