はじめに
本記事では、Couchbase Serverのアーキテクチャー解説記事の一つとして、主にクライアントとクラスター間のコミュニケーションについて解説します。その解説に進む前に、(クライアント・クラスター間接続を含む)Couchbase Serverにおけるネットワーク間通信の種類について簡単に整理します。
承前: コミュニケーション概要
Couchbase Serverは、クライアントからクラスター、ノードからノード、およびクラスターからクラスターへの通信を処理します。また、サードパーティ製品への接続も提供します。
クライアントとクラスター間
クライアントアプリケーションは、サーバー定義の(複数の)アクセスポイントを介してCouchbase Serverクラスターと通信します。各アクセスポイントは、非暗号化の通信と暗号化通信の両方にポートを提供します。
ノード間
クラスターノードは、データの複製、インデックスの維持、ノードの状態の確認、クラスター構成への変更の伝達などのために相互通信します。
クラスター間
Couchbase Server-クラスターは、クロスデータセンターレプリケーションを使用して相互に通信します。
コネクター
CouchbaseServer-クラスターはサードパーティ製品と通信します。コネクタ。Elasticsearch、Hadoop、Kafka、Spark、およびTalend用のコネクタが提供されています。ODBCおよびJDBC用のドライバーが提供されています。
クライアント接続における3つのフェーズ
クライアント接続は、認証と承認、検出(Discovery)、およびサービス接続の3つのフェーズで確立されます。
認証と承認
クライアントはユーザー名とパスワードで認証します。ユーザーは、Couchbase Serverで定義されたロールに関連付けられており、認証を介してロールを取得します。
検出(Discovery)
クラスターマップがクライアントに返されます。これは、現在のクラスタートポロジを示しています。クラスターマップは、クラスターを構成するノードのリスト、ノード間のサービス配置、およびノード間のデータ配置に関する情報を含みます。
クライアントは、これらの情報を持っているため、適切なノードへアクセスすることができます。これは、単に適切なサービスを提供するノードへアクセスできることを意味しているだけなく、データの作成や(検索クエリではなく、キー/IDによる)取得の際に、そのデータの管理を担当するノードへ直接アクセスができることを意味しています。
ここまでの処理は、ブートストラップと呼ばれます。
サービスへの接続
クラスターマップを取得すると、クライアントはサービスレベルの操作を実行するために必要な接続を確立します。
この時実行しようとする操作の種類・内容によって、承認が必要になる場合があります。ユーザーのロールが、要求しているリソースへのアクセスに対する適切な特権に関連付けられている場合、アクセスが許可されます。
クラスタートポロジが変更された場合、サービスへの接続要求の際に例外が発生する可能性があります。この場合、検出を再実行し、新しい接続で操作を再試行する必要があります。
最後に
本稿の解説の中では、特に「検出」のプロセスの部分は、他の分散アーキテクチャーを持つデータプラットフォームと比べて、Couchbase Serverに独自な部分だといえます。本記事で解説したCouchbaseにおけるプロセスとは異なり、多くの分散アーキテクチャーを持つデータベースでは、クライアントとのコミュニケーションを担当する特別なノードが存在しています。
この違いは、(メモリファーストアーキテクチャに加えて)Couchbase Serverが、低遅延・ハイスループットを実現する要素となっています。