Distribute Hash Table分布式hash网络
主要原理是将资源索引hash分散在整个网络节点上,从而去中心话。
每个节点都有一个唯一id,将id SHA散列后,用fnv32算法取值,从而定位到整个网络上。
每个资源,通过对资源名称SHA散列后,同样fnv32取值,定位到整个网络上。
每上传一个资源,通过id找到网络上最近的N个host,将其索引 id <-> host mac存放在该host的资源列表中。
因为不是全连通图,因此每个节点会维持一份host列表,代表自己可见的相邻节点。列表采用LRU cache算法保证其高效。
当需要下载资源,通过名字,找到在网络上的位置点,然后先在本机cache中找,找到离资源最近的host。然后再问该host同样的问题。沿着整个网络一路扩散出去,直到递归结束找到节点。然后获取资源对应的host列表。
最后采用NAT技术,连接资源host获取资源。