2010-12-02 5 views
1

Ich bin nicht sicher, wie man die Frage formuliert, aber hier ist, was ich suche zu tun.Möglich, Bild von Amazon S3 zu erhalten, aber es zu schaffen, wenn es nicht existiert

Ich habe eine Website, die benutzerdefinierte Kartenkachel-Overlays auf einer Google-Karte verwendet.

Das Javascript ruft eine PHP-Datei auf meinem Server auf, die überprüft, ob eine vorhandene Kartenkachel für die angegebene x-, y- und Zoomstufe existiert.

Wenn if exists, wird dieses Bild mit file_get_contents angezeigt.

Wenn es nicht existiert, erstellt es die neue Kachel und zeigt es an.

Ich möchte Amazon S3-Shop verwenden und die Bilder dienen, da es eine Menge von ihnen enden könnte und mein Server langsam ist. Wenn ich mein Skript überprüfe, um zu sehen, ob das Bild auf Amazon existiert und es dann zeige, vermute ich, dass ich nicht die Vorteile der Geschwindigkeit und Amazons CDN bekomme. Gibt es eine Möglichkeit, dies zu tun?

Oder gibt es eine Möglichkeit, die Datei von Amazon zuerst zu ziehen und dann etwas auf Amazon einzurichten, um zu meinem Skript umzuleiten, wenn die Dateien nicht da sind?

Vielleicht Gastgeber das Skript auf einem anderen Amazon Dienste? Die Kachelgenerierung ist auch in einigen Fällen ziemlich langsam.

Dank

Antwort

1

Ideen:

1 - Verwenden Sie CloudFront, aber es zu einem Cluster von Fliesen Generation Maschinen zeigen. Auf diese Weise können Sie die Kacheln bei Bedarf generieren, und zukünftige Anforderungen werden direkt von Cloudfront aus bedient.

2 - Verwenden Sie CloudFront, aber zurück mit einem S3-Speicher generierter Kacheln. Aktivieren Sie die Protokollierung für den S3-Bucket, damit Sie fehlgeschlagene Anforderungen erkennen können. Verbrauchen Sie diese Protokolle nach einem Zeitplan und generieren Sie die fehlenden Kacheln. Dies führt zu einer billigeren Art, Kacheln zu erzeugen, bedeutet aber, dass wenn eine Kachel ausfällt, der Benutzer nichts bekommt.

3 - Nur alle Kacheln vorgenerieren. Werfen Sie Aufgaben in eine SQS-Warteschlange und starten Sie dann eine Sammlung von EC2-Instanzen, um die Kacheln zu generieren. Dies kostet am meisten im Voraus, aber alle Benutzer erhalten eine schnelle Erfahrung.

+0

Ich denke # 3 ist vielleicht kein schlechter Weg zu gehen. Die Fliesen werden sich verändern, aber nicht ohne dass ich davon weiß, damit ich die Fliesen bei Bedarf regenerieren kann. Das einzige Problem sind leere Kacheln, da einige Kacheln keine Daten enthalten. Ich werde herausfinden müssen, wie die Google Maps API damit umgeht. – bones

0

Ich habe eine blog post mit einer Strategie für den Umgang damit geschrieben. Es wurde entwickelt, um CloudFront intelligent und sparsam einzusetzen, das Caching zu maximieren und neue Versionen vorhandener Images zu bearbeiten. Sie können die dort beschriebene Technik als hilfreich empfinden. Der Beispielcode zeigt, wie mit verschiedenen Dimensionen (d. H. Thumbnails) von Bildern umzugehen ist. Sie können es ändern, um verschiedene Zoomstufen zu behandeln.

Ich muss diesen Beitrag aktualisieren, um benutzerdefinierte CloudFront-Ursprünge zu unterstützen, und ich denke, dass Sie für Ihre Anwendung S3 besser überspringen und einen benutzerdefinierten Ursprung verwenden sollten. Der Vorteil einer benutzerdefinierten Herkunft ist einfach, dass es wahrscheinlich einfacher ist, alle Ihre Bilder in Ihrem lokalen Dateisystem zu verwalten, als wenn Sie sie in S3 verwalten.

+0

Danke! Ich werde es mir ansehen. – bones