S3 zu S3 Transfer des Media Folders

Hallo an alle,

ich habe aktuell das Problem, dass ich von einem bestehenden S3 Storage bei Bunny umziehen möchte zu einem anderen S3 Anbieter.

Ich kann mir ja in der config.php über das cdn Objekt mehrere Adapter anlegen. Soweit so einfach. Ich hätte also einen Adapter für S3 Bunny und dann für S3 23M.

Dabei würde ich gerne liveMigration => true nutzen. Nur wie bringe ich Shopware jetzt dazu, S3 23M als Default zu nutzen, der sich dann Bilder von S3 Bunny abholt und entsprechend abholt?

Die config.php dabei ist eigentlich klar:

'cdn' => [
        'backend' => 's323m',
        'strategy' => 'md5',
        'liveMigration' => true,
        'adapters' => [
            's323m' => [
                'type' => 's3',
                'liveMigration' => true,
                // ganze S3 23M Konfiguration
            ],
           's3bunny' => [
              'type' => 's3',
              // ganze S3 Bunny analog wie auch bei S323M usw.
           ]
        ],
   ],

Jetzt muss ich Shopware beibringen, dass s323m sich die Daten bei Bedarf von s3bunny holen muss. Und daran scheitert es aktuell gerade.

Eine Migration „mal eben“ ist nicht bei ca. 1.2 Millionen Bild Dateien und einem Speicherbedarf von ca. 85GB. Eine Live Migration ist da schon nötig, eine manuelle Migration parallel über CLI kann ja einfach laufen. Oder auch über S3 kompatible Transfer Software.

Den Schritt über S3 Bunny → local → S3 23M möchte ich dabei natürlich tunlichst vermeiden.

Hat jemand eine Idee, wie man dies am sinnvollsten hinbekommen kann in dieser Konstellation?
Übrigens wird für das Bunny CDN aktuell das Plugin Media-Storage-Adapter für bunnyCDN von FOS genutzt.

Danke schon mal und viele Grüße
Michael

Soweit ich das verstehe, wird dein Vorhaben so nicht funktionieren. In dem Bunny CDN Plugin von FOS erfolgt die Übertragung der Dateien zwischen Shopware und Bunny CDN über die im Plugin verbaute Bunny CDN API. Du brauchst ein Stück Software (analog dem FOS Plugin), das die Übertragung zwischen shopware und m23 initial und später im laufenden Betrieb übernimmt.

Darf ich mal fragen, warum du migrieren möchtest? Aktuell bin ich sehr zufreiden mit Bunny CDN.

Hallo sacrofano,

wie erwähnt, wären wir nur bei ein paar tausend Bilder, alles nice, kurze Maintenance über Nacht, einmal einen Transfer gemacht und gut ist. Problem ist eben ausschließlich die Menge und Dauer.

Da ich ja über die Shopware CLI einfach ein migrate --from … --to machen kann, dachte ich, es gäbe auch noch eine Möglichkeit, die Adapter so zu „verbiegen“, dass Shopware Bunny wie sein „local“ behandelt und einfach zu 23M verschiebt. Ich muss mir den Code vom Standard Adapter nochmal ansehen, irgendwas muss ja gehen.

Neue Bilder sollen gar nicht mehr auf Bunny, sondern direkt zu 23M. Für was wir dann Bunny noch nutzen wollen, und das ist technisch möglich, als quasi Edge für Tinify und WebP converter on the fly. Das kann Bunny tatsächlich gut.

Wir haben auch nicht den „einfachen“ Storage bei Bunny, sondern den Edge SSD, auch mit entsprechenden Zonen usw. usw. Das Geld wäre quasi sekundär, wenn auch natürlich nicht mit vollen Geldsäcken hinterher geworfen. Durch die Optimierungen der Bilder hatten wir im November tatsächlich nur knappe 3TB an Bandbreite. Ohne Komprimierung und WebP wäre das natürlich entsprechend sehr viel höher gewesen.

Was aber echt teils schrecklich ist bei Bunny, sind so ganz banale Themen, bei denen man nur den Kopf schütteln kann und auch technische Probleme.

  • Bunny kann nach wie vor z.B. kein rsync. Das Uploaden der Daten aufgrund von Restriktionen bei Bunny hat über 1 Woche gedauert, da Bunny z.B. immer wieder in irgendwelche Limits gelaufen ist (via SFTP). Und da SFTP geht ist der Schritt zu rsync sehr klein.
  • Die API ist teils auch stets bemüht, vor allem bei entsprechend vielen Verbindungen, ist ja nicht so, dass man das nicht auch versucht hätte.
  • Bunny ist selbst nicht in der Lage (auch nicht gegen Bezahlung), eine Kopie des Storages auf ein anderes Storage zu erzeugen! Es sollte ein Stage/Dev Storage her. Bei 1.2 Mio Dateien und 85GB an Daten natürlich enorm lustig, wenn man via Verbindung kein rsync nutzen kann und der interne FTP Client ein Witz ist. Nicht einmal FXP unterstützen die Server, dann könnte man ja da noch was machen.

Das waren jetzt nur 3 der „banalen“ Dinge.

Viel schlimmer wiegt aber der Umstand, dass ein Upload 1 (in Worten eines!) Bildes teils 5+ Sekunden in Anspruch nimmt. Nicht wegen der Bandbreite, nicht weil das Bild so groß ist. Das Bild geht in kürzester Zeit hoch. Und dann schweigen die Bunny Storage Server eben entsprechend lange, bis das ACK zurück kommt. Während dessen geht im SW Backend quasi 0 bis man ein zweites Bild oder andere Bilder hochladen kann. Der Fehler liegt nicht am FOS Plugin, der Fehler liegt nicht an der Server Konfiguration, das wurde zusammen mit Technikern unseres Hosters getestet. Am Anfang hatte Bunny noch gesagt, nein, kein Problem bei uns. Wir waren beharrlich dahinter, bis dann doch eingestanden wurde, man habe da wohl ein Problem, könne es aber einfach nicht genauer finden. Wieder nachgehakt und Techniker sind dran und und und.

Auch mit lftp mit Parametern wie continue, parallel, mirror usw. kriege ich die Daten quasi aktuell nur mit Müh und Not runter, um ggf. ein „Backup“ bzw. einen Puffer aufzubauen.

Diese Thematik zieht sich jetzt seit mindestens 3-4 Wochen. Schön wenn man in Vorbereitung zu BlackFriday oder dem Weihnachtsgeschäft Kollektionen dafür anlegt und entsprechendes Bild Material hoch schieben will/muss.

Insofern, wenn jemand eine brauchbare Lösung hat :smile: Her damit!

Danke!

Das Problem mit der Upload Performance hatte ich inital auch bei rund 800.000 Mediadateien mit insgesamt 19 GB. Ich habe dann auf Vorschlag des Bunny Support parallelisiert mit 50 gleichzeitigen Upload Verbindungen vom Server (in python → ThreadPoolExecutor → ftp). Der Upload hat weniger als 12 Stunden gedauert.
Weiterhin werden neue Mediadateien in Shopware nicht mehr über die Shopware API angelegt, um dem langsamen Adapter aus dem Weg zu gehen, der dann zwangsläufig angesprochen werden müsste. Die notwendigen Datensätze werden direkt in die Shopware DB geschrieben, um das Bild und den Artikel zu verbinden und die Dateien mit dem python Programm hochgeladen.
Meine Vermutung ist, dass Bunny keinen Fileserver sondern eine Art Objectstorage hat. Man kann z.B. kein zip File übertragen und dort auspacken.

Danke für deine ausführliche Antwort. Vielleicht hilft dir irgendwas davon.

Hallo sacrofano,

sorry, dass ich mich erst jetzt melde.

Der Ansatz die Bilder so hochzuladen und über andere Wege die Artikel mit den Bildern zu verknüpfen direkt in die DB ist natürlich reizvoll und kann man machen, wenn man quasi nur „seinen“ Shop betreut.

Im konkreten Fall trifft das jetzt nicht zu, aber wir sind ja ein Schnittstellenhersteller zwischen z.B. JTL und SW5/6 und müssen natürlich einen gewissen „Standard“ einhalten via eben API. Den Weg können wir also nicht einfach so verlassen. Die Changes als Beispiel zw. 6.3, 6.4 und 6.5 sind ja teils enorm, auch im Handling mit der API, die wir natürlich berücksichtigen müssen. Analog ist / war es ja teilweise auch innerhalb des 5er Zweiges, wenn auch nicht so enorm. Von einer DB will ich noch nicht mal reden und ehrlich gesagt, da will ich mir keinen Kopf drum machen. Deshalb versuchen wir in solchen Dingen immer so weit als nur irgend möglich im Standard zu bleiben.

Ich konnte jetzt tatsächlich nochmal brauchbarer mit rclone arbeiten, keine Ahnung warum das zu Anfang durchaus so lange gedauert hat. Die Zeit war nun relativ in Ordnung von CDN Bunny zu CDN 23m.

Insofern mach ich für mich da einfach mal einen Haken dahinter. Wenn Bunny das zuverlässig mit der Performance in den Griff bekommt, kann ich das dann auch ruhigen Gewissens wieder für Kunden einsetzen, die eben in entsprechenden Datenmengen unterwegs sind. Bei 30-40tausend Bildern ist das dann unter Umständen nicht so problematisch, zumal die meisten unserer Kunden die Bilder ja in der Wawi pflegen und nicht wie in dem speziellen Fall direkt im Backend von Shopware.

Danke Dir aber auf jeden Fall für Dein Feedback!

VG
Micha