Use um cliente S3 de alto desempenho: cliente S3 AWS CRT baseado em - AWS SDK for Java 2.x

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Use um cliente S3 de alto desempenho: cliente S3 AWS CRT baseado em

O cliente S3 AWS CRT baseado, construído com base no AWS Common Runtime (CRT), é um cliente assíncrono S3 alternativo. Ele transfere objetos de e para o Amazon Simple Storage Service (Amazon S3) com desempenho e confiabilidade aprimorados usando automaticamente o upload de várias partes e as buscas de intervalo de bytes do Amazon S3. API

O cliente S3 AWS CRT baseado melhora a confiabilidade da transferência no caso de uma falha na rede. A confiabilidade é aprimorada ao realizar novas tentativas de partes individuais com falha em uma transferência de arquivos sem reiniciar a transferência desde o início.

Além disso, o cliente S3 AWS CRT baseado oferece pool de conexões aprimorado e balanceamento de carga do Sistema de Nomes de Domínio (DNS), o que também melhora a taxa de transferência.

Você pode usar o cliente S3 AWS CRT baseado no lugar SDK do cliente assíncrono S3 padrão e aproveitar imediatamente sua taxa de transferência aprimorada.

AWS CRTcomponentes baseados no SDK

O cliente S3 AWS CRT baseado, descrito neste tópico, e o HTTPcliente AWS CRT baseado são componentes diferentes noSDK.

O cliente S3 AWS CRT baseado é uma implementação da AsyncClient interface S3 e é usado para trabalhar com o serviço Amazon S3. Ele é uma alternativa à implementação da interface S3AsyncClient baseada em Java e oferece vários benefícios.

O HTTPcliente AWS CRT baseado é uma implementação da SdkAsyncHttpClientinterface e é usado para HTTP comunicação geral. Essa é uma alternativa à implementação da interface SdkAsyncHttpClient do Netty e oferece várias vantagens.

Embora ambos os componentes usem bibliotecas do AWS Common Runtime, o cliente S3 AWS CRT baseado usa a biblioteca aws-c-s 3 e oferece suporte aos recursos de upload de várias partes do S3. API Como o HTTP cliente AWS CRT baseado é destinado ao uso geral, ele não oferece suporte aos recursos de upload API de várias partes do S3.

Adicione dependências para usar o cliente AWS CRT S3 baseado

Para usar o cliente S3 AWS CRT baseado, adicione as duas dependências a seguir ao seu arquivo de projeto Maven. O exemplo mostra as versões mínimas a serem usadas. Pesquisar no repositório central do Maven as versões mais recentes dos artefatos s3 e aws-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>

Crie uma instância do cliente S3 AWS CRT baseado

Crie uma instância do cliente S3 AWS CRT baseado com as configurações padrão, conforme mostrado no trecho de código a seguir.

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();

Para configurar o cliente, use o construtor de AWS CRT clientes. Você pode alternar do cliente assíncrono S3 padrão para o cliente AWS CRT baseado alterando o método builder.

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();
nota

Algumas das configurações no construtor padrão podem não ser suportadas atualmente no construtor de AWS CRT clientes. Obtenha o construtor padrão chamando S3AsyncClient#builder().

Use o cliente S3 AWS CRT baseado

Use o cliente S3 AWS CRT baseado para chamar as operações do Amazon API S3. O exemplo a seguir demonstra as GetObjectoperações PutObjecte disponíveis por meio do 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();

Limitações de configuração

O cliente S3 AWS CRT baseado e o cliente assíncrono S3 baseado em Java fornecem recursos comparáveis, com o cliente S3 AWS CRT baseado oferecendo uma vantagem de desempenho. No entanto, o cliente S3 AWS CRT baseado não tem as definições de configuração que o cliente assíncrono S3 baseado em Java tem. Essas configurações incluem:

  • Configuração em nível de cliente: tempo limite de tentativa de API chamada, interceptores de execução de compressão, editores de métricas, atributos de execução personalizados, opções avançadas personalizadas, serviço de execução programado personalizado, cabeçalhos personalizados

  • Configuração em nível de solicitação: assinantes personalizados, provedores de credenciais, tempo limite de tentativa de chamada API

Para obter uma lista completa das diferenças de configuração, consulte a API referência.

Cliente assíncrono S3 baseado em Java AWS CRTcliente S3 baseado
Configurações em nível de cliente

Configurações em nível de solicitação

Configurações em nível de cliente

Sem configurações em nível de solicitação