QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Chord:结构化 P2P 网络中的一个 DHT 算法

  • 2014-12-02
  • 本文字数:1062 字

    阅读完需:约 3 分钟

DHT 即分布式哈希表(Distributed Hash Table), 它通常是为了拥有极大节点数量的系统,而且在系统的节点常常会加入或退出节点而设计的。DHT 具有良好的扩展性、鲁棒性、结点 ID 分配的均匀性和自组织能力。DHT 可以用以建立复杂的服务,例如分散式档案系统、点对点技术档案分享系统、网页快取、缓存系统、任意点传输、网域名称系统以及即时通讯等。 Chord 由麻省理工学院(MIT)在 2001 年提出,其目的是提供一种能在 P2P 网络快速定位资源的的算法,它并不关心资源是如何存储的,只是从算法层面研究资源的取得,因此,Chord 的 API 就简单到只有一个 set、get。Chord 在一致性哈希的基础上提供了优化的路由算法,优化后的算法具有负载平衡、分布性、可扩展性、可用性、命名的灵活性等优点。它可用于全球文件系统、命名服务、数据库请求处理、互联网级别的数据结构、通信服务、事件通知、文件共享等应用中。

Chord 要实现的其实就是给定一个关键字 Key,并能够将其映射到某个节点。Chord 采用一致性哈希为每个节点和关键字产生一个 m 位的 ID,并按照 ID 的大小构成环形拓扑。另外,为了路由的需要,Chord 还维护了一张最多 m 项的路由表即 Finger 表。如下图所示的就是 m 为 6 的一个 Chord 拓扑环和 Finger 表。

对于节点的查询的处理,Chord 采用了幂次逼近查询法;对于新节点加入的处理,Chord 需要环形拓扑中的任意一个节点来协助完成, 且加入过程包括新节点本身的 Join 操作和被其他节点发现两个阶段;对于节点失效的处理,Chord 需要周期性对节点的前继节点和后继节点进行探测,并按照节点加入时的算法重建 Finger 表;对于节点退出的处理,Chord 采取了将节点的退出当作为失效来处理的方式。有关 Chord 及 Chord 对节点的查询、加入、失效等具体是如何处理的,请读者参考论文《结构化P2P 网络chord 算法研究与分析》

另外,请读者们注意,DHT 只是一个概念、一种网络模型,读者还可以阅读 freedomlayer 上的一篇介绍以加深对 DHT 的理解。除了 Chord 算法外,基于 DHT 实现的算法还包括加州大学伯克利分校提出的内容寻址网络算法 CAN 、英国剑桥的微软研究院和莱斯大学提出的 Pastry 、加州大学伯克利分校提出的一种新型 P2P 网络定位和路由算法 Tapestry 等。目前,DHT 算法的发展方向非常多,且随着科学技术的发展以及人们的不断探索与研究,将会有新的改进算法不断被提出来。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-12-02 05:439959
用户头像

发布了 92 篇内容, 共 47.1 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

centos7.6操作系统安装

桥哥技术之路

Linux

nacos的一致性协议distro介绍

捉虫大师

nacos

以为是青铜,没想到是王者的dubbo标签路由

捉虫大师

dubbo

XOR异或运算在计算机中的应用

王坤祥

XOR 异或运算 对称加密

零基础应该如何学习爬虫技术?

极客时间

Python 编程 爬虫

什么是物联网中台

老任物联网杂谈

物联网中台 IOT Platform 物联网平台

IPFS 星际传输协议的入门(二)

AIbot

区块链 分布式数据库

一行代码实现网站可编辑,并解决网站禁止复制的限制

王坤祥

复制 破解 DOM

一个工程师向电信公司的维权

D

Linux系统优化

桥哥技术之路

Linux

skywalking内存泄露排查

捉虫大师

dubbo 内存泄露

MacOS配置网络命令

编程随想曲

macos network

Ledge:这可能是距今最好的『DevOps + 研发效能』知识平台

Phodal

DevOps 敏捷开发 软件开发 研发效能

18个PPT,29个提问解答,都在这儿啦!

Apache Flink

大数据 flink 流计算 实时计算

SpringBoot中如何优雅的使用多线程

读钓

Java spring Spring Boot

Apache Beam 大数据处理一站式分析

李孟聊AI

Java 大数据 数据中台 数据交换 Beam

项目实施要避免哪些坑?

顾强

项目管理

Docker运行常用软件:MySQL,Redis,Nginx,RabbitMQ,Neuxs,Gitlab

读钓

MySQL nginx Docker gitlab

LeetCode 前1000题二叉树题目系统总结

Yano

面试 算法 LeetCode 二叉树 刷题

用jdk8的stream实现斐波那契数列

编号94530

jdk stream 斐波那契 fibonacci

Python 有哪些黑魔法?

极客时间

Python 编程语言

Sentinel在docker中获取CPU利用率的一个BUG

捉虫大师

Java sentinel cpu

记一次spring注解@Value不生效的深度排查

捉虫大师

spring Spring Boot dubbo

一次漫长的dubbo网关内存泄露排查经历

捉虫大师

dubbo 内存泄露

身为程序员,怎么接私活赚外快?

爱看书的小代码

如何在非 sudo 用户下运行 docker 命令?

愚一

Docker DevOps

当dubbo多注册中心碰上标签路由

捉虫大师

dubbo

在Kubernetes上运行SpringBoot应用

铁花盆

Docker Kubernetes Spring Boot

都在说实时数据架构,你了解多少?

Apache Flink

大数据 flink 流计算 实时计算

读书·行路·问心·求道

黄崇远@数据虫巢

读书笔记 个人成长 读书

思维导图学《Linux性能优化实战》

Yano

Linux 后端

Chord:结构化P2P网络中的一个DHT算法_语言 & 开发_李士窑_InfoQ精选文章