ステップ 6: (オプション) アプリケーションの接続プールサイズを設定するベストプラクティス - Amazon Keyspaces (Apache Cassandra 向け)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 6: (オプション) アプリケーションの接続プールサイズを設定するベストプラクティス

このセクションでは、アプリケーションのクエリースループット要件に基づいて理想的な接続プールサイズを決定する方法の概要を説明します。

Amazon Keyspaces では、TCP 接続ごとに 1 秒あたり最大 3,000 件の CQL クエリを実行できます。そのため、ドライバーが Amazon Keyspaces で確立できる接続数には実質的に制限がありません。ただし、Amazon Keyspaces を VPC エンドポイント接続で使用する場合は、接続プールのサイズをアプリケーションの要件に合わせて、使用可能なエンドポイント数を検討することをお勧めします。

接続プールのサイズはクライアントドライバーで設定します。たとえば、ローカルプールサイズが 2 で、3 つのアベイラビリティーゾーンに作成された VPC インターフェイスエンドポイントに基づいて、ドライバーはクエリ用に 6 本の接続(制御接続を含む合計 7 本)を確立します。これら 6 本の接続を使用すると、1 秒あたり最大 18,000 件の CQL クエリをサポートできます。

アプリケーションで 1 秒あたり 40,000 件の CQL クエリをサポートする必要がある場合は、必要なクエリの数から逆算して、必要な接続プールのサイズを決定します。1 秒あたり 40,000 件の CQL クエリをサポートするには、ローカルプールのサイズを 5 以上に設定する必要があります。これにより、1 秒あたり最低 45,000 件の CQL クエリをサポートできます。

AWS/Cassandra 名前空間の PerConnectionRequestRateExceeded CloudWatchメトリクスを使用して、接続ごとの 1 秒あたりの最大オペレーション数のクォータを超えたかどうかをモニタリングできます。PerConnectionRequestRateExceeded メトリクスは、接続ごとのリクエストレートのクォータを超える Amazon Keyspaces へのリクエスト数を示します。

このステップのコード例では、インターフェイス VPC エンドポイントを使用する際の接続プールのサイズを見積もって設定する方法を示します。

Java

Java ドライバーでは、プールごとの接続数を設定できます。Java クライアントドライバ接続の一式の例については、「Cassandra Java クライアントドライバーを使用した Amazon Keyspaces へのプログラムアクセス」を参照してください。

クライアントドライバーを起動すると、まず、スキーマやトポロジーの変更などの管理タスクのための制御接続がつながります。次に、追加の接続が作成されます。

次の例では、ローカルプールサイズドライバー設定は 2 に指定されています。VPC エンドポイントが VPC 内の 3 つのサブネットにまたがって作成されている場合、次の式に示すように、インターフェイスエンドポイント CloudWatch の NewConnectionsで 7 になります。

NewConnections = 3 (VPC subnet endpoints created across) * 2 (pool size) + 1 ( control connection)
datastax-java-driver { basic.contact-points = [ "cassandra.us-east-1.amazonaws.com:9142"] advanced.auth-provider{ class = PlainTextAuthProvider username = "ServiceUserName" password = "ServicePassword" } basic.load-balancing-policy { local-datacenter = "us-east-1" slow-replica-avoidance = false } advanced.ssl-engine-factory { class = DefaultSslEngineFactory truststore-path = "./src/main/resources/cassandra_truststore.jks" truststore-password = "my_password" hostname-validation = false } advanced.connection { pool.local.size = 2 } }

アクティブな接続の数が、設定したプールサイズ (サブネット全体の集計) + 1 つの制御接続と一致しない場合、何らかの原因で接続が作成を妨げられています。

Node.js

Node.js ドライバーでプールごとの接続数を設定できます。Node.js クライアントドライバ接続の一式の例については、「Cassandra Node.js クライアントドライバーを使用した Amazon Keyspaces へのプログラムアクセス」を参照してください。

次のコード例では、ローカルプールサイズドライバー設定は 1 と指定されています。VPC エンドポイントが VPC 内の 4 つのサブネットにまたがって作成されている場合、次の式に示すように、インターフェイスエンドポイント CloudWatch の NewConnectionsで 5 になります。

NewConnections = 4 (VPC subnet endpoints created across) * 1 (pool size) + 1 ( control connection)
const cassandra = require('cassandra-driver'); const fs = require('fs'); const types = cassandra.types; const auth = new cassandra.auth.PlainTextAuthProvider('ServiceUserName', 'ServicePassword'); const sslOptions1 = { ca: [ fs.readFileSync('/home/ec2-user/sf-class2-root.crt', 'utf-8')], host: 'cassandra.us-east-1.amazonaws.com', rejectUnauthorized: true }; const client = new cassandra.Client({ contactPoints: ['cassandra.us-east-1.amazonaws.com'], localDataCenter: 'us-east-1', pooling: { coreConnectionsPerHost: { [types.distance.local]: 1 } }, consistency: types.consistencies.localQuorum, queryOptions: { isIdempotent: true }, authProvider: auth, sslOptions: sslOptions1, protocolOptions: { port: 9142 } });