本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用高效能 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 用戶端是 S3AsyncClientS3AsyncClient
介面實作的替代方案,並提供多種優點。
AWS CRT型HTTP用戶端是 SdkAsyncHttpClientSdkAsyncHttpClient
介面 Netty 實作的替代方案,並提供多種優點。
雖然這兩個元件都使用 AWS Common Runtime 的程式庫,但 AWS CRT型 S3 用戶端會使用 aws-c-s3 個程式庫
新增相依性以使用 AWS CRT型 S3 用戶端
若要使用 AWS CRT型 S3 用戶端,請將下列兩個相依項新增至 Maven 專案檔案。此範例顯示要使用的最小版本。搜尋 Maven 中央儲存庫以取得最新版本的 s3
<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操作。下列範例示範可透過 提供的 PutObject
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 用戶端 |
---|---|
用戶端層級組態 請求層級組態 |
用戶端層級組態 沒有請求層級組態 |