http://catkang.github.io/2016/05/27/dynamo.html

Dynamo是Amazon开发的分布式存储系统,本文是阅读Dynamo论文后的总结:Dynamo: Amazon’s Highly Available Key-value Store。将从背景、定位、简介、问题及解决方案几个方面介绍Dynamo的整体设计思路。

背景

Dynamo是在Amazon所处的应用环境中因运而生的,其需要面对的问题和场景在互联网的业务中也是类似的:

大多数场景并不需要复杂的查询功能;

由于使用商用机作为服务器,导致机器或网络失败成为相对常见并需要妥善处理的场景;

为了提供良好的用户体验,服务需要极高的可用性和较好的性能;

随着业务量逐步增大,服务的处理能力也需要平滑提升。

定位

为了理解Dynamo的整体设计,了解其定位是很有必要的,因为从其定位中我们可以清楚的了解到系统关注的问题和可以放弃或妥协的点。针对上所述的背景,Dynamo提出了自己的基本定位:

仅提供简单的kv查询

高可用性

易扩展性

正是由于上述对自己的定位,Dynamo在设计中可以舍弃掉许多负担,如关系型数据库复杂的查询模型、对ACID的支持,对强一致性的追求,以及复杂的存储结构。同时,Dynamo认为其面对的是相对安全的内部网络环境,所以并没有处理安全或权限问题。

简介

Dynamo客户端使用put,get接口读写指定key所对应的数据;

将整个数据空间划分为不同分片后存储在不同节点上;

其通过分片复制和一系列故障发生时的应对方案来保证整个服务的高可用;

为了可用性Dynamo损失了一些一致性,可能发生的数据冲突有可能需要应用程序处理;

Dynamo去中心化的维护整个集群的成员及故障信息,并采用gossip同步。

问题及解决方案

1,数据分片

为了更好更灵活的操作管理存储的数据,对数据空间进行分片并将分片分配到不同存储机器是一个显而易见的不错的做法。Dynamo采用类似一致性哈希的方式进行分片的划分和分配。关于数据分片的算法,Dynamo经历了几个阶段的选择和进化。

传统的一致性hash:将机器节点随机对应在hash ring上,数据key所对应的hash值所在位置顺时针遇到的第一个节点负责自己所在的range。

优点:新节点加入,或旧节点退出时,只影响紧相邻的下一个节点

缺点:负载不均匀且不同的机器性能的不同没有考虑到

增加virtrual nodes的一致性hash:这时每个机器节点对应hash ring上的多个虚拟节点,可以根据机器性能方便的调节所负责的虚拟节点数

优点:充分考虑机器性能的不同且可以做到负载均衡

缺点:分片转移时,实现上需要对整个range进行遍历; 加入或删除节点时Merkle tree需要重新计算

数据空间等分Q份,T个机器节点时,每个机器分得S个分片,其中Q=T*S

优点:分片固定大小,可对应单个文件,因此容易加入或删除节点,且容易备份。

2,分片备份

为了系统高可用,Dynamo的每个分片都有N个副本,存储在hash ring上顺时针方向的N个节点上。这N个节点称为该数据的preference list。其中的每一个节点都可以对接受针对该数据的操作请求。

3,数据版本及冲突处理

由于preference list中的每个节点都可以对同一个数据进行处理,且为了高可用,用户写请求返回前并没有将数据同步到所有分片。当有大量并行访问或故障发生时,集群中的不同机器看到的同一个数据状态可能不同,这时就发生了冲突。Dynamo引入vector clock来在一定程度上缓解冲突的发生,并最终由应用端对冲突进行合并。

vector clock := list{ (node, counter), ...}

node := 机器id

counter := 该数据在node上的处理序序号

vector clock通过列出在数据在每个节点上的处理序列来发现不同vector clock之间的因果关系,其中每个(node, counter)可以看做是一个分量。

当某个vector clock的所有分量都小于另一个时,该vector clock便是另一个的因,可以被覆盖。Dynamo节点通过这种因果关系尽可能的处理冲突。

没有因果关系的所有vector clock需要全部返回客户端,在应用端处理

4,读写过程

客户端通过负载均衡代理或者自己维护数据到机器的映射关系,将请求最终交给preference list中的一个Dynamo节点处理,该节点称为coodinator

Dynamo采用类似Quorum的方式保证数据正确,即W+R>N。

Put流程:

coodinator生成新的数据版本,及vector clock分量

本地保存新数据

向preference list中的所有节点发送写入请求

收到W-1个确认后向用户返回成功

Get流程

coodinator向preference list中所有节点请求数据版本

等到R-1个答复

coodinator通过vector clock处理有因果关系的数据版本

将不相关的所有数据版本返回用户

5,发生暂时错误时保证可用

Dynamo中用hinted handoff的方式保证在出现暂时的节点或网络故障时,集群依然可以正常提供服务。

流程:

节点失败时,会将其负责分片发送给一致性哈希环上下一个本来没有该分片的节点

收到该分片的节点会将分片放到单独的空间,并成为该分片的处理节点,同时不断的通过hint检测原节点

发现原节点可用时,将数据传回原节点并删除本地分片

优点:

避免了短暂的机器或网络故障造成的不可用

6,降低分片同步数据传输量

通过上面所述,可以看出当故障发生或者有新节点加入、离开集群时,都涉及分片的拷贝和传输。希望能够快速检查分片中内容是否相同,并通过仅发送不同的部分来减少数据传输量。Dynamo采用Merkle Tree来解决这个问题。

Merkle tree:

每个叶子节点对应一个数据项,并记录其hash值

每个非叶子节点记录其所有子节点的hash值

使用:

Dynamo为自己维护的每一个分片维护一个Merkle Tree

需要比较分片是否相同时,自根向下的比较两个Merkle Tree的对应节点,可以快速发现并定位差异所在

7,成员信息及故障检测

考虑到节点失败无法恢复的情况并不常见,Dynamo加入或离开集群都需要手动通过命令完成;

当有用户请求时,coordinator会发现不可达的节点,并用其他节点代替之,之后开始周期性探测其恢复;

Dynamo集群中的每台机器都会维护当前集群的成员及节点不可达等信息,这些信息通过gossip协议广播到整个集群;

客户端可以通过任意一个节点获得并维护这种成员信息,从而精确的找到自己要访问的数据所在。

总结

论文中介绍了Dynamo面对的问题及其解决方案,而对于其中众多的细节还需要在工程实现中权衡和优化。包括Dynamo中冲突的处理方式,对大多数业务场景来说可能都是无法接受的。

http://blog.csdn.net/anderscloud/article/details/7179107

dynamo方程怎么写_Dynamo论文介绍相关推荐

  1. dynamo方程怎么写_DYNAMO基础.ppt

    DYNAMO基础 Chapter 1 Players in the Systems Game 系 统 动 力 学(System Dynamics) 主讲: 张学民 系统动力学建模语言DYNAMO基础 ...

  2. dynamo方程怎么写_Dynamo代码怎么写?BIM系列之dynamo代码块快速入门

    代码块快速入门教程: 1.dynamo等效数字 2.字串 3.顺序 开始..#数量..间距 3.范围 开始..结束..间距 5.取得索引的项目列表: 6.建立清单 7.连接字符串 8.条件陈述语法 9 ...

  3. dynamo方程怎么写_Dynamo-CodeBlock手册-基础篇

    在Dynamo中,CodeBlock是一个重要且常用的功能.本文根据官方帮助文档做了一个总结,希望对你有用. 在画布的任意空白区域双击鼠标左键,就能调出这个节点. CodeBlock功能块 我们可以在 ...

  4. dynamo方程怎么写_【简明自控】为什么特征方程如此重要

    简明自动控制--为什么特征方程如此重要. 热场视频: 自平衡杆-双轴反作用轮倒立摆_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com 顶个棍子!具有主动脚轮的全向移 ...

  5. dynamo方程怎么写_Revit如何通过Dynamo绘制抛物线

    1.假设一个公式,变高梁段梁底曲线为二次抛物线,抛物线方程为"y=1.3x2/172+2.7(x=0~17m)". 2.新建一个族文件,族样板文件选择"自适应公制常规模型 ...

  6. dynamo方程怎么写_根据以下说明,画出因果关系图,建立流图模型,并拟定变量名称和适当数据,写出对应的...

    [判断题]进出口包装上的包装标志,都要在运输单据上表明. [简答题]7 . 医药公司购进的药品存放过期,是否属正常损失? [资料题]4 .问:我企业与甲企业签订购销合同,销售一批货物,后由于甲企业违约 ...

  7. The Most Common Habits from more than 200 English Papers(中国学生写英语论文中最常见的错误)

    中国学生写英语论文的常见错误总结 Introduction Purpose Structure Section 1 1. "a,an,the" Mistake: The, a, a ...

  8. DL之LeNet-5:LeNet-5算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之LeNet-5:LeNet-5算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 LeNet-5算法的简介(论文介绍) LeNet-5算法的架构详解 1.LeNet-5 结构分 ...

  9. opengl用什么软件写_汇才论文工具分享:写科研论文的都在用这些截图软件

    截图是一种学问,经常混迹论坛的相信都知道,"饶老师教你截图"的梗.由于经常有网友不使用系统自带的截图功能非要发手机屏拍的图,导致像素过低看不清,于是渐渐就行成了一种吐槽的梗,常见于 ...

最新文章

  1. 工具用途_机械加工中研磨加工刀具(砂轮)﹑治工具及其用途
  2. 操作系统(三)操作系统的发展和分类
  3. BOOL 值在 debug 和 release 模式下初始化不一样!!!
  4. linux 定义快捷命令,Linux系统自定义快捷命令的详细说明
  5. c汇编语言程序框架培训,[010][x86汇编语言]学习用户程序的编写(c08.asm)
  6. 前端安全系列(二):如何防止CSRF攻击?
  7. 中国颜色(鼠标双击)
  8. 九章基础算法03:树和递归
  9. 正则表达式常用匹配方式
  10. jQuery正则表达式实现表单验证功能(注册)
  11. 两金压降两金指什么_​什么是两金压降
  12. 双硬盘win10下安装ubuntu的方法
  13. 网络技术安全开发安卓APP
  14. Linux串口通信之termios结构体说明
  15. python数据分析实战:生存分析与电信用户流失预测
  16. 在win10上去除移动硬盘的bitlocker
  17. “35岁危机”不再,算法岗应届生平均月薪超3.2万,人工智能行业掀抢人大战!...
  18. PHP+SQLServer2005+Apache/系统DSN配置+ODBC查插删改
  19. AnyBurn 免费专业的 CD/DVD/蓝光刻录和ISO编辑软件
  20. 有车一族 教你如何防止被电子眼拍到

热门文章

  1. 业余程序员余流 - 杂谈 之 《不知道怎么说出口》
  2. 华信c语言程序设计答案,C语言程序设计实验指导_颜晖_主_....doc
  3. 商品贩卖系统java_基于jsp的华信贩卖-JavaEE实现华信贩卖 - java项目源码
  4. L/O(输出/输入)
  5. 地下排水管道的最佳铺设问题
  6. 分布式事务讲解 - TX-LCN分布式事务框架(含LCN、TCC、TXC三种模式)
  7. 网红KOL是什么意思?从零开始,教你如何运营网红KOL
  8. 基于 RT-Thread 的智能家居 DIY 视频教程新鲜出炉啦啦啦!!!
  9. java drawstring 绘制歌词_Java模仿Kugou,实现歌词秀
  10. CODE【VS】1384 黑色星期五(计算某一天是星期几的公式)