`
san_yun
  • 浏览: 2638272 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Dynamo: Amazon’s Highly Available Key-value Store

 
阅读更多

参考:http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

 

所谓key-value存储系统就是,系统提供两个提口,一是put,一是get,put的时候,传进key与value,就可以把数据写到系统里,get的时候,传进key,就可以获得相应的value。

key-value存储系统可以认为是从传统的关系数据库系统演化而成。传统的关系数据库在WEB应用中,存在性能、可扩展性、容灾等方面的问题,而观察发现,WEB应用中,大部分情况下不需要作关系查询,可以只支持key-value查询,以提高性能,可扩展性等

简 单来说,只需要维护一个HASH表或者B树一类的索引结构,然后把value存在硬盘上,就是一个简单的key-value存储系统了。但是如果数据量大 了,单机就存不下来了,或者能存下来,但是查询速度会比较慢,这时候就需要分多台机器储存了。这时候就进化成一个分布式的key-value存储系统了。 我想国内很多公司山寨的KEY-VALUE存储系统就只做到这一步。

一般的做法是对key取模,然后分到相应的机器上。但是这样新增机器或者减少机器的时候会很麻烦,所以Dynamo用的是consistent hash(http://hi.baidu.com/rodimus/blog/item/6f23a9c4512b2dc638db4928.html ),用的时候,是把一台机器映射成多个节点,一方面是使数据分布更均匀,另一方面性能好的机器映射成更多的节点,从而充分利用机器性能

至 此数据已经可以存下来了,但是如果有机器坏了怎么办?需要作备份,一般认为两个备份不够,需要三个备份。最简单的备份方式是有几台完全相同的机器互为备 分,但是这样修改备份数的话,会比较麻烦。可能还有别的考虑吧,Dynamo的做法是,一台机器是部分数据的首选,同时是多台机器的备分。

作 备份容易,难的是作了备份之后,每次作写操作都需要写多台机器,性能下降了,极端情况下,有一台坏了,就是写不成功。所以写的时候,可以在部分机器写成功 后就返回,剩下的后台再继续写。这样写简单了,读就麻烦了。读的时候如果只读一台机器,可能会读到旧的数据,如果读多台机器,可能会读到不同的数据,一般 情况下,如果有N个备份,写W台,读R台,保证W+R>N,则至少可以读到一份新的数据。读到的R份数据可能会不同,Vector clocks(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.142.3682&rep=rep1&type=pdf )理清各个版本的关系,具体的merge逻辑,由上层应用决定(在并发写的情况下,可能会有两份并行的数据,底层很难知道应该保留哪个),把merge后的数据,再回写到存储系统里。

作为长期运行的系统,迟早会有机器出故障的。系统小的时候,故障的频率低,可以手工修复。系统大了,就不行了。故障要分两种,一种是临时性的,一种是永久性的。

对 于临时性错误,每个key对于所有的机器有个优先级考虑,之前是选前N个来存储,现在改为前N个健康的机器存储,当A机器故障,而被迫把A的数据写往D的 时候,数据里带一个信息告诉D,这部分数据是属于A的,D会把这部分数据与原来属于它的数据分开存储,然后在A恢复后(需要周期性地探测),再把数据拷回 去。在A已经恢复,正在把数据拷回去的时候,读写会比较复杂。

有一种情况是,D也出问题了或者别的情况,反正现在没办法把D帮A存的数据搬到A上面去了。这种情况下,A复活后,需要从别备份机上拷贴贝数据。为了减少数量拷贝量,采用hash tree(http://hi.baidu.com/rodimus/blog/item/5787a5c84983691d7f3e6f3a.html )。hass tree可以使得同步的数据很少,但是维护的代价比较大。

至此系统已经可以运行了。但是随着数据的数据的变化,可能会增加或者移除机器,consisten hash可以保证冲击会很小,系统会自动地进行数据的迁移。

 

一般的所谓分布式系统,都会有一个中控机。但是Dynamo是没有的,这是一个P2P的系统,所有的机器之间用gossip-based protocol通信

分享到:
评论

相关推荐

    Dynamo:Amazon's Highly Available Key-value Store

    ### Dynamo:Amazon的高可用键值存储系统 #### 概述与背景 Dynamo是由Amazon开发的一款高度可扩展且高可用性的键值存储系统。它为Amazon的核心服务提供了支持,帮助其实现了“始终在线”的体验。由于Amazon作为...

    Werner_Vogels——Dynamo_amazon's_highly_available_key-value_store.pdf

    《Dynamo:Amazon的高可用键值存储系统》一文由Giuseppe DeCandia、Deniz Hastorun、Madan Jampani、Gunavardhan Kakulapati、Avinash Lakshman、Alex Pilchin、Swaminathan Sivasubramanian、Peter Vosshall及...

    Simple-Dynamo--Amazon-s-Key-Value-Store:Simple Dynamo,Amazon高可用键值存储的实现

    Simple-Dynamo-Amazon-S-Key-Value-Store Simple Dynamo是Amazon高可用键值存储的实现,该键值存储在针对移动集群的Android手持式系统上实现。 移动群集排列在CHORD环中,并实现分区,复制和故障处理,并支持并发...

    云计算系统中Key-Value数据管理研究.pdf

    Key-Value型的NoSQL数据库,如Amazon的Dynamo、Google的BigTable,是NoSQL数据库的典型代表,它们采用Key-Value数据模型来实现分布式存储,支持大规模数据的快速访问。 3. Key-Value数据存储 Key-Value数据存储系统...

    一致性hashing paper

    Dynamo: Amazon’s Highly Available Key-value Store Giuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman, Alex Pilchin, Swaminathan Sivasubramanian, Peter Vosshall...

    Practical Tips for Using MySQL as a Scalable Key-Value Store

    作者Sunny Gleason是分布式系统工程师,在亚马逊及Ning等公司拥有丰富的实践经验。本文将围绕MySQL作为键值存储的优势、NoSQL的核心概念以及如何在MySQL中实现键值存储模式展开讨论。 #### MySQL的特点 MySQL具备多...

    译文Dynamo:Amazon的高可用性的键-值存储系统

    【Dynamo:Amazon的高可用性键值存储系统】 Dynamo是Amazon为了应对大规模系统可靠性挑战而设计的一个高度可用的键值存储系统。在Amazon.com这样的全球性电商平台中,系统的可靠性至关重要,因为任何中断都会对经济...

    译文Dynamo:Amazon的高可用性的键-值存储系统1

    【Dynamo:Amazon的高可用性的键-值存储系统】是Amazon为了应对大规模分布式系统中的可靠性挑战而设计和实现的一个关键存储技术。该系统的主要目标是在各种故障情况下保证服务的持续可用性,即使面临硬件故障、网络...

    Amazon-Dynamo-Style-Key-Value-Storage

    亚马逊迪纳摩风格键值存储 Dynamo的简化版本。 主要包括三个部分: 分区 复写 故障处理 主要目标是同时提供可用性和线性化能力。 即使出现故障,它也应始终成功执行读写操作。 同时,读操作应始终返回最新值。 SHA...

    iiif-dynamo:动态的SPARQL到JSON-LD序列化器

    iiif-dynamo 一个Apache Camel Jetty实现,该实现使用SPARQL查询Web批注并动态构造IIIF清单和集合。 它还使用Redis缓存查询结果以产生瞬时响应。配置de.ubleipzig.dynamo.cfg de.ubleipzig.webanno.Constants建造这...

    译文Dynamo:Amazon的高可用性的键-值存储系统.pdf

    【Dynamo:Amazon的高可用性键值存储系统】 Dynamo是Amazon为了应对大规模系统可靠性挑战而设计的一个高度可用的键值存储系统。在Amazon.com这样的全球性电商平台中,任何系统中断都可能导致重大的经济损失和客户...

    Redis实战.pdf

    1.1.2 Dynamo:由亚马逊开发,强调高度可扩展性和容错性,采用无中心结构。 1.1.3 memcachedb:基于memcached的持久化版本,提供简单的键值存储功能。 1.1.4 Cassandra:由Facebook开发,是一个分布式NoSQL数据库,...

    国外技术干货:amazon-dynamo-sosp2007.zip

    【标题】"国外技术干货:amazon-dynamo-sosp2007.zip" 指向的是一个关于Amazon Dynamo的深度解析资源包,该资源可能包含了2007年在SOSP(Symposium on Operating Systems Principles)会议上发表的亚马逊Dynamo论文...

    generator-angular-dynamo:用于 AngularJS + Dynamo 的 Yeoman 生成器

    Angular-Dynamo 生成器用于和生成器。 Dynamo 是一个基于 Elixir 的微框架。 有关 AngularJS 与其他微框架的集成,请参阅 。安装安装 、 、 、 和 。 安装约曼: npm install -g yo安装 Angular-Dynamo 生成器: npm...

    所有架构师都应该至少读上两遍的10篇论文-系统架构

    5. **论文5:Eurosys '09 - "The Dynamo Paper: Amazon's Highly Available Key-value Store"** Dynamo是Amazon开发的分布式键值存储系统,强调可用性和分区容错性。它引入了基于一致哈希的分区策略和基于版本的...

    Python库 | cdk-dynamo-table-view-0.1.84.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:cdk-dynamo-table-view-0.1.84.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | cdk-dynamo-table-view-0.1.125.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:cdk-dynamo-table-view-0.1.125.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics