Como posso melhorar o desempenho de transferência do comando de sincronização para o Amazon S3?

4 minuto de leitura
0

Eu uso o comando de sincronização da AWS Command Line Interface (AWS CLI) para transferir dados no Amazon Simple Storage Service (Amazon S3). No entanto, a transferência leva muito tempo para ser concluída.

Resolução

O comando sync compara os buckets de origem e de destino para determinar quais arquivos de origem não exigem no bucket de destino. O comando sync também determina quais arquivos de origem foram modificados quando comparados aos arquivos no bucket de destino. Em seguida, ele copia os arquivos de origem novos ou atualizados para o bucket de destino.

O número de objetos no bucket de origem e destino podem afetar o tempo que demora para o comando sync concluir o processo. O tamanho da transferência pode afetar a duração da sincronização ou o custo que você incorre com as solicitações para o Amazon S3.

Os marcadores de exclusão também afetam o desempenho da lista; portanto, é uma prática recomendada minimizar o número de marcadores de exclusão. Como o comando sync executa chamadas de API list no back-end, os marcadores de exclusão também afetam o desempenho do comando sync.

Para melhorar o tempo de transferência ao executar o comando sync, implemente as seguintes práticas.

Executar várias instâncias da AWS CLI

Para copiar uma grande quantidade de dados, execute várias instâncias do AWS CLI para realizar operações de sincronização separadas em paralelo. Por exemplo, você pode executar operações de sincronização paralela para diferentes prefixos:

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder1 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder1  
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder2 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder2

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

Ou execute operações de sincronização paralela para filtros de exclusão e inclusão separados. Por exemplo, as operações a seguir separam os arquivos a serem sincronizados por nomes de chave que começam com números de 0 a 4 e números de 5 a 9:

Observação: mesmo ao utilizar filtros de exclusão e inclusão, o comando sync ainda analisa todos os arquivos no bucket de origem. Essa análise ajuda a identificar quais arquivos de origem devem ser copiados para o bucket de destino. Se ainda houver várias operações de sincronização que tenham como destino diferentes prefixos de nomes chave, cada operação de sync analisará todos os arquivos de origem. No entanto, devido aos filtros de exclusão e inclusão, apenas os arquivos que você inclui nos filtros são copiados ao bucket de destino.

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"  
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"

Para obter mais informações sobre como otimizar o desempenho da sua carga de trabalho, consulte Práticas recomendadas de padrões de design: otimizar o desempenho do Amazon S3.

Modificação do valor de configuração da AWS CLI para max_concurrent_requests

Para potencialmente melhorar o desempenho, modifique o valor de max_concurrent_requests. Esse valor define o número de solicitações que podem ser enviadas ao Amazon S3 por vez. O valor padrão é 10, mas você pode aumentá-lo para um valor maior. No entanto, observe as seguintes limitações:

  • Executar mais threads consome mais recursos na sua máquina. Você deve ter certeza de que sua máquina tem recursos suficientes para ser compatível com o número máximo de solicitações simultâneas que você deseja.
  • Muitas solicitações simultâneas podem sobrecarregar o sistema. Isso pode causar tempos limite de conexão ou diminuir a capacidade de resposta do sistema. Para evitar problemas de tempo limite da AWS CLI, defina o valor --cli-read-timeout ou o valor --cli-connect-timeout como 0.

(Opcional) Verifique a configuração da instância

Se você usa uma instância do Amazon Elastic Compute Cloud (Amazon EC2) para executar a operação de sincronização, siga as seguintes práticas recomendadas:

  • Revise o tipo da instância. Tipos de instância maiores podem oferecer melhores resultados, pois têm alta largura de banda e redes otimizadas para o Amazon Elastic Block Store (Amazon EBS).
  • Se a instância estiver em uma região da AWS diferente do bucket, use uma instância na mesma região. Para reduzir a latência, reduza a distância geográfica entre a instância e seu bucket do Amazon S3.
  • Se a instância estiver na mesma região do bucket de origem, configure um endpoint Amazon Virtual Private Cloud (Amazon VPC) para S3. Os endpoints VPC podem ajudar a melhorar o desempenho geral.

Informações relacionadas

Como posso melhorar as velocidades de transferência para copiar dados entre meu bucket do S3 e a instância do EC2?

Qual a melhor maneira de transferir grandes quantidades de dados de um bucket do Amazon S3 para outro?

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses