Wie der Titel meiner Frage sagt, möchte ich wissen, ob dies eine gute Praxis ist oder nicht.
Ich weiß, dass ich es in einer EC2-Instanz bereitstellen kann, aber ich habe mich gefragt, ob dies einige Probleme verursachen kann, da ich weitere Instanzen hinzufügen werde, um meine Anwendung zu skalieren. Hast du etwas Erfahrung damit?
Ich verwende S3, um das Hochladen von Dateien über ein PHP-Skript zu ermöglichen. Die Frage lautet also im Grunde:
Ist es eine gute Praxis, Mouting zu verwenden, oder gibt es bessere Möglichkeiten, das Hochladen von Benutzerdateien zu handhaben?
Danke im Voraus
php
amazon-ec2
amazon-s3
Enrico Tuttobene
quelle
quelle
Antworten:
Wenn Sie S3 zum Speichern von Daten aus Benutzer-Uploads verwenden, insbesondere in einer verteilten Umgebung, ist eine wichtige Überlegung die Tatsache, dass S3 "letztendlich konsistent" ist (obwohl einige Regionen Lese-nach-Schreib-konsistent sind). Dies hat zur Folge, dass Sie eine Datei möglicherweise erfolgreich hochladen. Wenn Sie jedoch unmittelbar danach prüfen, ob sie vorhanden ist, stellen Sie möglicherweise fest, dass sie nicht vorhanden ist. Dieses Problem ist bei Szenarien wie Aktualisierungen oder Löschvorgängen stärker ausgeprägt, bei denen selbst die Konsistenz zwischen Lesen und Schreiben nicht hilft.
Das Obige gilt für Ihre Uploads in S3, unabhängig davon, welchen Ansatz Sie wählen. Tatsächlich gilt dies für die meisten Probleme, die man von S3 erwarten kann - es ist weniger der Ansatz zum Speichern der Daten als vielmehr die Einschränkungen von S3, die wahrscheinlich am problematischsten sind.
S3fs verwendet die S3-API - genau wie das PHP (oder ein anderes) SDK. Darüber hinaus ist S3 für relativ hohe Parallelitätsraten ausgelegt. Abgesehen von den Konsistenzproblemen sollte es also kein Problem geben, es auf mehreren Instanzen zu mounten (denken Sie daran, dass es sich nicht um ein herkömmliches Dateisystem handelt - Probleme wie Sperren, usw. werden auf der S3-Seite behandelt).
Allerdings gibt es bei jeder Implementierung einige potenzielle Vor- und Nachteile:
S3fs:
SDK:
In Bezug auf "Sicherheit" können Sie "Verhinderung von Datenkorruption" oder "Verhinderung von nicht autorisiertem Zugriff" bedeuten. In Bezug auf Ersteres könnte das SDK ein wenig helfen, um mit eventueller Konsistenz umzugehen (in Form von ausführlicheren Fehlern), aber der zugrunde liegende Speicher ist der gleiche, und ich erwarte, dass die Unterschiede gering sind. In Bezug auf die Zugriffskontrolle können Sie IAM verwenden, um ein eingeschränktes Konto zu erstellen. Dieses Konto benötigt jedoch weiterhin Lese- / Schreibzugriff auf Ihre S3-Dateien. Beide sollten ausreichend sicher sein. In beiden Fällen muss Ihr System kompromittiert werden, um Zugriff auf Ihren S3-Bucket zu erhalten. Ich würde jedoch empfehlen, dies mit S3fs zu tun (da die Anmeldeinformationen normalerweise außerhalb des Webroots gespeichert sind und über überhaupt nicht zugänglich sind PHP) gibt es etwas bessere Sicherheit.
Persönliche Meinung: Ich würde s3fs für einen Fall bevorzugen, in dem es ein einzelnes Upload-Verzeichnis gibt (z. B. eine Site, die davon Gebrauch macht) und der Zugriff ziemlich einfach ist (nur Dateien hochladen und gelegentlich aktualisieren / löschen müssen). Wenn Sie einen komplexeren Zugriff benötigen (z. B. teilweise Downloads, mehrere Buckets usw.) oder das S3 SDK für andere Zwecke verwenden möchten, würde ich mich auch für die Uploads an das SDK halten.
quelle
Ich würde es vorziehen, über PHP lib auf S3 hochzuladen. Es ist einfacher als S3 auf jedem Server zu mounten.
Schauen Sie sich dieses Beispiel an: http://aws.amazon.com/code/126
Für eines meiner Projekte habe ich diese Bibliothek verwendet: http://undesigned.org.za/2007/10/22/amazon-s3-php-class . Hat wirklich gut für mich funktioniert.
quelle
Sie können Benutzern erlauben, direkt vom Browser auf s3 hochzuladen, ohne sie auf Ihren Server hochzuladen (und dann auf s3 hochzuladen).
Hier sind gute Tipps dazu: https://leonid.shevtsov.me/post/demystifying-s3-browser-upload/
Wenn Sie die Datei nach dem Hochladen verarbeiten müssen (zip, transcode usw.), können Sie S3fs verwenden
quelle