本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 的最佳實務 AWS SDK for Java 2.x
透過設定 API 逾時來防止懸置請求
SDK 提供一些逾時選項的預設值
您可以使用 ClientOverrideConfiguration#apiCallAttemptTimeout
和 為服務用戶端提出的所有請求設定逾時ClientOverrideConfiguration#apiCallTimeout
。
下列範例顯示具有自訂逾時值的 Amazon S3 用戶端組態。
S3Client.builder() .overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(
<custom value>
)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>
))) .build();
apiCallAttemptTimeout
-
此設定會設定單一 HTTP 嘗試的時間量,之後即可重試 API 呼叫。
apiCallTimeout
-
此屬性的值會設定整個執行的時間量,包括所有重試嘗試。
除了在服務用戶端上設定這些逾時值之外,您也可以使用 RequestOverrideConfiguration#apiCallTimeout()
RequestOverrideConfiguration#apiCallAttemptTimeout()
來設定單一請求 。
下列範例會設定具有自訂逾時值的單一listBuckets
請求。
s3Client.listBuckets(lbr -> lbr.overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(
<custom value>
)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>
))));
當您同時使用這些屬性時,您可以針對所有重試嘗試所花費的總時間設定硬性限制。您也可以將個別 HTTP 請求設定為在慢速請求上快速失敗。
透過重複使用 服務用戶端來改善效能
每個服務用戶端都會維護自己的 HTTP 連線集區。已存在於集區中的連線可由新的請求重複使用,以縮短建立新連線的時間。我們建議共用用戶端的單一執行個體,以避免過多連線集區未有效使用的負荷。所有服務用戶端都是執行緒安全。
如果您不想共用用戶端執行個體,請在執行個體close()
上呼叫 ,以在不需要用戶端時釋出資源。
關閉未使用的服務用戶端以防止資源洩漏
如果不再需要執行緒,請關閉服務用戶端以釋出資源,例如執行緒。如果您不想共用用戶端執行個體,請在執行個體close()
上呼叫 ,以在不需要用戶端時釋出資源。
關閉輸入串流以防止連線集區耗盡
對於串流操作,例如 S3Client#getObject
,如果您ResponseInputStream
直接使用 ,我們建議您執行下列動作:
-
盡快讀取輸入串流中的所有資料。
-
盡快關閉輸入串流。
我們提出這些建議,因為輸入串流是來自 HTTP 連線的直接資料串流,而且在讀取串流中的所有資料且串流關閉之前,無法重複使用基礎 HTTP 連線。如果未遵循這些規則,用戶端可以透過配置太多開啟但未使用的 HTTP 連線來耗盡資源。
為您的應用程式工作負載最佳化 HTTP 效能
開發套件提供一組適用於一般使用案例的預設 http 組態
開發套件提供智慧型組態預設值功能,是很好的起點。此功能從 2.17.102 版開始可用。您可以根據您的使用案例選擇模式,以提供合理的組態值。
使用非同步用戶端的 OpenSSL 改善 SSL 效能
根據預設,開發套件的 NettyNioAsyncHttpClient
SslProvider
。我們的測試發現 OpenSSL 的效能優於 JDK 的預設實作。Netty 社群也建議使用 OpenSSL
若要使用 OpenSSL,請將 netty-tcnative
新增至您的相依性。如需組態詳細資訊,請參閱 Netty 專案文件
在您為專案netty-tcnative
設定 之後,NettyNioAsyncHttpClient
執行個體會自動選取 OpenSSL。或者,您可以使用NettyNioAsyncHttpClient
建置器SslProvider
明確設定 ,如下列程式碼片段所示。
NettyNioAsyncHttpClient.builder() .sslProvider(SslProvider.OPENSSL) .build();
使用 SDK 指標監控應用程式效能
適用於 Java 的 SDK 可以收集應用程式中服務用戶端的指標。您可以使用這些指標來識別效能問題、檢閱整體用量趨勢、檢閱傳回的服務用戶端例外狀況,或深入了解特定問題。
我們建議您收集指標,然後分析 Amazon CloudWatch Logs,以便更深入了解應用程式的效能。