什么是 Distributed Hash Table (DHT)?
Distributed Hash Table 是一个共享的地址簿,它将查找数据的工作分散到许多独立的计算机上。不是由一台服务器来回答数据所在位置,而是 DHT 让网络共同指向正确的位置。可以把它想象成向一群聪明的人询问文件所在,群体在几次跳转内给出答案。
DHT 会永久存储你的文件。并非如此。它保存的是如何找到文件的位置,而不是文件本身,数据仍然保存在选择托管它的对等节点上。
Distributed Hash Table (DHT) 的工作原理
想象你的应用向群体请求一个由内容哈希标识的项。下面是简要流程。
- 步骤 1:你加入群组,成为其中一个 节点。
- 步骤 2:你想要项 X,因此对其内容计算哈希,作为唯一标识。
- 步骤 3:你向附近的对等节点查询,这些节点会将你的请求路由到在数学上更接近该标识的节点。
- 步骤 4:查询到达负责的节点附近,这些节点返回当前持有 X 项的对等方。
- 步骤 5:你连接到这些对等节点并直接从它们下载。快速,直接完成。
现实示例:IPFS (InterPlanetary File System) 使用 DHT 来发现哪些节点保存了某个哈希对应的内容,然后从这些节点获取数据。
为什么 Distributed Hash Table (DHT) 很重要
那它对你有何价值?
- 优点:它在没有中央把守者的情况下快速找到内容,从而提供速度和弹性。
- 作用:它是 去中心化 网络的重要组成部分,在这些网络中,群体负责查找,从而减少单点故障。
- 相关用途:用于文件共享的对等方发现、dapp 的数据可用性,甚至在 点对点交易 中寻找交易对手。
当有人说 DHT 拥有你的数据时,询问数据本身存放在哪里,以及有多少节点固定或复制了它。指针不是备份。
Distributed Hash Table (DHT) 的主要特性
是什么让它在加密和对等系统中持续被使用:
- 查找:给定一个键,它在大致对数级的跳数内找到负责的节点,即使在大规模下也是如此。
- 分布:索引是共享的,因此没有单一服务器能终止发现功能。
- 弹性:节点可以加入或离开,网络仍能应对节点变动并保持路由。
- 可验证性:键是哈希,因此获取到的内容可以根据键进行校验。
变体
存在不同的实现,各自有不同的路由方式和权衡:
- Kademlia:被广泛使用,通过 XOR 距离路由,并偏好长时间在线的节点。
- Chord:将节点排列成环,并通过指表进行路由。
- Pastry:使用基于前缀的路由并考虑邻近性。
DHT 是一个目录和路由系统,不是权威数据库。你仍需通过哈希来验证内容,并对节点的声明保持合理怀疑。
示例
在支持 IPFS (InterPlanetary File System) 的应用中请求一个内容哈希,DHT 返回多个对等节点地址,你的应用直接从这些节点获取字节数据。
趣闻
Kademlia 是最受欢迎的 DHT 实现,诞生于 2002 年,并悄然影响了从 BitTorrent 磁力链接到被加密项目使用的现代内容寻址存储。旧论文,新影响。
总结
简短结论:DHT 是帮助对等网络在不依赖中心服务器的情况下找到所需内容的地址簿。简单的想法,影响深远。
