前些天大致看了khashmir的代码。对于网络down掉之后, 又再重新恢复, 将会对DHT产生什么影响呢? 具体的不是很清楚。 我的理解是: down掉之后所有的DHT节点失效, 重新恢复之后这些 DHT节点会被新的节点代替, 也就是说很多本来是好的节点被从路由表中删除了。这似乎违背DHT的原则。我想到处理的方法估计是down掉的检测和延迟节点替换。
对付网络down掉的处理方式是: 可以认为收到数据报的前10s网络是好的。把所有的这期间超时的节点提交到路由表([延迟提交方式])。 另外认为一个节点被替换前如果最近的一次被ping(发送时间, 或者说最后一次的失败时间)超过了 15分, 则需要在被替换前重新ping一下([延迟替换方式])。
另外对khashmir的一些处理方式不是很明白:
1、多余的find_node操作, 我目前的理解是方便实现(不用多余接口), 以及可以增加把自己加入到对方的路由表中的机会。
2、把find_node操作返回的节点, 未经过确认就加入路由表中, 并且认为该节点是1970/00/00 00:00:00最后一次看到的节点。所以以后的插入操作需要被ping. 也就存在不必要的通讯。
3、ping cache的处理方式有些不明白, 到底是采用最旧的节点还是最近看到的节点替换。
4、网络down掉的处理没有明确的代码, 估计处理方式已经被隐藏了, 难道是因为 并发数是8的原因? 个人不认为难很好的解决问题。
阅读(1241) | 评论(0) | 转发(0) |