Kademlia原理介绍

标签: kademlia 原理 | 发表时间:2015-07-24 01:03 | 作者:gcc2ge
出处:http://www.iteye.com

http://blog.csdn.net/chenbuaa/article/details/2301638

 

Kademlia: A Peer To Peer Information Systems Based On The

XOR Metric, Petar Maymounkov and David Mazieres, 2002.

-------------------------------------------------------------



Kad概述



首先, 读者要清楚的是, Kademlia是用于信息查询的, 而不是一个文

件传输工具. 如何实现信息查询的功能呢? 首先, 信息的发布者根据

某个规则将指定的信息发布到指定的位置; 然后, 信息查询者根据这

个规则和自己所需要的信息, 找到那个指定的位置, 并在那里找到信

息. 电骡的Kad里, 信息就是文件的源的信息, 信息查询就是找某文件

的源. 下面结合电骡的实际情况来讲解这个过程.

-------------------------------------------------------------



结点的ID



在电骡的Kad网络里, 每个用户都有一个ID号, 这个ID是128位的, 它

是在你第一次使用Kad时随机生成的. 出现两个相同ID的概率实在太

小了, 这几乎不可能发生. 我们可以认为, 在Kad网络里, 没有两个用

户具有相同的ID号, 除非你故意那样做.



每个用户都是Kad网络里的一个结点, 因此用户的ID就是结点的ID.

-------------------------------------------------------------



XOR



XOR即二进制的"异或"操作, 它是这样定义的:

1 XOR 1 = 0, 1 XOR 0 = 1, 0 XOR 1 = 1, 0 XOR 0 = 0.

两个二进制数相异或, 就是将这两个数的对应位做异或. 举例来说,

10110 XOR 11100 = 01010



异或有一个重要的性质: 设 a, b, c 为任意三个数. 则:

(a XOR b) = (a XOR c) 当且仅当 b = c

-------------------------------------------------------------



结点间距离



Kad网络上任意一个用户可用其结点ID来表示. 设 a, b 是两个结点,

则 a 与 b 之间的距离定义为 D(a,b) = a XOR b. 由上面介绍的异或

的性质可知: 给定一个结点 a 和距离 L, 有且仅有一个结点 b, 使得

D(a,b) = L. 这个性质太优秀了, 它提供了在Kad网络上进行度量的可

靠方法. 因为, 假设你是Kad上的一个用户, 那么Kad上所有其他用户

都可按照与你间距离的远近而排成一条长队. 如果已知另一个结点的

ID, 那么你很容易判断出他在这条长队中的位置; 如果给定一个距离,

那么你很容易从这条长队里找出与你的距离最接近给定距离的结点.

-------------------------------------------------------------



结点查找



因为有了可度量的距离, 查找某个结点就比较容易了. Kad上用户很多,

而且加入和退出Kad是频繁发生的, 因此一个结点不可能记录下所有结

点的信息. 每个结点都维护着一个联系人列表, 这张表的结构大概为:

+--------+-----------+---------+

|联系人ID| IP地址 | 端口 |

+--------------------+---------+

| a | a的IP地址 | a的端口 |

+--------+-----------+---------+

| b | b的IP地址 | b的端口 |

+--------+-----------+---------+

| ... | ... | ... |

+--------+-----------+---------+

| n | n的IP地址 | n的端口 |

+--------+-----------+---------+



联系人的选择不是完全随机的, 而是有倾向性的, 离自己越近的结点

越容易被选到联系人列表里. 也就是说, 每个结点都对自己附近的情

况非常了解, 而随着距离的增大, 了解的程度就降低了. 这很像交朋

友, 离自己越近的人群里, 朋友就越多. 联系人列表是不断更改的,

不在线的联系人将被删除, 被新找到的联系人所代替.



要查找某个结点a时, 如果a不在我的联系人列表里, 我就从联系人列

表里找到与a距离最近的结点b, 然后向b查询a. 如果b认识a, 就把a的

IP地址和端口告诉我; 如果b也不认识a, b就从自己的联系人列表里找

到与a距离更近的c, 然后我向c查询a. 这个递归过程不断重复, 直到

找到a为止.



结点查找是进行信息存储和查询的基础.

-------------------------------------------------------------



信息的存储



现在, 来解决信息的存储问题, 即信息发布者根据某个规则将自己要

发布的信息存储于Kad上的某个位置. 如果每条信息也有一个128位的

ID, 那么只要将信息存储于对应的结点上, 这个问题就完美地解决了!

在电骡里, 这简直太方便了, 因为每个文件都有一个128位的Hash值!

电骡的Kad里, 每条文件发布信息有三个最重要参数:

文件的Hash值, 发布者IP地址, 发布者端口.

发布者将该条信息存储于 结点ID 恰等于 文件Hash值 的那个结点上.

所有发布相同文件的人, 都将自己的IP地址和端口存储在这个结点上

了. 反过来, 对于任意一个结点a, 他存储了 Hash值为a的文件 的全

体发布者的IP地址和端口.

-------------------------------------------------------------



信息的查询



如果前面的内容你都理解了, 那么这部分就很容易: 比如你要查找某

文件的源, 首先你要知道该文件的Hash值, 然后去结点ID等于此Hash

值的那个结点, 让他告诉你发布者(源)的IP地址和端口就行了.

-------------------------------------------------------------



一个小问题



通常, 并不能保证对应于某个 文件Hash值 的结点一定在Kad网络里.

也许此结点未上线, 也许此结点ID尚未分配. 这时候如何存储信息呢?

实际上在存储信息时, 并不只存储在那唯一的结点上, 而是存储在与

目标结点距离比较近的一群结点上. 越接近目标结点, 该信息的保存

时间就越久.

-------------------------------------------------------------



加入Kad网络



我如何进入Kad网络呢? 我必须事先知道某个已经位于Kad上的用户的

IP地址和端口, 然后通过该用户将自己介绍到Kad网络中. 进入Kad后,

通过一系列的结点查找, 来建立我的联系人列表.
 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [kademlia 原理] 推荐:

Kademlia原理介绍

- - 互联网 - ITeye博客
首先, 读者要清楚的是, Kademlia是用于信息查询的, 而不是一个文. 首先, 信息的发布者根据. 某个规则将指定的信息发布到指定的位置; 然后, 信息查询者根据这. 个规则和自己所需要的信息, 找到那个指定的位置, 并在那里找到信. 电骡的Kad里, 信息就是文件的源的信息, 信息查询就是找某文件.

HandlerSocket的原理

- Roger - MySQLOPS 数据库与运维自动化技术分享
HandlerSocket的应用场景:. MySQL自身的局限性,很多站点都采用了MySQL+Memcached的经典架构,甚至一些网站放弃MySQL而采用NoSQL产品,比如Redis/MongoDB等. 不可否认,在做一些简单查询(尤其是PK查询)的时候,很多NoSQL产品比MySQL要快很多,而且前台网站上的80%以上查询都是简洁的查询业务.

hbase原理

- - CSDN博客云计算推荐文章
1.hbase利用hdfs作为其文件存储系统,利用mapreduce来处理数据,利用zookeeper作为协调工具. 2.行键(row key),类似于主键,但row key是表自带的. 3.列族(column family) ,列(也称作标签/修饰符)的集合,定义表的时候指定的,列是在插入记录的时候动态增加的.

zookeeper原理

- - CSDN博客云计算推荐文章
1.为了解决分布式事务性一致的问题. 2.文件系统也是一个树形的文件系统,但比linux系统简单,不区分文件和文件夹,所有的文件统一称为znode. 3.znode的作用:存放数据,但上限是1M ;存放ACL(access control list)访问控制列表,每个znode被创建的时候,都会带有一个ACL,身份验证方式有三种:digest(用户名密码验证),host(主机名验证),ip(ip验证) ,ACL到底有哪些权限呢.

索引原理

- - ITeye博客
索引是存储引擎用于快速找到记录的一种数据结构. 也就会说索引也是一种数据结构,也占用磁盘空间. 索引是对查询优化最有效的手段,可以将查询提升几个数量级,相当牛掰啊. 1)索引大大减少了服务器需要扫描的数据量. 2)索引可以帮助服务器避免排序和临时表. 3)索引可以将随机IO变为顺序IO. 数据库索引可以想象成一本书的目录,如果想在一本书中找到某个主题,那么先到书的目录中找到这个主题,然后根据目录提供的页码,找到要找的主题.

Hessian原理

- - 互联网 - ITeye博客
Hessian 原理分析. 一.      远程通讯协议的基本原理. 二.      应用级协议 Binary-RPC. Binary-RPC 是一种和 RMI 类似的远程调用的协议,它和 RMI 的不同之处在于它以标准的二进制格式来定义请求的信息 ( 请求的对象、方法、参数等 ) ,这样的好处是什么呢,就是在跨语言通讯的时候也可以使用.

MapReduce原理

- - C++博客-牵着老婆满街逛
       MapReduce 是由Google公司的Jeffrey Dean 和 Sanjay Ghemawat 开发的一个针对大规模群组中的海量数据处理的分布式编程模型. MapReduce实现了两个功能. Map把一个函数应用于集合中的所有成员,然后返回一个基于这个处理的结果集. 而Reduce是把从两个或更多个Map中,通过多个线程,进程或者独立系统并行执行处理的结果集进行分类和归纳.

LTPA Cookie原理

- - Web前端 - ITeye博客
Lightweight Third-Party Authentication (LTPA)是IBM Websphere和Domino产品中使用单点登录技术. 当服务器配置好LTPA认证方式,用户通过浏览器成功登录后,服务器会自动发送一个session cookie给浏览器;此cookie中包含一个LTPA Token.

HTML5设计原理

- jessie - 蓝色理想
Jeremy Keith在 Fronteers 2010 上的主题演讲 下载PPT(PDF) 观看视频 今天我想跟大家谈一谈HTML5的设计. 主要分两个方面:一方面,当然了,就是HTML5. 我可以站在这儿只讲HTML5,但我并不打算这样做,因为如果你想了解HTML5的话,你可以Google,可以看书,甚至可以看规范.

Larbin 设计原理

- - 小彰
互联网是一个庞大的非结构化的数据库,将数据有效的检索并组织呈现出来有着巨大的应用前景,尤其是类似RSS的以XML为基础的结构化的数据越来越多,内容的组织方式越来越灵活,检索组织并呈现会有着越来越广泛的应用范围,同时在时效性和可读性上也会有越来越高的要求. 这一切的基础是爬虫,信息的来源入口. 一个高效,灵活可扩展的爬虫对以上应用都有着无可替代的重要意义.