2010-12-14 8 views
1

Ich untersuche die Möglichkeit der Verteilung einer Datenstruktur über mehrere Maschinen. Ich möchte, dass es auf jedem Computer in einem Prozess ausgeführt wird und mithilfe von (Multicast?) Eine Kopie der vollständigen Datenstruktur auf allen Computern repliziert.Verteilte Datenstruktur über mehrere Maschinen mit Multicast

Hat jemand irgendwelche Erfahrung in diesem Bereich, die mir in die richtige Richtung zeigen könnte?

+0

Wie groß ist die Struktur? –

+0

nicht sehr groß, hätte nur 5-10 Objekte zu jeder Zeit. –

Antwort

0

Verteilte Verriegelung ist schwer - und Sie müssen möglicherweise sperren, es sei denn, Sie lesen nur. Ich schlage vor, Sie betrachten ein verteiltes Caching-Framework wie Microsoft's Velocity (das jetzt als Teil von Azure umbenannt werden kann), oder die freie, Open Source und sehr gute memcached.

Es gibt andere, Pay-for-Optionen auch - vor allem GemFire und Coherence.

Ich würde Memcache geben, es funktioniert ziemlich gut.

+0

Das einzige Problem mit diesen (ich habe nur memcached verwendet) ist, dass sie die Daten auf jedem Server shard. Sie behalten keine vollständige Kopie. Wenn also ein Server ausfällt ... ist dieser Shard verloren. –

+0

Sie können das in Ihrer App erledigen, stimmen aber zu, dass es ein Versehen und zusätzliche Arbeit ist. Hast du http://repcached.sourceforge.net/ gesehen? –

+1

Darüber hinaus adressieren Gemfire und Coherence dies explizit, und die Microsoft-Lösung (jetzt AppFabric) scheint auch eine Option für hohe Verfügbarkeit zu haben, die Ihre Anforderungen erfüllen könnte (http://msdn.microsoft.com/en-us/library/ee790974. aspx) –

0

Sie können Ihre Daten in eine zentrale Datenbank schreiben. Dann kann jede Instanz darauf zugreifen. Wenn Sie die Daten einer Instanz ändern möchten, sollten Sie einen Mechanismus zum Sperren der Daten in der Datenbank implementieren. Ist das hilfreich?

+0

Kann keine Datenbank verwenden. Ich möchte, dass dies auf allen Computern im Speicher ausgeführt wird ... –

0

Veröffentlichen Sie die Struktur über ØMQ mit PUB/SUB-Sockets und dann können Sie zwischen TCP oder IP Multicast je nach Ihren Anforderungen und Netzwerkqualität wechseln.

Wenn Ihre Datenstruktur ausreichend organisiert ist, sollten Sie auch in der Lage sein, Aktualisierungen an die Struktur zu senden, ohne viel Probleme zu haben.

0

Sie können auch in Hazelcast, die eine Java-basierte Lösung ist, schauen.

Hier ist ein direkter Link (1), der über einige der Interna spricht.

(1) http://www.hazelcast.com/documentation.jsp#Internals

Und es gibt bereits einen Vorschlag (repcached) Memcached zu verwenden, die einfach sein sollte und verwenden.

0

Um Ihre Frage Richtung zu beantworten, sollten Sie wahrscheinlich über state machine replication lernen und dann nach Implementierungen von entweder virtuelle Synchronität oder Paxos für Ihre Plattform suchen, um als Baustein zu verwenden.

Pragmatisch würde ich empfehlen, einen Koordinationsdienst wie ZooKeeper in Erwägung zu ziehen, der Ihnen eine Menge Ärger ersparen würde.