0%

《区块链》理解分布式文件存储

分布式哈希表DHT

哈希算法可以将任意大小的数据映射成一个固定长度的值,数据不一样,往往映射出的值也不一样

而哈希表就是利用了哈希算法实现的一张表,用于保存key/value健值对,可以很快速的通过key找到value

关于哈希表的实现原理可以查看本站文章 《Golang》Map原理

而分布式哈希表则是在分布式系统中实现的哈希表,分布式系统下可以快速通过key找到value,详细介绍可以参考文章 分布式哈希表

基本原理

首先分布式网络中应该有一个分布式哈希表,key为资源的hash,value为节点的数据,每个节点都维护了这张分布式哈希表

这样的话,给定一个资源的hash就可以立马知道这个数据处于哪个节点上,就可以从那个节点去下载资源

  • 保存数据
  1. 一个节点接收到数据,会直接保存在这个节点的git文件系统中
  2. 然后向网络广播(可以使用grpc协议)自己拥有这个资源的消息(这里可能有节点恶意谎报,可以采取抽样检查的方式发现作恶节点,从而进行惩罚),这里其实就是向map写入值的过程。这里的消息其实就是一笔交易(组建网络涉及到p2p协议,可以使用Kademlia协议)
  3. 接收到广播的节点纷纷修改自己的哈希表(这里涉及到共识的问题,可以使用POS共识算法或者Raft共识算法等等)
  • 获取数据
  1. 当某个节点接收到获取数据的请求,它会先查看自己有没有这个数据,有的话直接返回
  2. 没有的话就通过路由表找到这个数据在哪个节点
  3. 找到后向目标节点发送获取数据的请求
  4. 收到请求的节点查询自己有没有,有的话返回,没有的话返回错误,随后会被处罚
  5. 最开始收到获取数据的请求的节点收到数据后会缓存本地(定期清理,不然数据量太大。也可以设置pin,让这个资源不被清理),然后返回给请求者



微信关注我,及时接收最新技术文章