0

我正在考虑一种基础架构,其中许多用户连接到一台服务器,并使用哈希存储键值对。

存在许多这样的服务器,每个服务器都为自己的用户存储键值对。我们假设键不冲突。

服务器 S1 上的用户 U1 可能会使用密钥 K2 查找位于服务器 S2 上的对象(用户还不知道这一点)。我们需要某种分布式哈希表来将键映射到 server_addr,这样我们就可以在该服务器中查询该对象。

这样的DHT有很多,比如Tapesry、Chord等等,我一直在想怎么做一个这样公平的系统。

例如,在具有三台服务器的系统中,服务器 S1 可能有 1000 个用户,S2 有 2 个用户,S3 有 5 个用户。如果我们假设用户每人创建 10 个对象并且我们均匀地分配密钥空间,那么服务器 S2 和 S3 将分别存储大约 3500 个密钥,这比他们自己的密钥消耗量大一到两个数量级。

我希望 S1 能够为其在 DHT 中公平分享的密钥负责。

我的一个想法是类似于审计系统,每个对等方都询问其他人他们在 DHT 中存储了多少密钥,然后检查他们是否也对这部分密钥空间负责。

但是,这会导致使用大量带宽来获取每个节点的消耗。

还有其他想法吗?

4

1 回答 1

1

有几种可能的方法

没做什么

在野外,DHT 并不是完全同质的环境。一些节点比其他节点拥有更多的资源(嵌入式设备与胖服务器)。一些节点比其他节点创建更多活动。

节点可以根据其能力简单地提供服务(路由、存储),并在达到其能力时拒绝请求(通过丢弃它们或返回否定响应)。

发出请求的节点将简单地将它们视为故障并绕过故障点。

您基本上应该检查节点消耗的资源比其他节点多几个数量级的情况是否足够普遍以保证任何平衡。

自愿措施

导致更多流量的节点可能只是为了提供更多资源而设计。例如,它可以运行分散在整个密钥空间中的多个虚拟节点,从而为更多密钥提供存储和路由。

对于具有高正常运行时间、带宽和低延迟的服务器级机器来说,这应该特别容易。

执法

这就是棘手的地方。在分布式系统中,您没有信任或监管权限。在您提供服务之前,节点必须证明它提供了足够的服务。

第一个明显的衡量标准是其他节点证明它确实提供了它声称的服务。但这仅提供了它提供某些服务的证据,并没有说明提供的资源和消耗的资源之间的比率。而且您还需要一种机制来验证它确实存储了它声称的数据,而不仅仅是返回正面响应然后丢弃它们。

因此,您需要会计、验证和信任网络,因为 1-hop 凭证可能不够用。

如您所见,复杂性迅速爆炸。


您可能应该着眼于更大的图景,并确定网络中的攻击者和好公民可能拥有的激励措施。

  • 消耗过多的资源有什么好处
  • 验证的成本是多少(复杂性、人力、与阻止的恶意流量相关的流量开销)
  • 异常值真的会造成多大的负担?

等等

于 2015-12-19T07:13:27.803 回答