S3P bietet eine radikal schnellere Möglichkeit zum Kopieren, Auflisten, Synchronisieren und Ausführen anderer Massenvorgänge über große AWS S3-Buckets.
Sie können es als Befehlszeilentool für allgemeine Vorgänge oder als Bibliothek für fast alles verwenden, was Sie sich vorstellen können.
Die S3-API ist so strukturiert, dass sie Artikel serienmäßig auflistet – 1.000 Artikel anfordern, warten und dann die nächsten 1.000 anfordern. So funktionieren fast alle S3-Tools. S3P kann jedoch Artikel parallel auflisten. Es nutzt die Fähigkeit von S3, die ersten 1000 Elemente gleich oder nach einem bestimmten Schlüssel anzufordern. Anschließend kann S3P mithilfe der algorithmischen Halbierung und einiger intelligenter Heuristiken den Inhalt eines Buckets mit einem beliebigen Grad an Parallelität scannen. In der Praxis kann S3P Buckets bis zu 20-mal schneller auflisten als herkömmliche Methoden.
S3P ist eigentlich nur ein schickes, wirklich schnelles S3-Listing-Tool. Das Zusammenfassen, Kopieren und Synchronisieren wird durch die Kernfähigkeit von S3P, Objekte deutlich schneller aufzulisten, beschleunigt.
Wir haben Kopiergeschwindigkeiten von bis zu 8 Gigabyte/Sekunde zwischen zwei Buckets in derselben Region mit einer einzigen EC2-Instanz zum Ausführen von S3P aufrechterhalten.
Lesen Sie mehr über S3P auf Medium.
NodeJS
AWS-CLI
Zum Kopieren großer Dateien ist die aws-cli
erforderlich. Standardmäßig werden Dateien, die größer als 100 Megabyte sind, mit aws-cli
kopiert. Dies ist ein guter Kompromiss für die Leistung. Sie können diesen Schwellenwert jedoch mit der Option --large-copy-threshold
auf 5 Gigabyte ändern.
Warum? Das
aws-sdk
unterstützt das Kopieren von Dateien, die größer als 5 Gigabyte sind, nicht ohne eine viel kompliziertere Lösung.
Schlüsselnamen müssen einen begrenzten Zeichensatz verwenden:
<space>
!"#$%&'()*+,-./
0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstuvwxyz{|}~
Warum? Da Aws-S3 das Auflisten von Schlüsseln in absteigender Reihenfolge nicht unterstützt, verwendet S3P einen auf Zeichenbereichen basierenden Divide-and-Conquer-Algorithmus.
s3p verwendet die gleichen Anmeldeinformationen, die auch aws-cli verwendet. Sehen Sie sich daher deren Dokumentation an: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
Es ist nicht erforderlich, s3p direkt zu installieren. Solange Sie NodeJS installiert haben, können Sie s3p direkt mit npx
ausführen.
Die integrierte Hilfe beschreibt alle Befehle und Optionen detailliert und bietet viele Beispiele:
# list commands and get overall help
npx s3p help
Verwenden Sie die Option --help
, um detaillierte Hilfe und Beispiele für jeden Befehl zu erhalten:
# get specific command help and example uses
npx s3p cp --help
Sie können s3p auch lokal installieren, wodurch es schneller ausgeführt wird.
# install s3p on your current machine
npm install s3p -g
# now it runs from the local install:
npx s3p help
Zusätzlich zur Leistung bietet S3P flexible Optionen für benutzerdefinierte Listen, Kopieren und Vergleichen:
Überraschenderweise müssen Sie S3P nicht einmal in der Cloud ausführen, um viele seiner Vorteile zu nutzen. Sie können es auf Ihrem lokalen Computer ausführen und da das S3-Kopieren nie direkt über S3P erfolgt, wird keine AWS-Bandbreite beansprucht.
Die Leistung des S3-Bucket-Listings kann nahezu erreicht werden 20.000 50.000 Elemente pro Sekunde (ab S3Pv3.5).
Die S3-Bucket-Kopierleistung kann 8 Gigabyte pro Sekunde überschreiten.
Ja, ich habe eine kontinuierliche Geschwindigkeit von 9 Gigabyte pro Sekunde gesehen! Dies geschah in einem Bucket mit einer durchschnittlichen Dateigröße von etwas mehr als 100 Megabyte. S3P wurde auf einer einzelnen c5.2xlarge-Instanz ausgeführt. Im Vergleich dazu habe ich noch nie gesehen, dass aws-s3-cp mehr als 150 MB/s erreicht. Das ist über 53x schneller.
Die durchschnittliche Dateigröße hat einen großen Einfluss auf die Gesamtbytes pro Sekunde von s3p:
Standort | Befehl | aws-cli | s3p | Beschleunigung | durchschnittliche Größe |
---|---|---|---|---|---|
lokal | ls | 2500 Artikel/s | 50000 Artikel/s | 20x | n / A |
lokal | vgl | 30 mB/s | 150 mB/s | 5x | 512 kB |
ec2 | vgl | 150 mB/s | 8 GB/s | 54x | 100 MB |
S3P wurde für den Betrieb mit Buckets mit Millionen von Elementen und Hunderten von Terabyte entwickelt. Derzeit ist S3P noch nur eine Single-Core-NodeJS-Anwendung. Es gibt Möglichkeiten für noch massiver parallele S3-Vorgänge durch Forken von Workern oder sogar durch Verteilen der Arbeit auf Instanzen mit etwas wie Elastic-Queue. Wenn jemand Lösungen benötigt, die 100-1000x schneller als aws-cli sind, lassen Sie es uns wissen. Wir würden gerne mit Ihnen zusammenarbeiten.
- [email protected]
Die gesamte Dokumentation ist in die CLI-Hilfeseiten eingebettet. Verwenden:
# get a list of commands
npx s3p help
# get a list of options for a command
# example:
npx s3p cp --help
Alle Funktionen der CLI stehen auch als API zur Verfügung. Um die API zu erlernen, lernen Sie zunächst die CLI-Optionen kennen. Um dann den API-Aufruf für einen bestimmten CLI-Befehl zu erlernen, führen Sie diesen Befehl in der Befehlszeile mit der Option --api-example
aus. Dadurch wird Beispiel-JavaScript-Code zum programmgesteuerten Aufrufen dieses Befehls ausgegeben.
HINWEIS: Wenn Sie
--api-example
in der Befehlszeile verwenden, wird Ihr Befehl nicht tatsächlich ausgeführt. S3P gibt nur das JavaScript-Äquivalent des CLI-Befehls an die Konsole aus und wird dann beendet.
Laufen:
> npx s3p ls --bucket foo --quiet --api-example
Ausgabe:
require ( "s3p" ) . ls ( {
bucket : "foo" ,
quiet : true ,
} ) ;
// > Promise
Probelauf:
> node
Paste:
require ( "s3p" )
. ls ( {
bucket : "foo" ,
quiet : true ,
} )
. then ( out => console . log ( out ) ) ;
Ausgabe:
[
'item1' ,
'item2' ,
'item3' ,
... 8463 more items
}
S3P wurde ursprünglich von GenUI.com in Zusammenarbeit mit Resolution Bioscience, Inc. entwickelt.
GenUI ist ein Softwareberatungsunternehmen für die Technologiekommerzialisierung mit Sitz in Seattle. Wir beschleunigen Software-Roadmaps. Bitte kontaktieren Sie GenUI und erzählen Sie uns von Ihrem Projekt. Wir würden uns freuen, von Ihnen zu hören.