我正在考虑一种基础架构,其中许多用户连接到一台服务器,并使用哈希存储键值对。
存在许多这样的服务器,每个服务器都为自己的用户存储键值对。我们假设键不冲突。
服务器 S1 上的用户 U1 可能会使用密钥 K2 查找位于服务器 S2 上的对象(用户还不知道这一点)。我们需要某种分布式哈希表来将键映射到 server_addr,这样我们就可以在该服务器中查询该对象。
这样的DHT有很多,比如Tapesry、Chord等等,我一直在想怎么做一个这样公平的系统。
例如,在具有三台服务器的系统中,服务器 S1 可能有 1000 个用户,S2 有 2 个用户,S3 有 5 个用户。如果我们假设用户每人创建 10 个对象并且我们均匀地分配密钥空间,那么服务器 S2 和 S3 将分别存储大约 3500 个密钥,这比他们自己的密钥消耗量大一到两个数量级。
我希望 S1 能够为其在 DHT 中公平分享的密钥负责。
我的一个想法是类似于审计系统,每个对等方都询问其他人他们在 DHT 中存储了多少密钥,然后检查他们是否也对这部分密钥空间负责。
但是,这会导致使用大量带宽来获取每个节点的消耗。
还有其他想法吗?