

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 步驟 6：（選用） 為應用程式設定連線集區大小的最佳實務
<a name="vpc-endpoints-tutorial.connections"></a>

在本節中，我們概述如何根據應用程式的查詢輸送量需求，判斷理想的連線集區大小。

Amazon Keyspaces 每個 TCP 連線每秒最多允許 3，000 個 CQL 查詢。因此，驅動程式可以使用 Amazon Keyspaces 建立的連線數幾乎沒有限制。不過，我們建議您將連線集區大小符合應用程式的需求，並在搭配 VPC 端點連線使用 Amazon Keyspaces 時考慮可用的端點。

您可以在用戶端驅動程式中設定連線集區大小。例如，根據本機集區大小 **2** 和跨 **3** 個可用區域建立的 VPC 介面端點，驅動程式會建立 **6** 個用於查詢的連線 （總共 7 個，其中包括控制連線）。使用這 6 個連線，您每秒最多可支援 18，000 個 CQL 查詢。

如果您的應用程式需要每秒支援 40，000 個 CQL 查詢，請從判斷所需連線集區大小所需的查詢數目向後工作。若要支援每秒 40，000 個 CQL 查詢，您需要將本機集區大小設定為至少 5 個，這支援每秒至少 45，000 個 CQL 查詢。

您可以使用 `AWS/Cassandra` 命名空間中的 `PerConnectionRequestRateExceeded` CloudWatch 指標，監控您是否超過每個連線每秒最大操作數的配額。此`PerConnectionRequestRateExceeded`指標會顯示對 Amazon Keyspaces 的請求數量，這些請求超過每個連線請求率的配額。

此步驟中的程式碼範例示範如何在使用介面 VPC 端點時估計和設定連線集區。

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

您可以在 Java 驅動程式中設定每個集區的連線數。如需 Java 用戶端驅動程式連線的完整範例，請參閱 [使用 Cassandra Java 用戶端驅動程式以程式設計方式存取 Amazon Keyspaces](using_java_driver.md)。

當用戶端驅動程式啟動時，首先會為管理任務建立控制連線，例如結構描述和拓撲變更。然後建立額外的連線。

在下列範例中，本機集區大小驅動程式組態指定為 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 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 `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/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 }
        });
```

------