使用高效能 S3 用戶端: AWS CRT型 S3 用戶端 - AWS SDK for Java 2.x

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

使用高效能 S3 用戶端: AWS CRT型 S3 用戶端

AWS CRT以 為基礎的 S3 用戶端 - 建置在AWS 一般執行期 (CRT) 之上 - 是替代的 S3 非同步用戶端。它會自動使用 Amazon S3 的分段上傳API位元組範圍擷取 ,在具有增強效能和可靠性的 Amazon Simple Storage Service (Amazon S3) 之間傳輸物件。

AWS CRT型 S3 用戶端可在發生網路故障時改善傳輸可靠性。透過重試檔案傳輸的個別失敗部分,而不從頭重新開始傳輸,可改善可靠性。

此外, AWS CRT型 S3 用戶端提供增強型連線集區和網域名稱系統 (DNS) 負載平衡,這也會提高輸送量。

您可以使用 AWS CRT型 S3 用戶端取代 SDK的標準 S3 非同步用戶端,並立即利用其改善的輸送量。

AWS CRT中的 型元件 SDK

本主題中所述 AWS CRT的 型 S3 用戶端和 AWS CRT型HTTP用戶端是 中的不同元件SDK。

AWS CRT型 S3 用戶端S3AsyncClient 介面的實作,用於使用 Amazon S3 服務。它是以 Java 為基礎的S3AsyncClient介面實作的替代方案,並提供多種優點。

AWS CRT型HTTP用戶端SdkAsyncHttpClient 介面的實作,用於一般HTTP通訊。它是SdkAsyncHttpClient介面 Netty 實作的替代方案,並提供多種優點。

雖然這兩個元件都使用 AWS Common Runtime 的程式庫,但 AWS CRT型 S3 用戶端會使用 aws-c-s3 個程式庫,並支援 S3 分段上傳API功能。由於 AWS CRT型HTTP用戶端僅供一般用途使用,因此不支援 S3 分段上傳API功能。

新增相依性以使用 AWS CRT型 S3 用戶端

若要使用 AWS CRT型 S3 用戶端,請將下列兩個相依項新增至 Maven 專案檔案。此範例顯示要使用的最小版本。搜尋 Maven 中央儲存庫以取得最新版本的 s3aws-crt 成品。

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.27.21</version> </dependency> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> <version>0.30.11</version> </dependency>

建立 AWS CRT型 S3 用戶端的執行個體

使用預設設定建立 AWS CRT型 S3 用戶端的執行個體,如下列程式碼片段所示。

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();

若要設定用戶端,請使用 AWS CRT用戶端建置器。您可以透過變更建置器方法,從標準 S3 非同步用戶端切換至 AWS CRT型用戶端。

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_WEST_2) .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(8 * 1025 * 1024L) .build();
注意

AWS CRT 用戶端建置器目前可能不支援標準建置器中的某些設定。呼叫 以取得標準建置器S3AsyncClient#builder()

使用 AWS CRT型 S3 用戶端

使用 AWS CRT型 S3 用戶端呼叫 Amazon S3 API操作。下列範例示範可透過 提供的 PutObjectGetObject操作 AWS SDK for Java。

import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.async.AsyncResponseTransformer; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.PutObjectResponse; S3AsyncClient s3Client = S3AsyncClient.crtCreate(); // Upload a local file to Amazon S3. PutObjectResponse putObjectResponse = s3Client.putObject(req -> req.bucket(<BUCKET_NAME>) .key(<KEY_NAME>), AsyncRequestBody.fromFile(Paths.get(<FILE_NAME>))) .join(); // Download an object from Amazon S3 to a local file. GetObjectResponse getObjectResponse = s3Client.getObject(req -> req.bucket(<BUCKET_NAME>) .key(<KEY_NAME>), AsyncResponseTransformer.toFile(Paths.get(<FILE_NAME>))) .join();

組態限制

AWS CRT型 S3 用戶端和 Java 型 S3 非同步用戶端提供可比較的功能 ,而 AWS CRT型 S3 用戶端則提供效能邊緣。不過, AWS CRT型 S3 用戶端缺少 Java 型 S3 非同步用戶端擁有的組態設定。這些設定包括:

  • 用戶端層級組態:API呼叫嘗試逾時、壓縮執行攔截器、指標發佈者、自訂執行屬性、自訂進階選項、自訂排程執行器服務、自訂標頭

  • 請求層級組態:自訂簽署者、憑證提供者、API呼叫嘗試逾時

如需組態差異的完整清單,請參閱 API參考。

Java 型 S3 非同步用戶端 AWS CRT型 S3 用戶端
用戶端層級組態

請求層級組態

用戶端層級組態

沒有請求層級組態