2

複数のキー セットを取得すると、クライアントが 1 つの長い文字列でリクエストを作成し、接続されたカウチベース サーバーに送信することがわかります (プロトコルには各キーの vbucket マップも含まれているようです)。

したがって、すべてのキー、vbucketmaps を使用したクライアントからの 1 つのネットワーク呼び出し。

サーバーはこの要求にどのように応答しますか?

接続されたサーバーが要求されたすべての値を持っている場合、接続されたサーバーは要求された値を提供することを期待します。

ただし、複数のクラスターがある場合、接続されたサーバーが要求されたキーを持っていない可能性があります。この状況でサーバーは何をしますか? リクエストに vbucket マップが含まれていることがわかります。このことから、接続されたサーバーが特定のキーのマスター サーバーにその値を要求できることが期待できます。これは私の推測です。この状況でサーバーがどのように応答するかを知りたいです。

また、キーが存在する場合はどうなりますか?ただし、サーバーは「サーバーがビジー」またはその他のエラーのために値を返すことができません。

いつもお世話になっています

4

1 に答える 1

3

これには、moxi を使用する場合と使用しない場合の 2 つの方法があります。

Moxi(スマートクライアント)なし

クライアントは Couchbase と接続し、最初にクラスター内のすべてのサーバーのリストと vbucket マップを取得します。次に、クラスター内の各サーバーに接続します。複数操作を行うと、クライアントは含まれている vbucket マップを調べて、サーバーが属する vbucket を特定します。サーバーが 3 つある場合、クライアントは最大 3 つのマルチオペレーションをまとめて、そのマルチオペレーションのすべてのキーを含む対応するサーバーにそれぞれを送信します。各サーバーはクライアントに応答し、クライアントはすべての結果を 1 つの結果セットにまとめます。

モクシと一緒に

この場合、クライアントはクラスターまたは vbucket マップについて認識していませんが、moxi は認識しています。クライアントはすべてのキーを moxi に送信し、moxi はキーを分割して適切なサーバーに送信します。

サーバー ダウンのシナリオ:

サーバーがダウンしているかビジー状態の場合、そのサーバー固有の複数操作のすべてのキーは失敗します。クライアントは、他のサーバーから取得できるキーを返し、エラーを警告する必要があります。

リバランスのシナリオ:

リバランス中に、リクエストが間違ったサーバーに送信される可能性がわずかにあります。この場合、クライアントは正しいサーバーで操作を再試行する必要があります。リバランス中、各クライアントは、リバランス後にすべての vbucket がどこにあるかを示す「早送り」vbucket マップを受け取る必要があります。再試行には、この vbucket マップのサーバーが使用されます。

于 2012-04-11T23:59:28.533 に答える