

# Padrões de design de melhores práticas: otimizar a performance do Amazon S3
<a name="optimizing-performance"></a>

As aplicações podem executar facilmente milhares de transações por segundo em performance de solicitação ao fazer upload e recuperar armazenamento do Amazon S3. O Amazon S3 escala automaticamente para taxas de solicitações elevadas. Por exemplo, a aplicação pode atingir pelo menos 3,5 mil solicitações PUT/COPY/POST/DELETE ou 5,5 mil solicitações GET/HEAD por segundo por prefixo particionado do Amazon S3. Não há limite para o número de prefixos em um bucket. Você pode melhorar a performance de leitura ou gravação usando paralelização. Por exemplo, se você criar 10 prefixos em um bucket do Amazon S3 para paralelizar leituras, poderá escalar a performance de leitura para 55.000 solicitações de leitura por segundo. Da mesma forma, você pode dimensionar as operações de gravação gravando em vários prefixos. O ajuste de escala, no caso de operações de leitura e gravação, ocorre gradualmente e não é imediato. Além disso, o desempenho real varia de acordo com as características específicas da workload, os padrões de uso e a configuração do sistema. Embora o Amazon S3 esteja escalando para sua nova taxa de solicitação mais alta, você pode ver alguns erros 503 (desaceleração). Esses erros serão dissipados quando o ajuste de escala for concluído. Para obter mais informações sobre como criar e usar prefixos, consulte [Organizar objetos usando prefixos](using-prefixes.md).

Por exemplo, algumas aplicações de data lake no Amazon S3 verificam milhões ou bilhões de objetos para consultas que são executadas em petabytes de dados. Essas aplicações de data lake atingem taxas de transferência de instância única que maximizam o uso da interface de rede para a instância do [Amazon EC2](https://docs.aws.amazon.com/ec2/index.html), que podem ser de até 100 Gb/s em uma única instância. Esses aplicativos então agregam a taxa de transferência em várias instâncias para obter vários terabits por segundo. 

Outros aplicativos são sensíveis à latência, como aplicativos de mensagem de mídias sociais. Essas aplicações podem atingir latências consistentes de objetos pequenos (e latências de saída de primeiro byte para objetos maiores) de aproximadamente 100 a 200 milissegundos.

Outros serviços da AWS também podem ajudar a acelerar a performance para diferentes arquiteturas de aplicação. Por exemplo, para obter taxas de transferência mais altas em uma única conexão HTTP ou latências de um dígito de milissegundos, use o [Amazon CloudFront](https://docs.aws.amazon.com/cloudfront/index.html) ou o [Amazon ElastiCache](https://docs.aws.amazon.com/elasticache/index.html) para armazenar em cache com o Amazon S3.

Além disso, se você quiser um transporte de dados rápido em longas distâncias entre um cliente e um bucket do S3, use [Configurar transferências de arquivos rápidas e seguras usando o Amazon S3 Transfer Acceleration](transfer-acceleration.md). O Transfer Acceleration usa os pontos de presença distribuídos globalmente no CloudFront para acelerar o transporte de dados em distâncias geográficas. Se a workload do Amazon S3 usa criptografia do lado do servidor com o AWS KMS, consulte [Limites do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html) no Guia do desenvolvedor do AWS Key Management Service para obter informações sobre as taxas de solicitações compatíveis com seu caso de uso. 

Os tópicos a seguir descrevem as diretrizes de melhores práticas e os padrões de design para otimizar a performance de aplicações que usam o Amazon S3. Consulte [Diretrizes de desempenho para o Amazon S3](optimizing-performance-guidelines.md) e [Padrões de design de desempenho do Amazon S3](optimizing-performance-design-patterns.md) para obter as informações mais recentes sobre a otimização de performance do Amazon S3. 

**nota**  
Para obter mais informações sobre o uso da classe de armazenamento Amazon S3 Express One Zone com buckets de diretório, consulte [S3 Express One Zone](directory-bucket-high-performance.md#s3-express-one-zone) e [Trabalhar com buckets de diretório](directory-buckets-overview.md).

**Topics**
+ [Diretrizes de desempenho para o Amazon S3](optimizing-performance-guidelines.md)
+ [Padrões de design de desempenho do Amazon S3](optimizing-performance-design-patterns.md)

  


# Diretrizes de desempenho para o Amazon S3
<a name="optimizing-performance-guidelines"></a>

Ao criar aplicações que fazem upload e recuperam objetos do Amazon S3, siga as diretrizes de melhores práticas para otimizar a performance. Também oferecemos mais detalhado [Padrões de design de desempenho do Amazon S3 ](optimizing-performance-design-patterns.md). 

Para obter a melhor performance para a aplicação no Amazon S3, recomendamos as seguintes diretrizes.

**Topics**
+ [

## Avalie a performance
](#optimizing-performance-guidelines-measure)
+ [

## Escalar conexões de armazenamento horizontalmente
](#optimizing-performance-guidelines-scale)
+ [

## Usar consultas na escala de bytes
](#optimizing-performance-guidelines-get-range)
+ [

## Solicitações de repetição para aplicações sensíveis à latência
](#optimizing-performance-guidelines-retry)
+ [

## Associar o Amazon S3 (armazenamento) e o Amazon EC2 (computação) na mesma Região da AWS
](#optimizing-performance-guidelines-combine)
+ [

## Usar a Aceleração de Transferências do Amazon S3 para minimizar a latência causada pela distância
](#optimizing-performance-guidelines-acceleration)
+ [

## Usar a versão mais recente dos SDKs da AWS
](#optimizing-performance-guidelines-sdk)

## Avalie a performance
<a name="optimizing-performance-guidelines-measure"></a>

Ao otimizar a performance, observe os requisitos de throughput de rede, CPU e DRAM. Dependendo da combinação de demandas desses recursos diferentes, convém avaliar os diferentes tipos de instância do [Amazon EC2](https://docs.aws.amazon.com/ec2/index.html). Para obter mais informações sobre os tipos de instância, consulte [Tipos de instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) no *Guia do usuário do Amazon EC2*. 

Também é útil observar o tempo de pesquisa de DNS, a latência e a velocidade de transferência dos dados usando ferramentas de análise de HTTP ao avaliar a performance.

 Para entender os requisitos de performance e otimizar a performance da aplicação, você também pode monitorar as respostas de erro 503 que você recebe. O monitoramento de determinadas métricas de performance pode gerar despesas adicionais. Para obter mais informações, consulte [Preço do Amazon S3](https://aws.amazon.com/s3/pricing/). 

### Monitore o número de respostas de erro de status 503 (desaceleração)
<a name="optimizing-performance-guidelines-measure-503"></a>

 Para monitorar o número de respostas de erro de status 503 que você recebe, use uma das seguintes opções:
+ Use métricas de solicitação do Amazon CloudWatch para o Amazon S3. As métricas de solicitação do CloudWatch incluem uma métrica para respostas de status 5xx. Para obter mais informações sobre métricas de solicitação do CloudWatch, consulte [Monitoramento de métricas com o Amazon CloudWatch](cloudwatch-monitoring.md).
+ Use a contagem de erros 503 (Serviço indisponível) disponível na seção de métricas avançadas da Lente de Armazenamento do Amazon S3. Para obter mais informações, consulte [Usar a Lente de Armazenamento do S3 para melhorar a performance](storage-lens-detailed-status-code.md).
+ Use o registro em log de acesso ao servidor do Amazon S3. Com o registro de acesso ao servidor, é possível filtrar e revisar todas as solicitações que recebem respostas 503 (erro interno). Você também pode usar o Amazon Athena para analisar logs. Para obter mais informações sobre o registro em log de acesso ao servidor, consulte [Registrar em log as solicitações com registro em log de acesso ao servidor](ServerLogs.md).

 Ao monitorar o número de códigos de erro de status HTTP 503, muitas vezes você pode obter informações valiosas sobre quais prefixos, chaves ou buckets estão recebendo mais solicitações de controle de utilização. 

## Escalar conexões de armazenamento horizontalmente
<a name="optimizing-performance-guidelines-scale"></a>

A distribuição de solicitações em muitas conexões é um padrão de design comum para dimensionamento horizontal da performance. Ao criar aplicações de alta performance, pense no Amazon S3 como um sistema distribuído muito grande, não como um único endpoint de rede de um servidor de armazenamento tradicional. Para atingir a melhor performance, emita várias solicitações simultâneas para o Amazon S3. Espalhe essas solicitações em conexões separadas para maximizar a largura de banda acessível do Amazon S3. O Amazon S3 não tem limites para o número de conexões feitas ao bucket. 

## Usar consultas na escala de bytes
<a name="optimizing-performance-guidelines-get-range"></a>

Usando o cabeçalho HTTP `Range` em uma solicitação de [Objeto GET](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html), é possível consultar um objeto em escala de bytes, transferindo somente a parte especificada. É possível usar conexões simultâneas ao Amazon S3 para buscar diferentes escalas de bytes no mesmo objeto. Isso ajuda a atingir um throughput agregado maior em comparação com uma única solicitação de objeto inteiro. A consulta de escalas menores de um objeto grande também permite que o aplicativo melhore os tempos de repetição quando as solicitações são interrompidas. Para obter mais informações, consulte [Baixar objetos](download-objects.md).

Se os objetos usarem a solicitação PUT com um upload de várias partes, é recomendado usar a solicitação GET nos mesmos tamanhos de parte (ou pelo menos de acordo com os limites de parte) para obter a melhor performance. As solicitações GET podem abordar partes individuais diretamente; por exemplo, `GET ?partNumber=N.`

## Solicitações de repetição para aplicações sensíveis à latência
<a name="optimizing-performance-guidelines-retry"></a>

Repetições e tempos limite agressivos ajudam a obter uma latência consistente. Devido à grande escala do Amazon S3, se a primeira solicitação for lenta, uma solicitação repetida provavelmente seguirá um caminho diferente e será bem-sucedida rapidamente. Os AWS SDKs têm valores configuráveis de tempo limite e repetição que podem ser ajustados de acordo com as tolerâncias da aplicação específica.

## Associar o Amazon S3 (armazenamento) e o Amazon EC2 (computação) na mesma Região da AWS
<a name="optimizing-performance-guidelines-combine"></a>

Embora os nomes de buckets do S3 sejam globalmente exclusivos, cada bucket é armazenado em uma região selecionada ao criar o bucket. Para saber mais sobre as diretrizes de nomenclatura de buckets, consulte [Visão geral dos buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) e [Regras de nomeação de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html). Para otimizar a performance, recomendamos acessar o bucket nas instâncias do Amazon EC2 na mesma Região da AWS quando possível. Isso ajuda a reduzir os custos de latência de rede e transferência de dados.

Para obter mais informações sobre custos de transferência de dados, consulte [Definição de preço do Amazon S3](https://aws.amazon.com/s3/pricing/).

## Usar a Aceleração de Transferências do Amazon S3 para minimizar a latência causada pela distância
<a name="optimizing-performance-guidelines-acceleration"></a>

[Configurar transferências de arquivos rápidas e seguras usando o Amazon S3 Transfer Acceleration](transfer-acceleration.md)O gerencia transferências de arquivos rápidas, fáceis e seguras em longas distâncias entre o cliente e um bucket do S3. O Transfer Acceleration tira proveito dos pontos de presença distribuídos globalmente no [Amazon CloudFront](https://docs.aws.amazon.com/cloudfront/index.html). Conforme os dados chegam a um ponto de presença, eles são roteados para o Amazon S3 por um caminho de rede otimizado. O Transfer Acceleration é ideal para transferir gigabytes a terabytes de dados regularmente entre os continentes. Ele também é útil para clientes que fazem upload em um bucket centralizado do mundo todo.

É possível usar a [Ferramenta de comparação de velocidade da Aceleração de Transferências do Amazon S3](https://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-speed-comparsion.html) para comparar velocidades de upload aceleradas e não aceleradas em regiões do Amazon S3. A ferramenta de comparação de velocidade usa multipart uploads para transferir um arquivo do navegador para várias regiões do Amazon S3 com e sem o uso do Amazon S3 Transfer Acceleration.

## Usar a versão mais recente dos SDKs da AWS
<a name="optimizing-performance-guidelines-sdk"></a>

Os AWS SDKs fornecem suporte integrado a muitas da diretrizes recomendadas para otimizar a performance do Amazon S3. Os SDKs fornecem uma API mais simples para aproveitar o Amazon S3 em uma aplicação e são atualizados regularmente para seguir as práticas recomendadas mais recentes. Por exemplo, os SDKs incluem uma lógica para executar automaticamente solicitações de repetição em erros HTTP 503 e estão investindo em código para responder e se adaptar a conexões lentas. 

Os SDKs também fornecem o [Gerenciador de transferências](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/examples-s3-transfermanager.html), que automatiza conexões de dimensionamento horizontal para atingir milhares de solicitações por segundo, usando solicitações na escala de bytes quando apropriado. É importante usar a última versão dos AWS SDKs para obter os recursos mais recentes de otimização de performance.

Também é possível otimizar a performance ao usar solicitações de API REST HTTP. Ao usar a API REST, siga as mesmas práticas recomendadas que fazem parte dos SDKs. Permita tempo limite e repetição em solicitações lentas e que várias conexões consultem dados de objeto em paralelo. Para obter informações sobre como usar a API REST, consulte a [Referência da API do Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/API/).

# Padrões de design de desempenho do Amazon S3
<a name="optimizing-performance-design-patterns"></a>

Ao projetar aplicações para fazer upload e recuperar objetos do Amazon S3, use nossas melhores práticas e padrões de design para atingir a melhor performance da aplicação. Também oferecemos [Diretrizes de desempenho para o Amazon S3 ](optimizing-performance-guidelines.md) a ser considerado ao planejar a arquitetura da aplicação.

Para otimizar a performance, você pode usar os padrões de design a seguir.

**Topics**
+ [

## Usar o armazenamento em cache para conteúdo acessado com frequência
](#optimizing-performance-caching)
+ [

## Tempo limite e repetição para aplicações sensíveis à latência
](#optimizing-performance-timeouts-retries)
+ [

## Escalabilidade horizontal e paralelização de solicitações para alto throughput
](#optimizing-performance-parallelization)
+ [

## Usar a Aceleração de Transferências do Amazon S3 para acelerar transferências de dados geograficamente dispersas
](#optimizing-performance-acceleration)
+ [

## Otimizar para workloads com altas taxas de solicitação
](#optimizing-performance-high-request-rate)

## Usar o armazenamento em cache para conteúdo acessado com frequência
<a name="optimizing-performance-caching"></a>

Muitas aplicações que armazenam dados no Amazon S3 fornecem um “conjunto de trabalho” de dados que são solicitados várias vezes pelos usuários. Se uma workload estiver enviando solicitações GET repetidas a um conjunto comum de objetos, você poderá usar um cache, como o [Amazon CloudFront](https://docs.aws.amazon.com/cloudfront/index.html), o [Amazon ElastiCache](https://docs.aws.amazon.com/elasticache/index.html) ou o [AWS Elemental MediaStore](https://docs.aws.amazon.com/mediastore/index.html) para otimizar o desempenho. A adoção bem-sucedida do cache pode resultar em baixar latência e altas taxas de transferência de dados. As aplicações que usam o armazenamento em cache também enviam menos solicitações diretas ao Amazon S3, o que também pode ajudar a reduzir os custos de solicitações.

O Amazon CloudFront é uma rede de entrega de conteúdo (CDN) rápida que armazena os dados do Amazon S3 em cache com transparência em um grande conjunto de pontos de presença (PoPs) distribuídos geograficamente. Quando os objetos podem ser acessados em várias regiões ou pela Internet, o CloudFront permite que os dados sejam armazenados em cache perto dos usuários que estão acessando os objetos. Isso pode resultar na entrega de alta performance de conteúdo popular do Amazon S3. Para obter mais informações sobre o CloudFront, consulte o [Guia do desenvolvedor do Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/).

O Amazon ElastiCache é um cache de memória gerenciado. Com o ElastiCache, é possível provisionar instâncias do Amazon EC2 que armazenam objetos em cache na memória. Esse armazenamento em cache resulta em pedidos de redução de magnitude da latência de GET e aumentos significativos no throughput de download. Para usar o ElastiCache, modifique a lógica da aplicação para preencher o cache com objetos dinâmicos e verifique se esses objetos estão presentes no cache antes de solicitá-los do Amazon S3. Para obter exemplos de como usar o ElastiCache para melhorar a performance de GET do Amazon S3, consulte a publicação do blog [Turbocharge Amazon S3 with Amazon ElastiCache for Redis](https://aws.amazon.com/blogs/storage/turbocharge-amazon-s3-with-amazon-elasticache-for-redis/).

O AWS Elemental MediaStore é um sistema de armazenamento em cache e de distribuição de conteúdo criado especificamente para fluxos de trabalho de vídeo e entrega de mídia do Amazon S3. O MediaStore fornece APIs de armazenamento completas especificamente para vídeo e é recomendado para workloads de vídeo sensíveis à performance. Para obter informações sobre o MediaStore, consulte o [Guia do usuário do AWS Elemental MediaStore](https://docs.aws.amazon.com/mediastore/latest/ug/). 

## Tempo limite e repetição para aplicações sensíveis à latência
<a name="optimizing-performance-timeouts-retries"></a>

Há determinadas situações em que uma aplicação recebe uma resposta do Amazon S3 indicando que uma nova tentativa é necessária. O Amazon S3 mapeia nomes de bucket e de objetos para os dados do objeto associados a eles. Se um aplicativo gerar altas taxas de solicitação (normalmente taxas constantes de mais de 5.000 solicitações por segundo para um pequeno número de objetos), ele poderá receber respostas HTTP 503 de *lentidão*. Se esses erros ocorrerem, cada AWS SDK implementará uma lógica de repetição automática usando o recuo exponencial. Se você não estiver usando um AWS SDK, implemente a lógica de repetição ao receber o erro HTTP 503. Consulte mais informações em [Retry behavior](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html) no *Guia de referência de ferramentas e SDKs da AWS*.

O Amazon S3 é dimensionado automaticamente em resposta a novas taxas constantes de solicitação, otimizando a performance dinamicamente. Enquanto o Amazon S3 estiver sendo otimizado internamente para uma nova taxa de solicitação, você receberá respostas de solicitação HTTP 503 temporariamente até a otimização terminar. Depois que o Amazon S3 otimiza a performance internamente para a nova taxa de solicitação, todas as solicitações serão executadas de forma geral sem repetições. 

Para aplicações sensíveis à latência, o Amazon S3 recomenda rastrear e repetir agressivamente as operações mais lentas. Ao repetir uma solicitação, recomendamos usar uma nova conexão ao Amazon S3 e executar uma nova pesquisa de DNS. 

Ao fazer solicitações de tamanhos variavelmente grandes (por exemplo, mais de 128 MB), recomendamos rastrear o throughput atingido e repetir os 5% mais lentos das solicitações. Ao fazer solicitações menores (por exemplo, menos de 512 KB), onde latências medianas geralmente estão na faixa de dezenas de milissegundos, é recomendado repetir uma operação GET ou PUT depois de 2 segundos. Se outras repetições forem necessárias, é recomendado recuar. Por exemplo, recomendamos emitir uma repetição depois de 2 segundos e uma segunda repetição depois de mais 4 segundos.

Se a aplicação fizer solicitações de tamanho fixo para o Amazon S3, espere tempos de resposta mais consistentes para cada uma dessas solicitações. Nesse caso, uma estratégia simples é identificar o 1% mais lento de solicitações e repetí-las. Uma única repetição consegue reduzir a latência.

Se estiver usando o AWS Key Management Service (AWS KMS) para criptografia do lado do servidor, consulte [Quotas](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html) no *Guia do desenvolvedor do AWS Key Management Service* para ter informações sobre as taxas de solicitações oferecidas para o seu caso de uso.

## Escalabilidade horizontal e paralelização de solicitações para alto throughput
<a name="optimizing-performance-parallelization"></a>

O Amazon S3 é um sistema distribuído muito grande. Para ajudar a aproveitar essa escala, recomendamos dimensionar horizontalmente as solicitações paralelas para os endpoints do serviço Amazon S3. Além de distribuir as solicitações no Amazon S3, esse tipo de abordagem de dimensionamento ajuda a distribuir a carga em vários caminhos na rede.

Para obter altas taxas de transferência, o Amazon S3 recomenda usar aplicações com várias conexões para executar solicitações GET ou PUT paralelas de dados. Por exemplo, isso é compatível com o [Amazon S3 Transfer Manager](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/transfer-manager.html) no AWS SDK for Java, e a maioria dos outros AWS SDKs fornece construções semelhantes. Para alguns aplicativos, você pode atingir conexões paralelas iniciando várias solicitações ao mesmo tempo em diferentes threads de aplicativo ou em diferentes instâncias de aplicativo. A melhor abordagem depende do aplicativo e da estrutura dos objetos acessados.

Você pode usar os AWS SDKs para emitir solicitações GET e PUT diretamente em vez de empregar o gerenciamento de transferências no AWS SDK. Essa abordagem permite ajustar a workload mais diretamente, além de ainda aproveitar o suporte do SDK para repetições e o processamento das eventuais respostas HTTP 503. Como regra geral, ao baixar grandes objetos do Amazon S3, sugerimos fazer solicitações simultâneas para maximizar o throughput da rede e otimizar o desempenho do download. Para fazer isso, solicite intervalos de bytes específicos do objeto ou baixe partes individuais de um objeto de várias partes simultaneamente. Essa abordagem de download paralelo ajuda a utilizar totalmente a capacidade da placa de interface de rede (NIC). Para objetos que foram carregados usando multipart upload, recomendamos baixá-los usando os mesmos tamanhos de parte ou alinhando as solicitações aos limites da parte original para obter o melhor desempenho. Esse método de download simultâneo fornece maior throughput agregado em comparação com solicitações de um único objeto inteiro.

A avaliação da performance é importante ao ajustar o número de solicitações a serem emitidas ao mesmo tempo. Recomendamos começar com uma única solicitação de cada vez. Meça a largura de banda de rede atingida e o uso de outros recursos que o aplicativo usa no processamento dos dados. Você pode identificar o recurso de gargalo (isto é, o recurso com maior utilização) e, assim, o número de solicitações que provavelmente serão úteis. Por exemplo, se processar uma solicitação por vez usa 25% da CPU, é recomendado acomodar até quatro solicitações simultâneas. A medição é essencial e vale a pena confirmar o uso do recurso conforme a taxa de solicitação aumenta. 

Se a aplicação emitir solicitações diretamente para o Amazon S3 usando a API REST, recomendamos usar um grupo de conexões HTTP e reutilizar cada conexão para uma série de solicitações. Evitar a configuração de conexão por solicitação elimina a necessidade de realizar handshakes Secure Sockets Layer (SSL) e TCP de inicialização lenta em cada solicitação. Para obter informações sobre como usar a API REST, consulte a [Referência da API do Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/API/).

Finalmente, vale prestar atenção ao DNS e verificar novamente se as solicitações estão sendo distribuídas em um grande grupo de endereços IP do Amazon S3. As consultas de DNS para o Amazon S3 percorrem uma grande lista de endpoints IP. No entanto, o armazenamento em cache de solucionadores ou código do aplicativo que reutiliza um único endereço IP não aproveita a diversidade de endereços e o balanceamento de carga associados. Ferramentas de utilitário de rede, como a ferramenta de linha de comando `netstat`, podem mostrar os endereços IP usados para comunicação com o Amazon S3, e nós fornecemos diretrizes para as configurações de DNS que devem ser usadas. Consulte mais informações sobre essas diretrizes em [Making requests](https://docs.aws.amazon.com/AmazonS3/latest/API/MakingRequests.html) na *Referência da API do Amazon S3*.

## Usar a Aceleração de Transferências do Amazon S3 para acelerar transferências de dados geograficamente dispersas
<a name="optimizing-performance-acceleration"></a>

[Configurar transferências de arquivos rápidas e seguras usando o Amazon S3 Transfer Acceleration](transfer-acceleration.md)O é útil para minimizar ou eliminar a latência causada pela distância geográfica entre clientes distribuídos globalmente e uma aplicação regional que usa o Amazon S3. O Transfer Acceleration usa os pontos de presença distribuídos globalmente no CloudFront para transporte de dados. A rede de borda da AWS tem pontos de presença em mais de 50 locais. Atualmente, ela é usada para distribuir conteúdo por meio do CloudFront e fornecer respostas rápidas para consultas de DNS feitas para o [Amazon Route 53](https://docs.aws.amazon.com/route53/index.html). 

A rede de borda também ajuda a acelerar transferências de dados enviadas e recebidas do Amazon S3. Ela é ideal para aplicativos que transferem dados em ou entre continentes, possuem uma rápida conexão com a Internet, usam objetos grandes ou possuem muito conteúdo para upload. Conforme os dados chegam em um ponto de presença, eles são roteados para o Amazon S3 por um caminho de rede otimizado. Em geral, quanto mais distante você está de uma região do Amazon S3, maior a melhoria de velocidade que pode esperar do uso do Transfer Acceleration. 

Você pode configurar o Transfer Acceleration em buckets novos ou existentes. Use um endpoint separado do Amazon S3 Transfer Acceleration para usar os locais de borda da AWS. A melhor maneira de testar se o Transfer Acceleration ajuda a performance da solicitação do cliente é usar a [Ferramenta de comparação de velocidade do Amazon S3 Transfer Acceleration](https://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-speed-comparsion.html). As configurações e condições de rede variam periodicamente e de um lugar para outro. Portanto, você só é cobrado para transferências em que o Amazon S3 Transfer Acceleration pode melhorar a performance do upload. Para obter informações sobre o uso do Transfer Acceleration com diferentes AWS SDKs, consulte [Habilitar e usar o S3 Transfer Acceleration](transfer-acceleration-examples.md). 

## Otimizar para workloads com altas taxas de solicitação
<a name="optimizing-performance-high-request-rate"></a>

As aplicações que geram altas taxas de solicitação para o Amazon S3 exigem padrões de design específicos para alcançar o desempenho ideal. Quando sua aplicação gera consistentemente mais de 3,5 mil solicitações PUT/POST/DELETE ou 5,5 mil solicitações GET/HEAD por segundo por prefixo, é necessário implementar estratégias para distribuir as solicitações e lidar com o comportamento de ajuste de escala.

O Amazon S3 escala automaticamente para acomodar taxas de solicitação mais altas, mas esse ajuste de escala é feito gradualmente. Durante o processo de ajuste de escala, você pode receber respostas HTTP 503 (Slow Down). Essas respostas são temporárias e indicam que o Amazon S3 está otimizando os respectivos sistemas internos para seu novo padrão de solicitação. Quando o ajuste de escala for concluído, suas solicitações serão atendidas sem controle de utilização.

Para otimizar o desempenho das workloads com altas taxas de solicitação, considere as seguintes estratégias:
+ **Distribua as solicitações em vários prefixos**: use um padrão de prefixo aleatório ou sequencial para distribuir as solicitações em várias partições. Por exemplo, em vez de usar nomes de objetos sequenciais, como `log-2024-01-01.txt`, use prefixos aleatórios, como `a1b2/log-2024-01-01.txt`. Isso ajuda o Amazon S3 a distribuir a carga com maior eficiência.
+ **Implemente o recuo exponencial para erros 503**: ao receber respostas HTTP 503, implemente a lógica de nova tentativa com o recuo exponencial. Comece com um pequeno atraso e aumente gradualmente o tempo de espera entre as novas tentativas. Os SDKs da AWS incluem uma lógica de nova tentativa integrada que lida com isso automaticamente.
+ **Monitore os padrões de solicitação**: use as métricas do Amazon CloudWatch para monitorar as taxas de solicitação e de erro. Preste especial atenção às métricas de erro 5xx, que podem indicar quando sua aplicação está se aproximando ou excedendo os limites de ajuste de escala atuais.
+ **Aumente gradualmente as taxas de solicitação**: ao lançar novas aplicações ou aumentar as taxas de solicitação de modo significativo, aumente o tráfego ao longo do tempo de forma gradual, em vez de saltar de imediato para as taxas de pico. Isso permite que o Amazon S3 escale de maneira proativa e reduza a probabilidade de controle de utilização.
+ **Use várias conexões**: distribua suas solicitações em várias conexões HTTP para maximizar o throughput e reduzir o impacto de qualquer problema de conexão individual.

Para aplicações que exigem alto desempenho consistente, considere usar o Amazon S3 Express One Zone, projetado para aplicações que exigem latências abaixo de 10 milissegundos e podem comportar centenas de milhares de solicitações por segundo. Para obter mais informações, consulte [S3 Express One Zone](directory-bucket-high-performance.md#s3-express-one-zone).