2012-04-14 14 views
2

Ich habe eine große Anzahl von Objekten auf Amazon S3, von denen nur eine kleine Teilmenge regelmäßig zugegriffen wird. Daher würde ich gerne ein verteiltes Caching-System wie Ehcache verwenden. (Ich würde Cloudfront verwenden, aber auf die Daten muss von einem API-Server und nicht von einem Endbenutzer zugegriffen werden, und die Cloudfront unterstützt die Authentifizierung beim letzten Überprüfen nicht.)Verwenden von Ehcache zum Zwischenspeichern von Objekten aus Amazon S3

Kann mir jemand sagen, ob oder nicht Dies ist machbar, praktisch oder ob es eine Bibliothek oder ein Beispiel für die Verwendung von Ehcache zum Zwischenspeichern von Objekten aus Amazon S3 gibt.

Natürlich ist mein App-Server in Java implementiert und läuft auf einer Linux-Umgebung.

Vielen Dank.

Antwort

0

Ich endete mit JetS3t, um Dateien von S3 zu lesen und sie in einem verteilten ehcache-Cluster zu speichern. Der Ansatz funktioniert bisher recht gut, obwohl ich finde, dass JetS3t eine large number of temporary files erstellt, die behandelt werden muss.

1

Interessante Idee - aber bevor er schließlich in das Tauchen, würde Ich mag, dass die Authentifizierung betonen, in Amazon CloudFront seit September 2009, wenn auch wahrscheinlich verfügbar ist nicht, wie Sie es sich vorstellen, also können Sie verwenden a Signed URL to Serve Private Content:

Sie können privaten Inhalt mit einer statischen signierten URL oder einer dynamischen signierten URL verteilen. Sie verwenden eine statische, signierte URL beim Verteilen von privaten Inhalten an einen bekannten Endbenutzer [...]. In diesem Fall erstellen Sie eine signierte URL und stellen die URL Ihren Endbenutzern nach Bedarf zur Verfügung. Sie verwenden eine dynamisch signierte URL, um Inhalte spontan an einen Endbenutzer zu verteilen, [...] In diesem Fall generiert Ihre Anwendung die signierte URL.

Dieser Betrag lässt sich weiter in der Overview of Private Content:

A Cloudfront Private-Verteilung ist eine politische Erklärung basiert auf dem eine oder alle der folgenden Einschränkungen gibt:

  • ein Startdatum gibt das Datum und die Uhrzeit an, zu der die signierte URL gültig ist
  • Ein Enddatum und eine Endzeit, nach der die signierte URL nicht gültig sein wird
  • Eine IP-Adresse oder einen Bereich von IP-Adressen, von denen die signierte URL verwendet werden kann

[Hervorhebung von mir]

Ob dieser Ansatz für Ihren Anwendungsfall möglich ist, hängt davon ab, die Architektur Ihrer Lösung, insofern müssen Sie diese signierten URLs auf irgendeine Weise erzeugen und diese wiederum vom API-Server verwenden; Wenn Ihr Endbenutzer der API-Server ist, könnten Sie statische URLs wie vorgeschlagen erzeugen. Andererseits wäre der naheliegendste Ansatz, den signierten URL-Generierungsprozess dynamisch im API-Server selbst durchzuführen und die generierte URL < zu cachen -> Signierte URL Karte für die Wiederverwendung schließlich (dh über Memcached oder Ehcache tatsächlich).

Dieses Authentifizierungsschema ist offensichtlich umständlicher als eine einfache HTTP-Authentifizierung, zum Beispiel bietet es jedoch auch mehr Flexibilität, siehe z.B. das Tutorial Restricting Access to Files in a CloudFront Distribution Based on Geographic Location (Geoblocking) für einen fortgeschrittenen Anwendungsfall, der in einem Guest Post: Geo-Blocking Content With Amazon CloudFront auf dem AWS Blog zusammengefasst ist.

+0

Vielen Dank für die gründliche Antwort. Ich schaue mir diese Informationen an. – Tom

Verwandte Themen