• IPFS学习-分布式哈希表DHT


    Distributed Hash Tables(DHT)

    分布式哈希表是一个分布式的键值对存储结构。在IPFS网络中,每一个节点都维护一个DHT的子集。当节点接受到一个请求。该节点要么直接回复,要么通过节点间传输直到找到可以回复该请求的节点。取决于实现方式,一个请求如果不能被第一个连接的节点回复

    • 进行节点间的转发,由最后一个节点联系收到请求的节点。
    • 进行节点间的转发,回复结果按照相同的路径转发回到原节点。
    • 由最优选择的节点对请求进行回复。

    IPFS使用这种策略。
    DHT的去中心化提供了相比于传统的键值对存储更好的优势。包括:

    • 扩展性。对长度为n的哈希请求只需要最多为log2n步即可解决。
    • 通过冗余进行错误容忍。即可能每一个节点都加入或离开DHT。另外,如果一个节点反应缓慢或者不可达,请求可以连接到其他节点。
    • 负载均衡,请求可以发送到任何节点,没有任何一个节点处理所有的请求。

    DHT如何工作

    Peer IDs

    每一个节点有有一个peerID,和DHT的键相同都是长度为n的哈希值。

    Buckets

    由每一个节点维护的DHT的子集被称为”桶“,一个桶映射的哈希值和节点ID具有相同的前缀。最多m个比特位。有2m个桶,每个桶则映射2n-m个哈希值。
    例如,如果m=2^16,并且使用16进制数据,节点ID为ABCDEF12345,维护以ABCD为前缀的哈希值映射。桶内的哈希值则可能为*ABCD*38E56,*ABCD*09CBA,*ABCD*17ABB.

    节点列表

    节点之间保持连接到其他节点为了转发请求(当请求的哈希值不在当前节点的桶内)
    如果哈希值长度为n,一个节点将保持连接n-1个列表节点。

    • 第一个列表维护第一个比特值不同的节点ID的节点。
    • 第二个列表维护前一个比特值相同,第二个比特值不同的节点ID的节点。
    • 第三个列表维护前两个比特值相同,第三个比特值不同的节点ID的节点。
    • ...

    假设最高的是第m个列表,很难发现最多有m个比特值相同的节点ID的节点。“最接近”对等方的列表通常保持空白。此处的“最接近”定义为XOR距离,因此它们共享的前缀越长,它们就越接近。列表还具有最大的条目(k)-否则第一个列表将包含一半的网络,然后是网络的四分之一,依此类推。

    DHT使用

    当节点接受到查询请求后,如果可以在自己的桶中找到答案则回复。否则联系最接近该节点的节点(IP+port,peerID,等等)回复。收到请求的节点尅将请求发送给最接近的节点。这个过程一直到可以回复请求的节点。一个哈希值长度为n的请求最多只需要log2n步,甚至是log2mn步。

    键和哈希值

    在IPFS的Kademili DHT,键使用SHA256哈希。节点ID使用由IPFS使用的网络库libp2p
    使用DHT查看两种类型的对象时,都由SHA256进行散列:

    • 添加到IPFS的数据的Content IDs。查找该值将给出具有该不变内容的对等方的peerID。
    • IPNS记录。查找将给出与此IPNS地址关联的最后一个Content ID,从而启用可变内容的路由。

    所以,IPFS的DHT只是实现不可变与可变内容路由的一种方式.当前只是一种实现.

    使用

    添加一条记录

    添加一个blob类型的数据到IPFS等同于广播它,由于DHT由内容路由实现。可以通过ipfs add myData自动打包数据挺添加内容ID和节点ID之间的映射到DHT。注意这里可能也被其他节点ID映射到该值,所以需要添加到列表中。如果提供的数据大于124KB,数据将会被打包成blocks,整个块将被映射。
    可以通过使用ipfs.name.publish发布一个IPNS记录。

  • 相关阅读:
    使用npm安装一些包失败了的看过来(npm国内镜像介绍)
    利用JMX统计远程JAVA进程的CPU和Memory
    Spring Boot学习笔记
    django数据库时间存储格式问题
    解决 Ubuntu 无法调节屏幕亮度的问题(转)
    django models auto_now和auto_now_add的区别
    django redis操作
    接口测试的工具
    django中migration文件是干啥的
    mysql简单操作(实时更新)
  • 原文地址:https://www.cnblogs.com/cbkj-xd/p/12058678.html
Copyright © 2020-2023  润新知