S3P offre un moyen radicalement plus rapide de copier, répertorier, synchroniser et effectuer d'autres opérations en masse sur de grands compartiments AWS S3.
Vous pouvez l'utiliser comme outil de ligne de commande pour les opérations courantes, ou vous pouvez l'utiliser comme bibliothèque pour presque tout ce que vous pouvez imaginer.
L'API de S3 est structurée autour de la liste des éléments en série : demandez 1 000 éléments, attendez, puis demandez les 1 000 suivants. C'est ainsi que fonctionnent presque tous les outils S3. S3P, cependant, peut lister des éléments en parallèle. Il exploite la capacité de S3 à demander les 1 000 premiers éléments égaux ou après une clé donnée. Ensuite, à l’aide d’une bissection algorithmique et de quelques heuristiques intelligentes, S3P peut analyser le contenu d’un compartiment avec un degré arbitraire de parallisme. En pratique, S3P peut lister les buckets jusqu'à 20 fois plus rapidement que les méthodes conventionnelles.
S3P n’est en réalité qu’un outil de listage S3 sophistiqué et très rapide. La synthèse, la copie et la synchronisation sont toutes renforcées par la capacité principale de S3P à répertorier les objets beaucoup plus rapidement.
Nous avons maintenu des vitesses de copie allant jusqu'à 8 gigaoctets/seconde entre deux compartiments de la même région en utilisant une seule instance EC2 pour exécuter S3P.
En savoir plus sur S3P sur Medium.
NoeudJS
AWS-CLI
L' aws-cli
est requis pour copier des fichiers volumineux. Par défaut, les fichiers de plus de 100 Mo sont copiés avec aws-cli
. C'est un bon compromis en termes de performances. Cependant, vous pouvez modifier ce seuil à 5 gigaoctets avec l'option --large-copy-threshold
.
Pourquoi? L'
aws-sdk
ne prend pas en charge la copie de fichiers de plus de 5 gigaoctets sans une solution beaucoup plus compliquée.
Les noms de clés doivent utiliser un jeu de caractères limité :
<space>
!"#$%&'()*+,-./
0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstuvwxyz{|}~
Pourquoi? Étant donné qu'Aws-S3 ne prend pas en charge la liste des clés par ordre décroissant, S3P utilise un algorithme diviser pour régner basé sur une plage de caractères.
s3p utilise les mêmes informations d'identification qu'Aws-cli, alors consultez leur documentation : https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
Il n'est pas nécessaire d'installer s3p directement. Tant que NodeJS est installé, vous pouvez exécuter s3p directement en utilisant npx
.
L'aide intégrée détaille toutes les commandes, options et fournit de nombreux exemples :
# list commands and get overall help
npx s3p help
Utilisez l'option --help
pour obtenir une aide détaillée et des exemples pour chaque commande :
# get specific command help and example uses
npx s3p cp --help
Vous pouvez également installer s3p localement, ce qui lui permettra de s'exécuter plus rapidement.
# install s3p on your current machine
npm install s3p -g
# now it runs from the local install:
npx s3p help
En plus des performances, S3P offre des options flexibles pour la liste personnalisée, la copie et la comparaison :
Étonnamment, vous n’avez même pas besoin d’exécuter S3P dans le cloud pour bénéficier de la plupart de ses avantages. Vous pouvez l'exécuter sur votre ordinateur local et, comme la copie S3 ne passe jamais directement par S3P, elle n'utilise aucune bande passante AWS.
Les performances des listes de compartiments S3 peuvent atteindre presque 20 000 50 000 éléments par seconde (à partir de S3Pv3.5).
Les performances de copie du bucket S3 peuvent dépasser 8 gigaoctets par seconde.
Oui, j'ai vu 9 gigaoctets par seconde soutenus ! Il s'agissait d'un compartiment avec une taille de fichier moyenne légèrement supérieure à 100 mégaoctets. S3P fonctionnait sur une seule instance c5.2xlarge. En comparaison, je n'ai jamais vu aws-s3-cp obtenir plus de 150 Mo/s. C'est plus de 53 fois plus rapide.
La taille moyenne des fichiers a un impact important sur le nombre global d'octets par seconde de s3p :
emplacement | commande | aws-cli | s3p | accélération | taille moyenne |
---|---|---|---|---|---|
locale | ls | 2500 articles/s | 50 000 articles/s | 20x | n / A |
locale | CP | 30 Mo/s | 150 Mo/s | 5x | 512 Ko |
ec2 | CP | 150 Mo/s | 8 Go/s | 54x | 100 Mo |
S3P a été développé pour fonctionner sur des compartiments contenant des millions d'éléments et des centaines de téraoctets. Actuellement, S3P n’est encore qu’une application NodeJS monocœur. Il existe des opportunités pour des opérations S3 encore plus massivement parallèles en regroupant les travailleurs ou même en répartissant le travail entre les instances avec quelque chose comme Elastic-Queue. Si quelqu'un a besoin de solutions 100 à 1 000 fois plus rapides qu'Aws-cli, faites-le nous savoir. Nous serions ravis de travailler avec vous.
- [email protected]
Toute la documentation est intégrée dans les pages d'aide CLI. Utiliser:
# get a list of commands
npx s3p help
# get a list of options for a command
# example:
npx s3p cp --help
Toutes les fonctionnalités de la CLI sont également disponibles sous forme d'API. Pour apprendre l'API, apprenez d'abord les options CLI, puis, pour apprendre l'appel API pour une commande CLI spécifique, exécutez cette commande sur la ligne de commande avec l'option --api-example
. Cela affichera un exemple de code JavaScript pour appeler cette commande par programme.
REMARQUE : lorsque vous utilisez
--api-example
sur la ligne de commande, votre commande ne s'exécutera pas réellement. S3P affichera uniquement l'équivalent JavaScript de la commande CLI sur la console, puis se fermera.
Courir:
> npx s3p ls --bucket foo --quiet --api-example
Sortir:
require ( "s3p" ) . ls ( {
bucket : "foo" ,
quiet : true ,
} ) ;
// > Promise
Exécution d'essai :
> node
Coller:
require ( "s3p" )
. ls ( {
bucket : "foo" ,
quiet : true ,
} )
. then ( out => console . log ( out ) ) ;
Sortir:
[
'item1' ,
'item2' ,
'item3' ,
... 8463 more items
}
S3P a été initialement développé par GenUI.com en collaboration avec Resolution Bioscience, Inc.
GenUI est un cabinet de conseil en logiciels de commercialisation de technologies basé à Seattle. Nous accélérons les feuilles de route logicielles. N'hésitez pas à contacter GenUI et à nous parler de votre projet. Nous aimerions avoir de vos nouvelles.