使用 Amazon CRT基于高性能 S3 客户端:的 S3 客户端 - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon CRT基于高性能 S3 客户端:的 S3 客户端

Amazon CRT基于的 S3 客户端(建立在Amazon 公共运行时 (CRT) 之上)是替代的 S3 异步客户端。它通过自动使用 Amazon S3 的分段API上传和字节范围提取功能,在亚马逊简单存储服务 (Amazon S3) Simple Ser vice (Amazon S3) 之间传输对象,从而提高了性能和可靠性。

Amazon CRT基于的 S3 客户端可提高网络故障时的传输可靠性。通过重试文件传输中失败的各个分段,而无需从头开始重新启动传输,从而提高可靠性。

此外, Amazon CRT基于的 S3 客户端还提供了增强的连接池和域名系统 (DNS) 负载平衡,这也提高了吞吐量。

您可以使用 Amazon CRT基于的 S3 客户端代替SDK的标准 S3 异步客户端,并立即利用其提高的吞吐量。

Amazon CRT中基于的组件 SDK

本主题中介绍 Amazon CRT的基于 S3 的客户端和 Amazon CRT基于的HTTP客户端是中的不同组件SDK。

Amazon CRT基于的 S3 客户端是 S 3 AsyncClient 接口的实现,用于使用 Amazon S3 服务。它是基于 Java 的 S3AsyncClient 接口实现的替代方案,具有多种优势。

Amazon CRT基于的HTTP客户端SdkAsyncHttpClient接口的实现,用于一般HTTP通信。它是 Netty SdkAsyncHttpClient 接口实现的替代方案,具有多种优势。

尽管两个组件都使用Amazon 公共运行时中的库,但 Amazon CRT基于的 S3 客户端使用 aws-c-s3 库并支持 S3 分段上传API功能。由于 Amazon CRT基于的HTTP客户端仅供一般用途,因此它不支持 S3 分段上传API功能。

添加依赖项以使用 Amazon CRT基于的 S3 客户端

要使用 Amazon CRT基于的 S3 客户端,请将以下两个依赖项添加到您的 Maven 项目文件中。示例显示了要使用的最低版本。在 Maven Central 存储库中搜索 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>

创建 Amazon CRT基于的 S3 客户端的实例

使用默认设置创建 Amazon CRT基于 S3 客户端的实例,如以下代码片段所示。

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();

要配置客户端,请使用 Amazon CRT客户端生成器。您可以通过更改构建器方法从标准 S3 异步客户端切换到 Amazon CRT基于标准的 S3 异步客户端。

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();
注意

Amazon CRT客户端生成器目前可能不支持标准生成器中的某些设置。通过调用 S3AsyncClient#builder() 获取标准生成器。

使用 Amazon CRT基于的 S3 客户端

使用 Amazon CRT基于的 S3 客户端调用 Amazon S3 API 操作。以下示例演示了可通过提供的PutObjectGetObject操作 Amazon 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();

配置限制

Amazon CRT基于 S3 客户端和基于 Java 的 S3 异步客户端提供了类似的功能,而 Amazon CRT基于的 S3 客户端则提供了性能优势。但是, Amazon CRT基于的 S3 客户端缺少基于 Java 的 S3 异步客户端所具有的配置设置。这些设置包括:

  • 客户端级配置:API调用尝试超时、压缩执行拦截器、指标发布器、自定义执行属性、自定义高级选项、自定义计划执行器服务、自定义标头

  • 请求级别配置:自定义签名者、凭证提供者、API呼叫尝试超时

有关配置差异的完整列表,请参阅API参考资料。

基于 Java 的 S3 异步客户端 Amazon CRT基于 S3 客户端
客户端级配置

请求级配置

客户端级配置

没有请求级别的配置