本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
最佳化無伺服器環境的用戶端驅動程式連線
要與 Amazon Keyspaces 進行通信,您可以使用任何您選擇的現有 Apache 卡桑德拉客戶端驅動程序。由於 Amazon Keyspaces 是無伺服器服務,因此建議您針對應用程式的輸送量需求最佳化用戶端驅動程式的連線組態。本主題介紹最佳作法,包括如何計算應用程式需要多少連線,以及監視和錯誤處理連線。
主題
Amazon Keyspaces 中的連接如何工作
本節概述用戶端驅動程式連線在 Amazon Keyspaces 中的運作方式。由於 Cassandra 用戶端驅動程式設定錯誤可能會導致 Amazon Keyspace 中的PerConnectionRequestExceeded
事件,因此需要在用戶端驅動程式組態中設定適當數量的連線,以避免這些和類似的連線錯誤。
連線至 Amazon Keyspaces 時,驅動程式需要種子端點來建立初始連線。Amazon Keyspaces 用於DNS將初始連線路由到眾多可用端點之一。端點會連接至網路負載平衡器,進而與叢集中的其中一個要求處理常式建立連線。建立初始連線之後,用戶端驅動程式會從資料system.peers
表收集所有可用端點的相關資訊。使用此資訊,用戶端驅動程式可以建立與所列端點的其他連線。用戶端驅動程式可建立的連線數目受用戶端驅動程式設定中指定的本機連線數目限制。默認情況下,大多數客戶端驅動程序為每個端點建立一個連接,並建立連接池到 Cassandra 並通過該連接池進行負載平衡查詢。雖然可以建立多個連接到同一個端點,但在網絡負載平衡器後面,它們可能會連接到許多不同的請求處理程序。透過公用端點連線時,建立一個連線至system.peers
表格中列出的九個端點,每個端點都會產生九個連線至不同的要求處理程式。
![顯示驅動程式建立的連線如何先到達 Amazon Keyspaces 服務的端點,然後繼續到達負載平衡器,以及在驗證和授權後,CQL請求到達儲存層的圖表。](images/keyspaces_bp-connections.png)
如何在 Amazon Keyspaces 中配置連接
Amazon Keyspaces 每秒每個TCP連線最多支援 3,000 個CQL查詢。由於驅動程式可建立的連線數目沒有限制,因此我們建議每個連線每秒只鎖定 500 個CQL要求,以允許額外負荷、流量突增,以及更佳的負載平衡。請遵循下列步驟,以確保驅動程式的連線已正確設定,以滿足應用程式的需求。
增加驅動程序在其連接池中維護的每個 IP 地址的連接數量。
-
大多數卡桑德拉驅動程序建立了一個連接池卡桑德拉,並通過該連接池進行負載平衡查詢。大多數驅動程序的默認行為是建立到每個端點的單個連接。Amazon Keyspaces 會向驅動程式公開九個對等 IP 地址,因此根據大多數驅動程式的預設行為,這會產生 9 個連線。Amazon Keyspaces 每秒支援每個TCP連線最多 3,000 個查CQL詢,因此,使用預設設定的驅動程式的最大CQL查詢輸送量為每秒 27,000 個查CQL詢。如果您使用驅動程式的預設設定,單一連線可能必須處理超過每秒 3,000 CQL 個CQL查詢的最大查詢輸送量。這可能會導致
PerConnectionRequestExceeded
事件。 若要避免發生
PerConnectionRequestExceeded
事件,您必須設定驅動程式為每個端點建立其他連線,以分配輸送量。作為 Amazon Keyspaces 的最佳實務,假設每個連線每秒可支援 500 個CQL查詢。
也就是說,對於需要支援每秒估計 27,000 個CQL查詢分散在九個可用端點上的實際執行應用程式,您必須為每個端點設定六個連線。這可確保每個連線每秒處理不超過 500 個要求。
根據應用程式的需求,計算您需要為驅動程式設定的每個 IP 位址的連線數目。
若要判斷您需要為應用程式針對每個端點設定的連線數目,請考慮下列範例。您有一個應用程式每秒需要支援 20,000 個CQL查詢,其中包含 10,000 個INSERT
SELECT
、5,000 個作業和 5,000 項DELETE
作業。Java 應用程序在 Amazon 彈性容器服務(AmazonECS)上的三個實例上運行,其中每個實例建立一個會話到 Amazon Keyspaces。您可以用來估計您需要為驅動程式設定多少連線的計算方式,會使用下列輸入。
您的應用程式需要支援的每秒要求數目。
因維護或失敗而減去一個的可用執行個體數目。
可用端點的數目。如果您透過公用端點進行連線,則會有九個可用端點。如果您使用的是VPC端點,則會有兩到五個可用端點之間,具體取決於區域。
每個連線每秒使用 500 個CQL查詢作為 Amazon Keyspaces 的最佳實務。
四捨五入結果。
在此範例中,公式如下所示。
20,000 CQL queries / (3 instances - 1 failure) / 9 public endpoints / 500 CQL queries per second = ROUND(2.22) = 3
根據此計算,您需要在驅動程式組態中為每個端點指定三個本機連線。對於遠端連線,每個端點僅設定一個連線。
如何透過 Amazon Keyspaces 中的VPC端點設定連線
透過私有VPC端點進行連線時,您最有可能有 3 個端點可用。根據可用區域的數目以及指派VPC的子網路數目,每個區域的VPC端點數目可能會有所不同。美國東部 (維吉尼亞北部) 區域有五個可用區域,您最多可以有五個 Amazon Keyspaces 端點。美國西部 (加利佛尼亞北部) 區域有兩個可用區域,而且您最多可以有兩個 Amazon Keyspaces 端點。端點數目不會影響規模,但會增加您需要在驅動程式組態中建立的連線數目。請考量下列範例。您的應用程式需要支援 20,000 個CQL查詢,並且在 Amazon 上的三個執行個體上執行,ECS其中每個執行個體都會建立與 Amazon Keyspaces 的單一工作階 唯一的區別是不同的端點數量可用 AWS 區域。
美國東部 (維吉尼亞北部) 區域所需的連線:
20,000 CQL queries / (3 instances - 1 failure) / 5 private VPC endpoints / 500 CQL queries per second = 4 local connections
美國西部 (加利佛尼亞北部) 區域所需的連線:
20,000 CQL queries / (3 instances - 1 failure) / 2 private VPC endpoints / 500 CQL queries per second = 10 local connections
重要
使用私有VPC端點時,Amazon Keyspaces space 需要其他許可,才能動態探索可用的VPC端點並填入system.peers
表格。如需詳細資訊,請參閱使用介面 VPC 端點資訊填入system.peers表格項目。
透過使用不同的私有VPC端點存取 Amazon Keyspaces 時 AWS 帳戶,很可能只會看到單一 Amazon Keyspaces 端點。同樣地,這不會影響 Amazon Keyspace 的可能輸送量規模,但可能需要增加驅動程式組態中的連線數量。此範例顯示單一可用端點的相同計算方式。
20,000 CQL queries / (3 instances - 1 failure) / 1 private VPC endpoints / 500 CQL queries per second = 20 local connections
若要進一步了解跨帳戶使用共用存取 Amazon Keyspaces 的詳細資訊VPC,請參閱。使用共用 VPC 中的 VPC 端點設定跨帳戶存取
如何監視 Amazon Keyspaces 中的連接
若要協助識別應用程式連線到的端點數目,您可以記錄在system.peers
表格中探索到的對等端點數目。下面的例子是 Java 代碼的一個例子,它打印的連接已建立後的對等數量。
ResultSet result = session.execute(new SimpleStatement("SELECT * FROM system.peers")); logger.info("number of Amazon Keyspaces endpoints:" + result.all().stream().count());
注意
CQL控制台或 AWS 控制台未部署在中VPC,因此使用公共端點。因此,從位於以外的應用程式執行system.peers
查詢VPCE通常會產生 9 個對等。打印每個對等端的 IP 地址也可能會有所幫助。
您也可以透過設定 VPCE Amazon CloudWatch 指標來觀察使用VPC端點時的對等數量。在中 CloudWatch,您可以看到與VPC端點建立的連線數目。Cassandra 驅動程序為每個端點建立一個連接以發送CQL查詢和控制連接以收集系統表信息。下圖顯示了在驅動程式設定中設定了 1 個連接的情況下連接到 Amazon Keyspaces 後的VPC端點 CloudWatch 指標。此指標顯示六個作用中連線,其中包含一個控制連線和五個連線 (跨可用區域的每個端點 1 個)。
![顯示 Cloudwatch 儀表板上透過VPC端點進行連線的指標的螢幕擷取畫面。使用的量度為 ActiveConnections 和 BytesProcessed。](images/keyspaces_bp_cw.png)
若要開始使用 CloudWatch 圖形監視連線數目,您可以在 Amazon Keyspaces AWS CloudFormation 範本存放庫 GitHub 中部署此範本
如何處理 Amazon Keyspaces 中的連接錯誤
當超過每個連接配額 3,000 請求時,Amazon Keyspaces 返回一個PerConnectionRequestExceeded
事件,卡桑德拉驅動程序接收或異常。WriteTimeout
ReadTimeout
您應該在 Cassandra 重試策略或應用程序中使用指數輪詢重試此異常。您應該提供指數輪詢,以避免發送額外的請求。
預設重試原則會嘗試try next host
在查詢計畫中執行。由於 Amazon Keyspaces 在連線到端點時可能會有一到三個可用端VPC點,因此您也可能會在應用程式日誌NoHostAvailableException
中看到除了WriteTimeout
和ReadTimeout
例外狀況之外的。您可以使用 Amazon Keyspaces 提供的重試政策,這些政策會在相同的端點上重試,但跨不同的連線重試。
您可以在 Amazon Keyspaces Java 代碼示例存儲庫 GitHub 中找到 Java 的指數重試政策的示例