vbucket来动态添加/删除服务器。我的问题是它如何比一致哈希更好。此外,当添加服务器并且状态从Pending更改为Active时。首先完成,然后vbucket指向新添加的服务器。所以转向旧版本的请求也必须转向新的请求,并且应该原子地进行切换。怎么样?
答案 0 :(得分:2)
首先,我不相信VBuckets实际上已经实现到memcached中。我知道它们被使用的唯一地方是Couchbase,它的Couchbase Bucket中有一个类似memcached的缓存层。
我的问题是它如何比一致的散列更好?
VBuckets优于一致性散列,因为它们更容易在服务器之间移动,而不是单独的密钥。如果您依赖于一致性散列,那么如果您想从两个服务器移动到三个,那么唯一的方法是将系统中的每个密钥重新分配给新的服务器集。如果您有VBuckets,那么您只需要将一些VBuckets移动到新服务器。这实际上提供了一种简单的方法来识别需要移动的密钥,并且您可以避免访问群集中的每个密钥。
当VBucket移动到另一台服务器时,客户如何确定发送请求的位置?
在Couchbase中,每个客户端都包含一个将VBuckets映射到ip地址的映射。客户端还与流端口连接,该端口发送VBucket映射更改。当客户端获取新映射时,它可以更新请求路由到的位置。