Diretrizes de performance e padrões de design para a classe S3 Express One Zone
Ao criar aplicações que fazem upload e recuperam objetos da classe Amazon S3 Express One Zone, siga as nossas diretrizes de práticas recomendadas para otimizar a performance. Para usar a classe de armazenamento S3 Express One Zone, é necessário criar um bucket de diretório do S3. A classe de armazenamento S3 Express One Zone não é compatível com buckets de uso geral do S3.
Para consultar as diretrizes de desempenho para todas as outras classes de armazenamento do Amazon S3 e para buckets de uso geral do S3, consulte Padrões de design de melhores práticas: otimização do desempenho do Amazon S3.
Para obter a melhor performance de uma aplicação ao usar a classe de armazenamento S3 Express One Zone e os buckets de diretório, recomendamos as diretrizes e os padrões de design a seguir.
Tópicos
- Implante o armazenamento da classe S3 Express One Zone na mesma localização dos recursos de computação da AWS.
- Buckets de diretório
- Paralelização de solicitações de ajuste de escala horizontal de um bucket de diretórios
- Usar a autenticação baseada em sessão
- Práticas recomendadas adicionais de soma de verificação do S3
- Usar a versão mais recente dos AWS SDKs e das bibliotecas de tempo de execução comuns
- Solução de problemas de performance
Implante o armazenamento da classe S3 Express One Zone na mesma localização dos recursos de computação da AWS.
Cada bucket de diretório é armazenado em uma única zona de disponibilidade selecionada ao criar o bucket. Você pode começar criando um bucket de diretório em uma zona de disponibilidade local para as workloads de computação ou os recursos. Depois, você pode iniciar imediatamente leituras e gravações de latência muito baixa. Os buckets de diretório são os primeiros buckets do S3 em que você pode escolher a zona de disponibilidade em uma Região da AWS a fim de reduzir a latência entre computação e armazenamento.
Se você acessar buckets de diretório entre zonas de disponibilidade, a latência aumentará. Para otimizar a performance, recomendamos que você acesse um bucket de diretório por instâncias do Amazon Elastic Container Service, do Amazon Elastic Kubernetes Service e do Amazon Elastic Compute Cloud que estejam localizadas na mesma zona de disponibilidade, sempre que possível.
Buckets de diretório
Cada bucket de diretório é capaz de oferecer suporte a centenas de milhares de transações por segundo (TPS). Ao contrário dos buckets de uso geral, os buckets de diretórios organizam as chaves hierarquicamente em diretórios em vez de prefixos. Um prefixo é uma string no início do nome da chave do objeto. Você pode pensar nos prefixos como uma forma de organizar seus dados de forma semelhante aos diretórios. No entanto, os prefixos não são diretórios.
Os prefixos organizam os dados em um namespace simples dentro de buckets de uso geral, e não há limites para o número de prefixos em um intervalo de uso geral. Cada prefixo pode atingir pelo menos 3.500 PUT
/POST
/DELETE
ou 5.500 GET
/HEAD
solicitações por segundo. Você também pode paralelizar solicitações entre vários prefixos para escalar a performance. No entanto, no caso de operações de leitura e gravação, esse ajuste de escala ocorre gradualmente e não é algo instantâneo. Embora os buckets de uso geral escalem para a nova taxa de solicitação mais alta, você poderá receber alguns erros do código de status HTTP 503 (serviço indisponível).
Com um namespace hierárquico, o delimitador na chave de objeto é importante. O único delimitador compatível é a barra (/
). Os diretórios são determinados pelos limites de delimitador. Por exemplo, a chave de objeto dir1/dir2/file1.txt
resulta na criação automática dos diretórios dir1
/ e dir2/
, além da adição do objeto file1.txt
ao diretório /dir2
no caminho dir1/dir2/file1.txt
.
Os diretórios criados quando os objetos são carregados em buckets de diretório não têm limites de TPS por prefixo e são pré-dimensionados automaticamente para reduzir a chance de erros HTTP 503 (serviço indisponível). Esse ajuste de escala automático permite que as aplicações emparelhem as solicitações de leitura e gravação dentro de um diretório e entre diretórios, conforme necessário.
Paralelização de solicitações de ajuste de escala horizontal de um bucket de diretórios
O melhor desempenho pode ser atingido com a emissão de várias solicitações simultâneas para buckets de diretório a fim de distribuir as solicitações em conexões separadas e maximizar a largura de banda acessível. A classe S3 Express One Zone não tem nenhum limite para o número de conexões feitas ao bucket de diretório. Diretórios individuais podem escalar a performance horizontal e automaticamente quando ocorre um grande número de gravações simultâneas no mesmo diretório.
Quando uma chave de objeto é criada e seu nome de chave inclui um diretório, o diretório é criado automaticamente para o objeto. Os uploads subsequentes de objetos para o mesmo diretório não exigirão que o diretório seja criado, o que reduzirá a latência dos uploads de objetos nos diretórios existentes.
Embora estruturas de diretórios superficiais e profundas sejam compatíveis para armazenar objetos em um bucket de diretório, os buckets de diretório têm a escala horizontal ajustada automaticamente, com menor latência em uploads simultâneos para o mesmo diretório ou para irmãos de diretórios paralelos.
Usar a autenticação baseada em sessão
A classe S3 Express One Zone e os buckets de diretório oferecem suporte a um novo mecanismo de autorização baseado em sessão para autenticar e autorizar solicitações para um bucket de diretório. Com a autenticação baseada em sessão, os AWS SDKs usam automaticamente a operação de API CreateSession
para criar um token temporário de sessão que pode ser usado para autorização de baixa latência de solicitações de dados a um bucket de diretório.
Os AWS SDKs usam a operação de API CreateSession
para solicitar credenciais temporárias, depois criam e atualizam tokens para você automaticamente a cada 5 minutos. Para aproveitar os benefícios de performance da classe de armazenamento S3 Express One Zone, recomendamos que você use os AWS SDKs para iniciar e gerenciar a solicitação de API CreateSession
. Para obter mais informações sobre esse modelo baseado em sessão, consulte Autorizar operações de API de endpoint zonal com CreateSession.
Práticas recomendadas adicionais de soma de verificação do S3
A classe S3 Express One Zone oferece a opção de escolher o algoritmo de soma de verificação usado para validar os dados durante o upload ou o download. Você pode selecionar um dos seguintes algoritmos de verificação de integridade de dados de hash seguro (SHA) ou de verificação de redundância cíclica (CRC): CRC32, CRC32C, SHA-1 e SHA-256. As somas de verificação baseadas em MD5 não são compatíveis com a classe de armazenamento S3 Express One Zone.
CRC32 é a soma de verificação padrão usada pelos AWS SDKs ao transmitir dados de ou para a classe S3 Express One Zone. Recomendamos usar CRC32 e CRC32C para obter a melhor performance com a classe de armazenamento S3 Express One Zone.
Usar a versão mais recente dos AWS SDKs e das bibliotecas de tempo de execução comuns
Vários dos AWS SDKs também fornecem as bibliotecas Common Runtime (CRT) da AWS para acelerar ainda mais a performance em clientes do S3. Esses SDKs incluem o AWS SDK for Java 2.x, o AWS SDK for C++ e o AWS SDK for Python (Boto3). O cliente do S3 baseado em CRT transfere objetos de e para a classe S3 Express One Zone com performance e confiabilidade aprimorados usando automaticamente a operação de API de multipart upload e buscas de intervalo de bytes para automatizar as conexões de ajuste de escala horizontal.
Para alcançar a melhor performance com a classe de armazenamento S3 Express One Zone, recomendamos usar a versão mais recente dos AWS SDKs que incluem as bibliotecas CRT ou usar a AWS Command Line Interface (AWS CLI).
Solução de problemas de performance
Solicitações de repetição para aplicações sensíveis à latência
A classe S3 Express One Zone foi desenvolvida com o propósito específico de oferecer níveis consistentes de alta performance sem ajustes adicionais. No entanto, definir valores agressivos de tempo limite e novas tentativas pode ajudar ainda mais a impulsionar níveis consistentes de latência e desempenho. 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.
Bibliotecas Common Runtime (CRT) da AWS e emparelhamento de tipos de instância do Amazon EC2
As aplicações que executam um grande número de operações de leitura e gravação provavelmente precisam de mais memória ou capacidade de computação do que as aplicações que não o fazem. Ao inicializar as instâncias do Amazon Elastic Compute Cloud (Amazon EC2) para uma workload que exige muita performance, escolha tipos de instância com a quantidade desses recursos que a aplicação precisa. O armazenamento de alta performance da classe S3 Express One Zone apresenta combinação ideal com tipos de instância maiores e mais novos, com quantidades maiores de memória do sistema e CPUs e GPUs mais poderosas que podem aproveitar o armazenamento de alta performance. Também recomendamos usar as versões mais recentes dos AWS SDKs habilitados para CRT, que podem acelerar ainda mais as solicitações de leitura e gravação em paralelo.
Usar a autenticação baseada em sessão nos AWS SDKs em vez das APIs REST HTTP
Com o Amazon S3, você também pode otimizar a performance ao usar solicitações da API REST HTTP seguindo as mesmas práticas recomendadas que fazem parte dos AWS SDKs. No entanto, com o mecanismo de autorização e autenticação baseado em sessão usado pela classe S3 Express One Zone, é altamente recomendável que você use os AWS SDKs para gerenciar CreateSession
e o respectivo token de sessão gerenciada. Os AWS SDKs criam e atualizam tokens automaticamente em seu nome usando a operação de API CreateSession
. O uso de CreateSession
gera economia na latência de ida e volta por solicitação para que o AWS Identity and Access Management (IAM) autorize cada solicitação.