6 Stimmen

Könnte das STM-Modell von Clojure auf mehreren JVMs funktionieren?

Ich weiß, dass Clojure gut auf einer Multicore-Maschine funktioniert, aber ich frage mich, ob es Sinn machen würde, für es über einen JVM-Cluster über viele Maschinen verteilt arbeiten?

6voto

Arthur Ulfeldt Punkte 89086

Runa Ich habe Terracotta für diesen Zweck in Erwägung gezogen und bin zu dem Schluss gekommen, dass ich swarmiji als verteilte Agentenbibliothek.

Einer der wirklichen Unterschiede zwischen einem SMP-System und einem Cluster ist der gemeinsame Speicher. In einem Cluster muss der Code nach Daten fragen, während er sie in einem SMP-System einfach direkt lesen kann. Dies hat einige nette Vorteile und einige (Skalierungs-)Nachteile.

Das STM von Clojure, das sich deutlich von den vielen anderen STM-Systemen unterscheidet, basiert auf dem Konzept von relative Zeit gemessen an einem Generationszähler pro Transaktion. Ohne gemeinsamen Zugang zu diesem Erzeugungszähler kann er keine Ereignisse in Auftrag geben und kann seine Aufgabe nicht erfüllen (bitte verzeihen Sie diese allzu einfache Erklärung).

Eine der Hauptmotivationen des STM war es, ein System zu schaffen, das die Vorteile der Shared-Memory-Gleichzeitigkeit indem zum Beispiel sichergestellt wird, dass die Leser nie auf die Autoren warten und die Leser immer gültige Daten sehen. Da dieses System entwickelt wurde, um die Vorteile des gemeinsamen Speichers zu nutzen, verliert es ohne gemeinsamen Speicher viel von seinem Reiz.

Das Akteursmodell (ala Erlang) ist für die verteilte Datenverarbeitung besser geeignet.

Oder anders ausgedrückt: Vielleicht sollten wir nicht versuchen, einen quadratischen Pflock in ein verteiltes, gleichzeitiges Loch zu stecken.

5voto

Joost Diepenmaat Punkte 17508

Nicht wirklich. Ich meine, es könnte Dinge wie Terracotta behaupten, dass sie in der Lage sind, eine logische JVM über mehrere Knoten zu verteilen, aber Clojures STM/Sammlungssemantik verlässt sich ziemlich stark auf die gemeinsame Nutzung von Speicher zwischen den Threads, um in Bezug auf Platz und Zeit effizient zu sein.

Sie sind wahrscheinlich besser dran, wenn Sie sich um die Mehrknoten-Teile Ihres Systems mit einer Message-Passing- oder Batch-orientierten Architektur kümmern.

3voto

nickik Punkte 5709

Ich könnte es tun, aber es ist keine gute Idee. Es gibt einen Grund, dass NoSql jetzt groß ist, seine weil Transaktion nicht gut ofer ein Netzwerk arbeiten.

1voto

Paul Legato Punkte 1164

Das Avout-Projekt ermöglicht es Ihnen, den STM-Status auf mehrere Rechner zu verteilen:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X