`
yinwufeng
  • 浏览: 283140 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

Dynamo学习

感觉写的不错的全拿来,有空再详读之。

转自:http://donghao.org/2008/10/dynamoni.html

 

      看了介绍Dynamo的论文,虽然英文不济,理解可能有误,但还是交流一下学习心得。Dynamo是亚马逊的key-value模式的存储平台,可用性和扩展性都很好,性能也不错:读写访问中99.9%的响应时间都在300ms内。

数据划分
      按分布式系统常用的哈希算法切分数据,分放在不同的node上。Read操作时,也是根 据key的哈希值寻找对应的node。Dynamo使用了Consistent Hashing算法【参考 http://tech.idv2.com/2008/07/24/memcached-004/ 】,node对应的不再是一个确定的hash值,而是一 个hash值范围,key的hash值落在这个范围内,则顺时针沿ring找,碰到的第一个node即为所需。
      Dynamo对Consistent Hashing算法的改进在于:它放在环上作为一个node的是一组机器(而不是memcached把一台机器作为node),这一组机器是通过同步机制保证数据一致的。
以上图为例,node1其实包含了多台机器,在一个node里宕了一台机或增加一台机,并不影响整个Dynamo对key的寻找。
      如果一个ring内的访问量大了,则可以在两个node间加入一个新node以缓解压力,这时会影响到其后继node的hash范围,需要调整数据。假设一 个ring中原本只有node2、node3、node4,在加入新的node1之后,原先从node2查询的部分key将改为从node1查 询,node1和node2中的数据就需要调整,主要是node1从node2中提取出属于它的数据,这样做需要选取性能压力不高的时候。(至于具体的调 整方法,从论文中没找到 -_-b)

数据同步
      Dynamo的一个node中的同步是由client端来“解决”的,使用所谓的(N, R, W)模型,其中,N表示node中机器的总数,R表示一个读请求需要的机器参与总数,W代表一个写请求需要的机器参与总数,这些值由client端配置。
      例如,一个node有5台机器(N=5),client发出写请求——广播到5台机,如果收到3个“写完成”的返回消息,即认为写成功 (W=3);client发出读请求——还是广播到5台机,如果收到2个“读完成”的返回消息,即认为读成功(R=2)。对于数据十分重要的应用(如金 融),配置可以为(5, 5, 5),即要求node中所有机器的写都成功;而对于数据读写访问量极高的应用,配置可以为(5, 1, 1)。
      通常W不等于N,于是,在某些情况下一个node内的机器上的数据可能会有不一致,这时Dynamo是通过将多个Read的返回结果“合并”来得出最终结果 的,使用了所谓Object Version和Vector clock的技术,即跟踪一个Object在不同机器上的版本变化,以确保当多个Read请求结果返回不一致时,能够更具其版本信息得出正确的结果。 Dynamo的这种做法是一种折衷,即为了同时保证读和写的效率,写操作不要求绝对同步,而把不同步可能产生的后果推给了读操作。

数据恢复
      Dynamo的一个node中一台机器建有一个Merkle Tree,当两台机器不一致时(如一台机器宕机一段时间),通过这个tree结构,可以快速定位不一致的Object来恢复数据。Merkle Tree又叫Hash Tree,它把key分成几个range,每个range算出一个hash值,作为叶子,再一层层合并计算上去,这样,从root开始比较hash值,就 可以快速找到哪几段range中的hash值变化了。

      个人感觉Dynamo的同步策略有点别扭,读采用广播,怎么保证读的效率呢?当然,也许人家有高招。

分享到:
评论

相关推荐

    Dynamo中文版教程

    Dynamo的生态是由Autodesk公司支持的,目前Dynamo的稳定版本是0.8版,用户可以访问DynamoBIM网站下载最新版本的DynamoBIM软件,并通过网站和论坛获得学习资源。同时,Dynamo的源代码托管在GitHub上,这是一个开源...

    revit+dynamo公路桥梁建模案例课件.rar

    5. **Dynamo与Revit的集成**:学习如何在Dynamo中调用Revit的功能,如读取和修改Revit模型数据,创建自定义的工作流程,以及实现参数化建模的高级功能。 6. **公路桥梁设计规范**:了解公路桥梁设计的基本规则和...

    Dynamo中文初级入门视频课程课件.rar

    《Dynamo中文初级入门视频课程课件》是一个针对初学者设计的全面教程,旨在帮助学习者掌握Dynamo这款强大的图形化编程工具在建筑信息模型(BIM)中的应用。Dynamo是Revit软件的一个插件,它允许用户通过直观的节点和...

    dynamo仿真工具dp

    通过学习和熟练掌握Dynamo,用户可以有效地模拟和分析各种复杂系统的动态行为,从而做出更好的决策和预测。无论你是学术研究者、工程师还是企业管理者,Dynamo都能成为你探索和理解动态系统的重要工具。

    Dynamo论文整理的PPT与中文PPT

    【Dynamo:一种可扩展的、高可用的分布式键值存储系统】 Dynamo是由亚马逊(Amazon)开发的一种分布式键值存储系统,...通过阅读和交流,我们可以从中学习如何设计和实现一个能够应对大规模、复杂环境的分布式存储系统。

    Dynamo开发手册

    综上所述,Dynamo开发手册内容丰富,从基础的编程语言、几何基础知识到高级的几何体操作和设计哲学,为用户提供了一个全面学习Dynamo的资源。通过学习这本手册,用户可以掌握如何使用Dynamo进行参数化设计和编程建模...

    dotnet-开源的Dynamo是AutodeskRevit的可视化编程工具

    7. **社区与资源**:Dynamo的开源性质促进了全球用户的交流和共享,用户可以在社区论坛上找到大量的学习资源、预设的工作流(称为“包”)以及解决方案。 在`.NET开发-其它杂项`这个标签下,我们可以理解到Dynamo是...

    amazon-dynamo-sosp2007.pdf

    在解析这篇标题为“amazon-...对于技术研究和工程实践而言,Dynamo提供了一个宝贵的学习对象,尤其对于那些旨在构建可扩展、高可用和高性能存储系统的开发者来说,Dynamo的实现细节和设计理念具有重要的参考价值。

    PyPI 官网下载 | dynamo-consistency-2.0.5.tar.gz

    《PyPI官网下载:深入理解dynamo-consistency-2.0.5.tar.gz》 PyPI(Python Package Index)是Python编程语言...对于想要深入掌握DynamoDB数据管理的开发者来说,理解和使用dynamo-consistency是一个重要的学习步骤。

    开源项目-guregu-dynamo.zip

    开源项目“guregu-dynamo”是一个专为简化Amazon DynamoDB操作而设计的客户端库。DynamoDB是亚马逊云服务...通过这样的开源项目,开发者不仅可以学习到实用的工具,还能深入了解DynamoDB的内部工作原理和最佳实践。

    Dynamo_language_guide 中文版.pdf

    用户可以通过学习这些基础知识,掌握Dynamo语言的编程基础。 几何基础知识是Dynamo语言应用于建筑设计和计算机辅助设计的基础,涵盖了点、向量、矩阵、几何体、曲面等概念。用户可以通过学习这些基础知识,掌握...

    Amazon S3 API Dynamo 介绍

    亚马逊S3 API Dynamo介绍 亚马逊的S3(Simple Storage ...Dynamo的架构设计和所采用的技术,比如版本控制、冲突解决机制等,都值得技术人员深入研究和学习,以便在实际工作中设计和实现更为先进可靠的云存储解决方案。

    Dynamo悬索桥案例文件

    在本文中,我们将深入探讨“Dynamo悬索桥参数化建模案例文件”这一主题,该文件涵盖了在BIM(建筑信息模型)...通过学习和应用这个案例,用户不仅可以提升自身的BIM技能,还能在实际工作中节省大量时间,提高设计质量。

    Dynamo Visual Programming for Design

    在当今快速发展的信息时代,BIM(建筑信息模型)技术的革新...如果想要更深入地学习Dynamo,可以进一步探索其提供更多高级功能的扩展包,以及参与更多在线课程和研讨会,与全球的Dynamo社区互动,获取最新信息和帮助。

    Dynamo_language_guide中文版.rar

    这份指南是教育领域的重要资源,它以中文的形式呈现,使得更多中国用户能够方便地学习和探索Dynamo的强大功能。 Dynamo是一款基于Revit平台的图形化编程界面,广泛应用于建筑信息模型(BIM)中的自动化和参数化设计...

    Dynamo_pokerphp_

    学习和理解OPPL语言是深入掌握"Dynamo_pokerphp_"的关键,这将帮助开发者自定义游戏特性,如创建新的扑克变种、设置游戏参数或添加特殊功能。 【数据库管理和玩家数据】 在扑克游戏中,玩家账户、游戏历史、积分、...

    Dynamo

    Dynamo-master 文件夹很可能是Dynamo的源代码仓库或者一个项目模板,其中包含了Dynamo的基本结构和文件,用户可能需要将其解压后导入到Dynamo环境中,以便于学习、开发或扩展Dynamo的功能。 总的来说,Dynamo是一个...

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

    【描述】"国外技术干货:amazon_dynamo_sosp2007.zip" 提示我们这个压缩包中的内容可能涵盖了Amazon Dynamo的设计理念、架构和技术细节,是针对Java开发者或对分布式系统感兴趣的学者的学习资料。 【标签】"java ...

    Dynamo绘制正弦曲线(.dyn文件)

    综上所述,通过学习"Dynamo绘制正弦曲线(.dyn文件)",我们可以掌握Dynamo的基本操作,包括导入库、创建数学函数、可视化输出以及与其他软件的集成。这对于提升工作效率,实现复杂设计的自动化有着显著的帮助。

Global site tag (gtag.js) - Google Analytics