Diretrizes de performance do Amazon S3 - Amazon Simple Storage Service

Diretrizes de performance do Amazon S3

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 performance.

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

Avaliar a performance

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. Para obter mais informações sobre tipos de instância, consulte Tipos de instância no Guia do usuário do Amazon EC2 para instâncias do Linux.

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.

Monitore o número de respostas de erro de status 503 (desaceleração)

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.

  • 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 ter mais informações, consulte Usar a Lente de Armazenamento do S3 para melhorar a performance.

  • 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.

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.

Dimensionar conexões de armazenamento na horizontal

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 consulta na escala de bytes

Usando o cabeçalho HTTP Range em uma solicitação de Objeto GET, é 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.

Os tamanhos típicos das solicitações de escala de bytes são 8 MB ou 16 MB. 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 aplicativos sensíveis à latência

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.

Combinar o Amazon S3 (armazenamento) e o Amazon EC2 (computação) na mesma Região da AWS

Embora os nomes de buckets do S3 sejam globalmente exclusivos, cada bucket é armazenado em uma região selecionada ao criar o bucket. 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.

Usar o Amazon S3 Transfer Acceleration para minimizar a latência causada pela distância

Configurar transferências de arquivos rápidas e seguras usando o Amazon S3 Transfer AccelerationO 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. 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.

Você pode usar a Ferramenta de comparação de velocidade do Amazon S3 Transfer Acceleration 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 AWS SDKs

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, 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.