

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

# ステップ 6: (オプション) アプリケーションの接続プールサイズを設定するベストプラクティス
<a name="vpc-endpoints-tutorial.connections"></a>

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

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 つあたりの 1 秒あたりの最大オペレーション数のクォータを超えているかどうかをモニタリングできます。`PerConnectionRequestRateExceeded` メトリクスは、接続ごとのリクエストレートのクォータを超える Amazon Keyspaces へのリクエスト数を示します。

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

------
#### [ Java ]

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

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

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

```
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 1 つの制御接続と一致しない場合、何らかの原因で接続が作成を妨げられています。

------
#### [ Node.js ]

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

次のコード例では、デジタル証明書に *keyspaces-bundle.pem* ファイルを使用しています。詳細については「[[開始する前に]](using_nodejs_driver.md#using_nodejs_driver.BeforeYouBegin)」を参照してください。

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

```
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/keyspaces-bundle.pem', '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 }
        });
```

------