取一套钥匙?

时间:2012-04-10 01:35:29

标签: couchbase

当Fetchinig多个密钥集时,我可以看到客户端在一个长字符串中发出请求并发送到连接的couchbase服务器(该协议似乎也包括每个密钥的vbucket映射)

所以,来自客户端的一个网络调用所有密钥,他们的vbucketmaps。

服务器如何响应此请求?

如果连接的服务器具有所请求的所有值,那么我希望连接的服务器只提供所请求的值。

但是,如果有多个群集,则连接的服务器可能没有所请求的密钥。服务器在这种情况下做了什么?我可以看到请求包含vbucket映射,从此,我可以预期连接的服务器可以询问特定Key的主服务器的值。这只是我的猜测,我想知道服务器在这种情况下的反应。

此外,如果密钥存在会发生什么,但是,由于“服务器忙”或其他一些错误,服务器无法返回值。

随时欢迎您的帮助

1 个答案:

答案 0 :(得分:3)

有两种不同的方式可以发生,无论是moxi还是没有moxi。

没有Moxi(智能客户端)

客户端与Couchbase建立连接,它将首先获得群集中所有服务器和vbucket映射的列表。然后,它会连接到群集中的每个服务器。当您执行多操作时,客户端将查询它包含的vbucket映射并找出服务器所属的vbucket。如果我们有三台服务器,那么客户端将最多三个多操作放在一起,并将每个操作发送到包含该多操作中所有密钥的相应服务器。每个服务器都会响应客户端,客户端会将所有结果放在一组结果中。

与Moxi一起

在这种情况下,客户端不知道集群或vbucket映射,但moxi确实如此。客户端将所有密钥发送到moxi,然后moxi将负责将它们拆分并发送到适当的服务器。

Sever Down场景:

如果服务器关闭或忙碌,则该服务器特定的多操作中的所有密钥都将失败。客户端应该返回可以从其他服务器获取的密钥,并提醒您错误。

重新平衡场景:

在重新平衡期间,将请求发送到错误的服务器的可能性很小。在这种情况下,客户端应该在正确的服务器上重试该操作。在重新平衡期间,每个客户端都应该收到一个“快进”的vbucket映射,该映射说明重新平衡后所有vbuckets的位置。它将使用此vbucket映射中的服务器进行重试。