S3P fornece uma maneira radicalmente mais rápida de copiar, listar, sincronizar e realizar outras operações em massa em grandes buckets AWS S3.
Você pode usá-lo como uma ferramenta de linha de comando para operações comuns ou como uma biblioteca para quase tudo que você possa imaginar.
A API do S3 é estruturada em torno da listagem de itens em série - solicite 1.000 itens, espere e solicite os próximos 1.000. É assim que quase todas as ferramentas S3 funcionam. S3P, entretanto, pode listar itens em paralelo. Ele aproveita a capacidade do S3 de solicitar os primeiros 1.000 itens iguais ou posteriores a uma determinada chave. Então, com a ajuda da bissecção algorítmica e algumas heurísticas inteligentes, o S3P pode verificar o conteúdo de um balde com um grau arbitrário de paralelismo. Na prática, o S3P pode listar buckets até 20x mais rápido que os métodos convencionais.
S3P é na verdade apenas uma ferramenta de listagem S3 sofisticada e muito rápida. Resumir, copiar e sincronizar são potencializados pela capacidade central do S3P de listar objetos de forma radicalmente mais rápida.
Mantivemos velocidades de cópia de até 8 gigabytes/segundo entre dois buckets na mesma região usando uma única instância EC2 para executar S3P.
Leia mais sobre S3P no Medium.
NodeJS
AWS-CLI
O aws-cli
é necessário para copiar arquivos grandes. Por padrão, arquivos maiores que 100 megabytes são copiados com aws-cli
. Este é um bom compromisso para o desempenho. No entanto, você pode alterar esse limite para 5 gigabytes com a opção --large-copy-threshold
.
Por que? O
aws-sdk
não suporta arquivos maiores que 5 gigabytes sem uma solução muito mais complicada.
Os nomes das chaves devem usar um conjunto limitado de caracteres:
<space>
!"#$%&'()*+,-./
0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstuvwxyz{|}~
Por que? Como o Aws-S3 não oferece suporte à listagem de chaves em ordem decrescente, o S3P usa um algoritmo de divisão e conquista baseado em intervalo de caracteres.
s3p usa as mesmas credenciais que o aws-cli usa, então consulte a documentação: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
Não há necessidade de instalar o s3p diretamente. Contanto que você tenha o NodeJS instalado, você pode executar o s3p diretamente usando npx
.
A ajuda integrada detalha todos os comandos, opções e fornece muitos exemplos:
# list commands and get overall help
npx s3p help
Use a opção --help
para obter ajuda detalhada e exemplos para cada comando:
# get specific command help and example uses
npx s3p cp --help
Você também pode instalar o s3p localmente, o que permitirá que ele seja executado mais rapidamente.
# install s3p on your current machine
npm install s3p -g
# now it runs from the local install:
npx s3p help
Além do desempenho, o S3P oferece opções flexíveis para lista personalizada, cópia e comparação:
Surpreendentemente, você nem precisa executar o S3P na nuvem para ver muitos dos seus benefícios. Você pode executá-lo em sua máquina local e, como a cópia do S3 nunca passa diretamente pelo S3P, ela não consome nenhuma largura de banda da AWS.
O desempenho da listagem de buckets S3 pode atingir quase 20.000 50.000 itens por segundo (a partir de S3Pv3.5).
O desempenho de cópia do bucket S3 pode exceder 8 gigabytes por segundo.
Sim, vi 9 gigabytes por segundo sustentados! Isso ocorreu em um intervalo com tamanho médio de arquivo ligeiramente superior a 100 megabytes. O S3P estava sendo executado em uma única instância c5.2xlarge. Em comparação, nunca vi o aws-s3-cp atingir mais de 150mB/s. Isso é 53x mais rápido.
O tamanho médio do arquivo tem um grande impacto nos bytes por segundo gerais do s3p:
localização | comando | aws-cli | s3p | aceleração | tamanho médio |
---|---|---|---|---|---|
local | eu | 2.500 itens/s | 50.000 itens/s | 20x | n / D |
local | CP | 30MB/s | 150MB/s | 5x | 512 KB |
ec2 | CP | 150MB/s | 8GB/s | 54x | 100MB |
O S3P foi desenvolvido para operar em buckets com milhões de itens e centenas de terabytes. Atualmente, o S3P ainda é apenas um aplicativo NodeJS de núcleo único. Existem oportunidades para operações S3 paralelas ainda mais massivas, bifurcando trabalhadores ou até mesmo distribuindo o trabalho entre instâncias com algo como Elastic-Queue. Se alguém precisar de soluções 100-1000x mais rápidas que o aws-cli, informe-nos. Adoraríamos trabalhar com você.
[email protected]
Toda a documentação está incorporada nas páginas de ajuda da CLI. Usar:
# get a list of commands
npx s3p help
# get a list of options for a command
# example:
npx s3p cp --help
Todos os recursos da CLI também estão disponíveis como API. Para aprender a API, primeiro aprenda as opções da CLI e, em seguida, para aprender a chamada da API para um comando CLI específico, execute esse comando na linha de comando com a opção --api-example
. Isso gerará um exemplo de código JavaScript para invocar esse comando programaticamente.
NOTA: Quando você usa
--api-example
na linha de comando, seu comando não será realmente executado. S3P produzirá apenas o equivalente em JavaScript do comando CLI para o console e depois sairá.
Correr:
> npx s3p ls --bucket foo --quiet --api-example
Saída:
require ( "s3p" ) . ls ( {
bucket : "foo" ,
quiet : true ,
} ) ;
// > Promise
Execução de teste:
> node
Colar:
require ( "s3p" )
. ls ( {
bucket : "foo" ,
quiet : true ,
} )
. then ( out => console . log ( out ) ) ;
Saída:
[
'item1' ,
'item2' ,
'item3' ,
... 8463 more items
}
S3P foi originalmente desenvolvido por GenUI.com em conjunto com a Resolution Bioscience, Inc.
GenUI é uma consultoria de software de comercialização de tecnologia com sede em Seattle. Aceleramos roteiros de software. Sinta-se à vontade para entrar em contato com a GenUI e nos contar sobre seu projeto. Adoraríamos ouvir de você.