0

memcached 使用 vbucket 来动态添加/删除服务器。我的问题是它比一致哈希更好。此外,当添加服务器并且状态从 Pending 更改为 Active 时。它首先完成,然后 vbucket 指向新添加的服务器。因此,发送给旧请求的请求也必须发送给新请求,并且切换应该以原子方式进行。如何 ?

4

1 回答 1

2

首先,我不相信 VBuckets 实际上已经实现到 memcached 中。我知道使用它们的唯一地方是在 Couchbase 中,它的 Couchbase 存储桶中有一个类似 memcached 的缓存层。

我的问题是它比一致哈希更好吗?

VBuckets 比一致散列更好,因为它们比单独的键更容易在服务器之间移动。如果您依赖一致的散列,那么如果您想从两台服务器移动到三台服务器,那么唯一的方法就是将系统中的每个键重新散列到新的服务器集。如果您有 VBucket,那么您只需将一些 VBucket 移动到新服务器。这实质上提供了一种简单的方法来识别需要移动哪些键,并且您可以避免访问集群中的每个键。

当 VBucket 移动到另一台服务器时,客户端如何确定发送请求的位置?

在 Couchbase 中,每个客户端都包含一个将 VBucket 映射到 IP 地址的映射。客户端还连接到发送 VBucket 映射更改的流端口。当客户端获得新地图时,它可以更新请求路由到的位置。

于 2013-09-20T20:47:55.497 回答