Diretrizes de desempenho para o 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 desempenho do Amazon S3 .
Para obter a melhor performance para a aplicação no Amazon S3, recomendamos as seguintes diretrizes.
Tópicos
- Avalie a performance
- Escalar conexões de armazenamento horizontalmente
- Usar consultas na escala de bytes
- Solicitações de repetição para aplicações sensíveis à latência
- Associar o Amazon S3 (armazenamento) e o Amazon EC2 (computação) na mesma Região da AWS
- Usar a Aceleração de Transferências do Amazon S3 para minimizar a latência causada pela distância
- Usar a versão mais recente dos SDKs da AWS
Avalie 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 os tipos de instância, consulte Tipos de instância 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 Definição de 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.
Escalar conexões de armazenamento horizontalmente
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
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 aplicações 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.
Associar 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 saber mais sobre as diretrizes de nomenclatura de buckets, consulte Visão geral dos buckets e Regras de nomeação de 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 a Aceleração de Transferências do Amazon S3 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.
É possível usar a Ferramenta de comparação de velocidade da Aceleração de Transferências do Amazon S3
Usar a versão mais recente dos SDKs da AWS
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.