Amazon Dynamo论文解读 - Merkle Tree的使用

原创 2012年11月05日 11:39:10

  Merkle Tree是Dynamo论文中用到的一个算法,读这篇论文前,我并不知道这个算法,所以找了相关资料了解了解,以便我对论文有更进一步的了解。

 

  什么是Merkle Tree
   Merkle Tree,是一种树(数据结构中所说的树),网上大都称为Merkle Hash Tree,这是因为 它所构造的Merkle Tree的所有节点都是Hash值。Merkle Tree具有以下特点:
    1. 它是一种树,可以是二叉树,也可以多叉树,无论是几叉树,它都具有树结构的所有特点;
    2. Merkle树的叶子节点上的value,是由你指定的,这主要看你的设计了,如Merkle Hash Tree会将数据的Hash值作为叶子节点的值;
    3 非叶子节点的value是根据它下面所有的叶子节点值,然后按照一定的算法计算而得出的。如Merkle Hash Tree的非叶子节点value的计算方法是将该节点的所有子节点进行组合,然后对组合结果进行hash计算所得出的hash value。
     例如,下图就是一个Merkle Hash Tree形状,如果它是Merkle Hash Tree,则节点7的hash value必须是通过节点15、16上的value计算而得到.
  

Ref 3

 

图一 Merkle Hash Tree
    
     为什么要使用Merkle Tree
     目前, 在计算机领域,Merkle Tree大多用来进行比对以及验证处理。在处理比对或验证的应用场景中时,特别是在分布式环境下进行比对或验证时,Merkle Tree会大大减少数据的传输量以及计算的复杂度。例如,就拿图一举例,假如是 15,16.......30是一个个数据块的hash值,我把这些数据从A传输到B,数据传输到B后,我想验证下传输到B上的数据的有效性型(验证数据是否在传输过程中发生变化),只需要验证A 和 B上所构造的Merkle Tree的root节点值是否一致即可,如果一致,表示数据是有效的,传输过程中没有发生改变。假如在传输过程中,15对应的数据被人篡改,通过Merkle Tree很容易定位找到(因为此时,节点0,1,3,7,15对应的hash值都发生了变化),定位的时间复杂度为O(log(n)).
 
      Merkle Tree的应用场景
 
     BT下,载少BitTorrent文件的大小
    Amazon Dynamo 副本同步
     Amazon Dynamo 论文描述的副本同步技术是比较复杂的,在这,只是简单的描述下 Dynamo是怎样使用 Merkle Tree来对副本进行同步的。而至于为什么要同步、同步详细过程,容我在后面章节描述。
     在Dynamo的数据划分算法的章节里,我们描述了,Dynamo 集群的所有机器都分布在一致性Hash环上,每台机器保存了Hash到机器区间(hash环上,两个机器节点之间,称机器区间)里的所有数据,同时,为了保证数据存储的持久性,一台机器上的数据会在其它机器上有备份,也就是所谓的副本。由于某些原因,副本需要同步,保持一致,既然要同步,就先要对副本数据进行比对,找出不一致的地方,然后合并成统一的一个副本。而目前,我们所关心的是比对,需要牵涉到跨网络传输,如果对机器上所有数据都进行比对的话,数据传输量就会很大,从而造成“网络拥挤”。为了解决这个问题,可以在每台机器上针对每个区间里的数据构造一棵Merkle Tree,这样,在两台机器间进行数据比对时,从Merkle Tree的根节点开始进行比对,如果根节点一样,则表示两个副本目前是一致的,不再需要任何处理;如果不一样,则遍历Merkle Tree,定位到不一致的节点也非常快速,大大节省了比对时间以及数据的传输量。
       在Git中的使用
      Git的作用类似于SVN和CVS,但功能比它们都要强大,是个分布式处理资源协同使用的工具,具体我也不是很熟悉。但据说,在Git里对集群里的机器间的文件同步也是采用Merkle Tree来进行比对的。具体技术细节,我猜可能是这样: 为Git 工作目录下的所有文件构造一个Merkle Tree,因为文件的层次结构天生就适合构造一棵树, 机器间文件的同步也是采用Merkle Tree的比对原理来实现的,和在Dynamo中使用的一样,只是叶子节点的值有点差异,一个是文件,一个键值对(key-value)。 注意,这个只是我个人猜测啊,如果我设计的话,就这么搞,应该不是胡搞瞎搞吧, 呵呵!










参考文章: http://yishanhe.net/merkle-hash-tree/
    
     
     
   

 

Merkle Tree及其应用

Merkle Tree,是一种树(数据结构中所说的树),网上大都称为Merkle Hash Tree,这是因为 它所构造的Merkle Tree的所有节点都是Hash值。Merkle Tree具有以下...
  • expleeve
  • expleeve
  • 2014-11-06 11:32:16
  • 7812

Merkle tree在区块链中的应用

上篇博文我们转载了一篇《Merkle Tree(默克尔树)算法解析》,那么大家是不是会有疑问,学习这个算法之后,我们改怎么去应用,区块链中又是如何应用的?今天这篇博客就以Merkle tree在区块链...
  • wo541075754
  • wo541075754
  • 2017-01-22 21:06:09
  • 5578

Dynamo和Cassandra中用到的Merkle tree

Merkle Tree是Dynamo论文中用到的一个算法,读这篇论文前,我并不知道这个算法,所以找了相关资料了解了解,以便我对论文有更进一步的了解。     什么是Merkle Tree  ...
  • zzd1990
  • zzd1990
  • 2014-03-13 14:28:14
  • 643

Merkle Tree(默克尔树)算法解析

Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节...
  • wo541075754
  • wo541075754
  • 2017-01-20 17:52:14
  • 31700

Merkle Tree与区块链

什么是merkle tree假设你已经知道了什么是哈希算法以及哈希是用来干啥的。网络传输数据的时候,A收到B的传过来的文件,需要确认收到的文件有没有损坏。如何解决?有一种方法是B在传文件之前先把文件的...
  • pony_maggie
  • pony_maggie
  • 2017-07-06 14:02:59
  • 8532

深入浅出以太坊MPT(Merkle Patricia Tree)

1 Trie树         Trie树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的...
  • qq_33935254
  • qq_33935254
  • 2017-02-17 10:45:04
  • 6146

Merkel Tree在BitTorren中的应用

大家都知道,目前BT应用的发展具有一个非常显著的趋势,那就是用来交换电影、游戏、ISO等大尺寸的数据文件。然而我们也能够观察到另一个事实,那就是:下载文件所对应的索引文件(.torrent)也越来越大...
  • houzengjiang
  • houzengjiang
  • 2013-03-04 20:41:17
  • 1504

分布式数据同步之Merkle Tree

这两天在看Dynamo数据库的数据同步机制,涉及到了一种数据结
  • gbjj123
  • gbjj123
  • 2014-05-13 21:48:00
  • 1408

Merkcle Tree

问题区块链本质上就是一个分布式的账本,每个区块记录了一定时间内的所有交易,比如比特币是讲每10min内的所有交易合成一个区块,放在总链上,交易成百上千,并且区块分布存储在不同的节点上,我们并不是每次都...
  • zslomo
  • zslomo
  • 2016-12-01 21:48:11
  • 1087

Merkle Tree

Merkle Tree, 又被称为Hash Tree,是一种树状Hash结构,1979年由Ralph Merkle发明。如前面的blog所述,Merkle Tree 首次在NoSQL存储系统中的应用是...
  • wh62592855
  • wh62592855
  • 2011-06-30 14:19:00
  • 3683
收藏助手
不良信息举报
您举报文章:Amazon Dynamo论文解读 - Merkle Tree的使用
举报原因:
原因补充:

(最多只允许输入30个字)