Verteiltes Caching für große Objekte

8

Ich möchte ein sehr großes Objekt teilen, z.B. in Ordnungen von Megabyte oder sogar mehreren Gigabyte, zwischen einer Reihe von Maschinen. Das Objekt wird einmal geschrieben, kann aber viele Male gelesen werden. Vielleicht ist eine naive Herangehensweise, einen zentralisierten Speicher wie redis zu verwenden. Es kann jedoch zu einem einzigen Fehlerpunkt kommen und zu viele Anfragen können einen DOS-Angriff auf redis verursachen. Dann ist eine verteilte Lösung viel erfolgversprechender. Das Hauptanliegen ist jedoch die Replikation der Struktur auf alle Maschinen. Wenn die Replikation über eine Master / Slave-Technik durchgeführt wird, kann die Replikation zu einer großen Verkehrslast auf dem Master führen, da das Objekt groß ist. Daher ist es eine bessere Lösung, eine P2P-Strategie zum Replizieren des Objekts zu verwenden, um die Netzwerklast auf dem Master zu verringern.

Kennt jemand eine Lösung für dieses Problem? Vielleicht sind einige Kandidaten:
 - Redis
 - Memcached
 - Voldemort
 - Hazelcast

Meine Hauptprobleme sind die Java-Schnittstelle, die Freigabe großer Objekte, hohe Verfügbarkeit und geringer Netzwerkverkehr für die Replikation.

Danke im Voraus.

    
Saeed Shahrivari 28.01.2013, 16:30
quelle

1 Antwort

14

Das Zwischenspeichern großer Objekte in NoSQL-Speichern ist im Allgemeinen keine gute Idee, da es in Bezug auf Speicher und Netzwerkbandbreite teuer ist. Ich glaube nicht, dass NoSQL-Lösungen beim Speichern großer Objekte brillieren. Redis, memcached und die meisten anderen Schlüssel / Wert-Speicher sind eindeutig nicht dafür ausgelegt.

Wenn Sie große Objekte in NoSQL-Produkten speichern möchten, müssen Sie sie in kleine Stücke schneiden und die Teile als unabhängige Objekte speichern. Dies ist der von 10gen für gridfs beibehaltene Ansatz (der Teil der Standard-MongoDB-Distribution ist):

Siehe Ссылка

Um große Objekte zu speichern, würde ich eher verteilte Dateisysteme betrachten wie:

Diese Systeme sind skalierbar, hochverfügbar und bieten sowohl Datei- als auch Objektschnittstellen (wahrscheinlich benötigen Sie eine Objektschnittstelle). Sie können auch auf die folgende SO-Frage verweisen, um ein verteiltes Dateisystem auszuwählen.

Bestes verteiltes Dateisystem für die Linux-Massenspeicherfarm

Es liegt an Ihnen, zusätzlich zu diesen skalierbaren Speicherlösungen einen Cache zu implementieren.

    
Didier Spezia 28.01.2013, 18:14
quelle