`

Amazon Dynamo的NWR模型

阅读更多

Amazon Dynamo的NWR模型,把CAP的选择权交给了用户,让用户自己选择CAP中的哪两个。

 

N代表N个副本(replication),W代表写入数据时至少要写入W份副本才认为成功,R表示读取数据时至少要读取R份副本。对于R和W的选择,要求W+R > N。 

 

优化写性能(AP)

当我们需要优化写性能(写多读少)的时候,可以配置W = 1 (写完一个副本就成功,其他的副本就异步去慢慢复制都可以),如果N=3,那么根据公式W+R>N,则R = 3(读取数据的时候需要读3个副本以判断数据是否有冲突)。 这种情况只要写任何节点成功就认为成功,但是读的时候必须从所有的节点都读出数据。

 

优化读性能(CP)

当我们需要优化读性能(读多写少)的时候,可以配置 W=N(写完所有的副本才成功,只能同步复制),根据公式W+R>N,则 R=1(只需读一个副本即可)。这种情况任何一个节点读成功就认为成功,但是写的时候必须写所有三个节点成功才认为成功。

 

平衡读写性能(AC)

当我们数据不多,单台能搞定,且不需要容错和扩展性的时候,可以配置N=1(只有一份数据),根据公式W+R>N,则W=1,R=1。这种情况就简化为单机问题了。

 

 

多个线程会同时更新一份数据,在这种情况下怎么保证一致性?

 

Amazon Dynamo使用多版本并发控制,即乐观锁。如果用户A读出来的数据的版本是v1,当用户A计算完成后要更新数据时,却发现数据的版本号已经被更新成了v2,那么服务器就会拒绝更新导致更新失败,这时候就需要用户A自己处理冲突,方法为:重新读取v2数据,然后重新计算,重新更新。这里跟在svn提交代码发生冲突的情况是一样的,svn提交代码遇到冲突,需要先更新代码,解决冲突之后才能再次提交。

 

如何发现不同节点上面的副本不一致?

 

还有更糟糕的时候(W=1),用户A更新一个副本,在A的更新还没有异步复制到其他副本之前,如果用户B也更新了其他副本,那么数据就处于不一致的状态了,同样需要用户自己处理。

  

Amazon  Dynamo使用Vector Clock向量时钟)。每个节点各自记录自己的版本信息,包括:1)更新数据的节点名称,2)版本号

 

如下所示,有A、B和C三个节点,W=1,R=N=3:

 

  1. 节点A写了两次)一个写请求,第一次被节点A处理了。节点A会增加一个版本信息(A,1)。我们把这个时候的数据记做D1(A,1)。 然后另外一个对同样key的请求还是被节点A处理了于是有D2(A,2)。这个时候,D2是可以覆盖D1的,不会有冲突产生。
  2. 节点A的数据成功异步复制到节点B和节点C,节点A、节点B、节点C处于一致)现在我们假设D2异步复制到了所有其他节点(节点B节点C),节点B节点C收到的数据不是来自用户,而是由节点A异步复制(为了让所有副本保持一致)来的,所以节点B节点C不产生新的版本信息,因此现在节点B节点C所持有的数据还是D2(A,2)。于是节点A节点B节点C上的数据及其版本号都是一样的。
  3. 节点B写了一次)如果有一个新的写请求到了节点B上,于是节点B生成数据D3(A,2; B,1),意思是:数据D全局版本号为3,节点A更新了2次,节点B更新了1次。
  4. 节点C写了一次:节点B的改变还没异步复制到节点C之前节点C就写完了)如果D3还没有异步复制节点C的时候,节点C又处理了一个新的写请求,于是,节点C上的数据是D4(A,2; C,1)。
  5. 好,最精彩的事情来了:如果这个时候来了一个读请求,因为W=1,R=N=3,所以R会从所有三个节点(A、B、C)上读,此时,他会读到三个版本:
  • A结点:D2(A,2)
  • B结点:D3(A,2; B,1);
  • C结点:D4(A,2; C,1)

  6.这个时候可以判断出,D2已经是旧版本(已经包含在D3/D4中),可以舍弃。

  7.但是D3和D4是明显的版本冲突,只能交给用户自己去做版本冲突管理。就像前面说的svn源代码版本管理一样。

 

 

1
2
分享到:
评论

相关推荐

    复习Amazon Dynamo设计的一点分享

    Amazon Dynamo 是一种分布式键值存储系统,由亚马逊公司开发并应用于其内部的多个服务中,后来演变成Amazon DynamoDB,成为AWS(亚马逊网络服务)的一部分,提供云中的NoSQL数据库服务。Dynamo的设计理念强调高可用...

    亚马逊Dynamo设计中文版

    Dynamo虽然不直接作为Web服务对外开放,但它和其他Amazon的分布式技术一起支撑着如亚马逊简单存储服务(Amazon S3)等关键Web服务。因此,Dynamo的成功对于整个亚马逊的业务稳定性具有至关重要的作用。 ### 研究与...

    amazon-dynamo-sosp2007.pdf

    在解析这篇标题为“amazon-dynamo-sosp2007.pdf”的文档内容时,我们首先关注的是分布式键值存储系统Dynamo的核心技术和设计理念。Dynamo由亚马逊公司开发,是其核心服务之一,特别针对高可用性进行设计,以便能够...

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

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

    Amazon’s Dynamo簡介部份

    亚马逊运行一个全球性的电子商务平台,为数以百万计的顾客提供服务,在峰值时间会使用分布在世界各地的数万台服务器。出于性能、可用性和效率的考虑,亚马逊平台有着严格的操作要求,为了支持平台的可持续发展,系统...

    \Amazon's Dynamo 中文.pdf

    ### Dynamo:Amazon的高可用性键-值存储系统 #### 原著:Werner Vogels #### 翻译: quest.run **背景与概述** Amazon 的 Dynamo 是一款为解决大规模、高可用性键-值存储需求而设计的系统。Dynamo 的目标在于为...

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

    Revit和Dynamo是两种在建筑信息模型(BIM)领域广泛应用的软件工具。Revit是由Autodesk公司开发的专业建筑设计、结构工程和机械系统建模软件,它允许用户创建详细的三维建筑模型,包括建筑、结构和MEP(机械、电气、...

    Dynamo中文版教程

    Dynamo是一款开源的可视化编程平台,特别为设计师而设计,它能够帮助设计从业者利用可视化编程的方法来解决设计问题,并创造自己的工具。Dynamo中版教程旨在引导用户通过一系列的步骤来理解和掌握Dynamo的使用,内容...

    自己收集的Dynamo节点包packages.zip

    Dynamo是一款流行的图形化编程工具,主要用于建筑信息模型(BIM)软件Revit中的自动化和参数化设计。节点包是Dynamo生态系统的重要组成部分,它们扩展了Dynamo的基本功能,提供了各种定制的工作流和功能。 描述中...

    dynamo仿真工具dp

    - **协作与共享**:Dynamo支持模型的导出和导入,使得团队成员间可以方便地共享和讨论模型,提高了工作效率。 3. **Dynamo与C语言比较**: - **易用性**:C语言是一种底层编程语言,需要程序员具备较高的编程技能...

    桥墩dynamo样例文件

    桥墩布置的dynamo文件,利用dynamo运行此文件可以快速的建立桥墩模型。

    Amazon S3 API Dynamo 介绍

    亚马逊S3 API Dynamo介绍 亚马逊的S3(Simple Storage Service)是一个功能强大的云存储服务,而Dynamo则是在其背后作为核心存储技术之一。为了设计和实现分布式的、高可靠的企业云存储平台,技术人员可以借鉴Dynamo...

    AmazonDynamoDB:受亚马逊Dynamo设计启发的分布式键值存储

    亚马逊的迷你发电机 ================================================== ======= Dynamo(键值存储)的简化版,内容包括: ID空间分区/重新分区。 基于环的路由 节点加入 基于仲裁的复制 发生故障后从复制的...

    dynamo节点包.rar

    《Dynamo节点包详解》 在数字化设计领域,Dynamo作为一种强大的图形化编程工具,深受建筑、工程和设计行业的喜爱。它以其直观易用的界面和丰富的功能,为用户提供了自定义工作流程和自动化设计的可能性。本文将深入...

    Dynamo2.rar Dynamo2.rar Dynamo2.rar

    Dynamo2.rar Dynamo2.rar Dynamo2.rar Dynamo2.rar Dynamo2.rar Dynamo2.rar Dynamo2.rar Dynamo2.rar Dynamo2.rar

    基于Dynamo+SAP2...楼梯壳元计算模型参数化建模-文志彬.pdf

    "基于Dynamo+SAP2000螺旋钢楼梯壳元计算模型参数化建模" 基于Dynamo+SAP2000螺旋钢楼梯壳元计算模型参数化建模是建筑结构设计和BIM技术研发应用的重要方向。为了提高螺旋钢楼梯壳元计算模型的创建效率,将参数化...

    Dynamo论文整理的PPT与中文PPT

    Dynamo是由亚马逊(Amazon)开发的一种分布式键值存储系统,旨在为大规模在线服务提供高可用性、强一致性和可扩展性的数据存储解决方案。这篇论文是云计算领域的经典之作,对后来的NoSQL数据库设计产生了深远影响。 ...

    深入研究Cassandra后重读Dynamo

    在深入了解Cassandra数据库之后,再次回顾Amazon Dynamo的论文,本文旨在探讨两者之间的架构差异及其潜在的问题。经过一系列的实践经验和理论分析,本文作者得出了一些关于Dynamo架构的负面结论,并结合当前...

Global site tag (gtag.js) - Google Analytics