So können Sie in Python kleine Dateien effizient nach Amazon S3 hochladen

8

In letzter Zeit muss ich ein Programm zum Hochladen von Dateien in Amazon EC2 zu S3 in Python so schnell wie möglich implementieren. Und die Größe der Dateien sind 30KB.

Ich habe einige Lösungen versucht, mit mehreren Threads, Mehrfachverarbeitung, Co-Routine. Das Folgende ist mein Leistungstest-Ergebnis für Amazon EC2.

3600 (die Anzahl der Dateien) * 30K (Dateigröße) ~~ 105M (Gesamt) --- & gt;

%Vor%

Der Code wie folgt angezeigt

Für Multithreading

%Vor%

Für die Coroutine

%Vor%

Für die Mehrfachverarbeitung

%Vor%

Die Konfiguration der Maschine ist Ubuntu 14.04, 2 CPUs (2.50GHz), 4G Speicher

Die höchste erreichte Geschwindigkeit liegt bei 19Mb / s (105 / 5,5) . Insgesamt ist es zu langsam. Irgendeine Möglichkeit, es zu beschleunigen? Kann Stackless Python es schneller machen?

    
Jacky 15.12.2014, 06:35
quelle

3 Antworten

0

Beispiele für parallele Uploads zu Amazon S3 mit dem Python boto SDK finden Sie hier:

Anstatt den Code selbst zu schreiben, sollten Sie auch die AWS-Befehlszeilenschnittstelle (CLI) aufrufen, die kann Uploads parallel durchführen. Es ist auch in Python geschrieben und verwendet Boto.

    
John Rotenstein 15.12.2014 10:29
quelle
0

Ich habe das gleiche Problem wie du. Meine Lösung hat die Daten an AWS SQS gesendet und dann mit AWS Lambda in S3 gespeichert.

So sieht der Datenfluss aus: App - & gt; SQS - & gt; Lambda - & gt; S3

Der gesamte Prozess ist asynchron, aber nahezu in Echtzeit:)

    
Hkar 15.10.2015 08:24
quelle
0

Ich musste vor kurzem etwa 5 TB kleine Dateien nach AWS hochladen und erreichte volle Netzwerkbandbreite ~ 750 MBit (1 GB pro Server) ohne Probleme, indem ich einen höheren Wert für "max_concurrent_request" in der Datei ~ / .aws / config einstellte.

Ich habe den Prozess weiter beschleunigt, indem ich mehrere Upload-Jobs über eine bash for-Schleife gestartet und diese Jobs an verschiedene Server gesendet habe.

Ich habe auch versucht, Python zB. s3-parallel-put, aber ich denke, dieser Ansatz ist viel schneller. Wenn die Dateien zu klein sind, sollte man natürlich folgendes beachten: Komprimieren - & gt; Lade es auf EBS / S3 hoch und entpacke es dort

Hier ist ein Code, der helfen könnte.

%Vor%

Dann starten Sie mehrere aws Kopieraufträge, zB:

%Vor%     
PlagTag 03.02.2016 08:14
quelle

Tags und Links