Frage

Ich habe ein doozy ein Problem hier. Ich bin mit dem Ziel, einen Rahmen zu bauen für die Integration verschiedenen Verkehrssimulationsmodelle zu ermöglichen. Diese Integration basiert auf dem Austausch von Link Konnektivitäten, Link-Kosten und Fahrzeuge zwischen Simulationen.

Um eine verteilte Simulation zu machen, ich plane einen ‚Koordinator‘ haben (Sterntopologie). Alle teilnehmenden Simulationen registrieren Sie sich einfach mit ihm, und nur an den Koordinator sprechen. Der Koordinator koordiniert dann die Ausführung verschiedener Aufgaben zwischen den einzelnen Simulation.

Ein schnelles Beispiel für ein Verteilungsproblem, ist, wenn eine Simulation ‚verantwortlich‘ bestimmter Objekte, wie eine Straße ist. Und ein anderer ist ‚zuständig‘ von anderen Straßen. Allerdings sind diese Straßen miteinander verbunden sind (und daher brauchen wir eine Synchronisation zwischen diesen Simulationen und müssen in der Lage sein, Daten auszutauschen / Methoden aufrufen remote).

Ich habe einen Blick auf RMI hatte und ich dachte, es für diese Aufgabe geeignet sein kann. (Zu abstrahieren, die aus einer über-Draht-Signalisierungs Disziplin zu schaffen).

Ist das gesund? Das Problem hierbei ist, dass die Simulation Teilnehmer zentralisieren müssen einig ihre Datenspeicherung in dem ‚Koordinator‘ explizite Synchronisation zwischen Simulationen zu gewährleisten. Darüber hinaus wurden einige Simulationen können von anderen Simulationen Komponenten oder Methoden erfordern. (Daher die Idee der Verwendung von RMI).

Mein grundlegender Ansatz ist es, den ‚Koordinator‘ hat einen riesigen RMI-Registry laufen. Und jede Simulation sieht einfach alles in der Registrierung auf, sicherzustellen, dass die richtigen Objekte bei jedem Schritt verwendet werden.

Wer irgendwelche Tipps für diesen Weg hinunter?

War es hilfreich?

Lösung

Sie möchten auch Hazelcast überprüfen. Hazelcast ist eine Open-Source-transaktionale, verteilt / partitioniert Umsetzung der Warteschlange, Themas, Karte, Set, Liste, Schlosses und Testamentsvollstrecker Service. Es ist super einfach zu handhaben; nur hazelcast.jar in Ihrem Classpath hinzu und starten Codierung. Fast keine Konfiguration erforderlich ist.

Wenn Sie interessiert sind in Ihrem Runnable, aufrufbare Aufgaben in einer verteilten Art und Weise ausgeführt wird, dann lesen Sie bitte Distributed Executor Service-Dokumentation unter http://code.google.com/docreader/#p=hazelcast

Hazelcast ist unter der Apache-Lizenz und Enterprise-Grade-Unterstützung veröffentlicht ist ebenfalls verfügbar.

Andere Tipps

Ist das gesund? IMHO nicht. Und ich werde Ihnen sagen, warum. Aber zuerst werde ich den Haftungsausschluss hinzufügen, dass dies ein kompliziertes Thema ist so hat jede Antwort wie kaum Kratzer auf der Oberfläche betrachtet werden.

Zuerst statt mich zu wiederholen Ich werde dich zu einem Punkt Zusammenfassung der Java Grid / Cluster-Technologien , dass ich vor einer Weile geschrieben. Es ist eine meist vollständige Liste.

Die Sterntopologie ist „natürlich“ für ein „naiven“ (ich meine nicht, dass in einem schlechten Weg) Implementierung, da Punkt-zu-Punkt einfach und Logik Schlüssel Controller zentralisiert ist ebenfalls einfach. Es ist jedoch nicht fehlertolerant. Es führt Skalierbarkeit Probleme und einen einzigen Engpass. Es führt die Kommunikation inefficiences (nämlich die Punkte, kommunizieren über einen zweistufigen Prozess durch die Mitte).

Was Sie wirklich für diese wollen, ist wahrscheinlich ein Cluster (eher als eine Daten- / Computer-Grid) Lösung und ich würde vorschlagen, dass Sie a href Blick auf <= „http://www.terracotta.org/“ rel =“ nofollow noreferrer "> Terracotta . Im Idealfall würden Sie unter Oracle Coherence aber es ist kein Zweifel teuer ( im Vergleich zu frei). Es ist ein fantastisches Produkt, though.

Diese beiden Produkte können eine Reihe von Möglichkeiten, aber der Kern beider verwendet werden ist ein Cache wie eine verteilte Karte zu behandeln. Sie setzen die Dinge in, Sie Dinge herausnehmen und Sie feuern Code, der den Cache verändert. Coherence (mit dem ich bin mehr vertraut) in dieser Hinsicht fantastisch gut Skalen. Diese sind „Server“ basierte Produkte zwar für einen echten Cluster.

Wenn Sie sich bei einem verteilten Modell suchen, dann sollten Sie vielleicht auf mehr einen SOA basierten Ansatz suchen werden.

Hier finden Sie aktuelle http://www.terracotta.org/

es ist eine Java VM verteilt, so dass es den Vorteil, dass Cluster-Anwendung hat sieht es nicht anders als eine Standard-Java-Anwendung.

Ich habe es in Anwendungen eingesetzt, und die Geschwindigkeit ist sehr beeindruckend, so weit.

Paul

Haben Sie mit einem Message-Queue-Ansatz in Betracht gezogen? Sie könnten JMS verwenden, um die Kommunikation / koordinieren Aufgaben und Ergebnisse unter einer Gruppe von Servern / Knoten. Man könnte sogar Amazon SQS (Simple Queue Service: aws.amazon.com/sqs) verwenden. Und haben Ihre Server laufen auf EC2 können Sie Tonleiter rauf und runter nach Bedarf

Just my 2 cents.

Werfen Sie einen Blick auf Jini, könnte es von Nutzen für Sie sein.

Nun, Jini, oder genauer gesagt Javaspaces ist ein guter Ort für einen einfachen Ansatz, um das Problem zu starten. Javaspaces können Sie einen Master-Worker-Modell zur Anwendung, wenn Ihr Master (Koordinator in Ihrem Fall) Aufgaben an die Javaspace schreibt, und die Arbeiter-Abfrage für und verarbeiten diese Aufgaben, die Ergebnisse wieder für den Master zu schreiben. Da Ihr Problem nicht peinlich parallel ist, und Ihre Mitarbeiter benötigen, um Daten zu synchronisieren / Austausch, wird dies eine gewisse Komplexität zu Ihrer Lösung hinzuzufügen.

Mit Javaspaces wird eine ganze Menge mehr Abstraktion zu Ihrer Implementierung hinzufügen, dass mit Klar RMI (die von dem Jini-Framework verwendet wird intern als Standard „Wire-Protokoll“).

Haben Sie einen Blick auf diese Artikel von Sonne für ein Intro.

Und Jan Newmarch Jini Tutorial ist ein ziemlich guter Anfang Jini Lernen

Nur als Ergänzung zu den anderen Antworten, die soweit ich alle Fokus auf Grid und Cloud Computing gesehen haben, sollten Sie feststellen, dass Simulationsmodelle bemerken haben eine einzigartige Eigenschaft: Simulationszeit.

Wenn Simulationsmodelle parallel verteilt Laufen und synchronisiert dann sehe ich zwei Möglichkeiten:

  • Wenn jedes Simulationsmodell verfügt über eine eigene Simulation Uhr und Ereignisliste, dann sollten diese über das Netzwerk synchronisiert werden.
  • Alternativ könnte es eine einzige Simulation Uhr und Ereignisliste sein, die für alle verteilt (Teil-) Modelle „die Zeit ticken“.
/:

Die erste Option ist für den High Level Architecture (HLA) siehe zum Beispiel http umfassend erforscht /en.wikipedia.org/wiki/IEEE_1516 als Starter.

Allerdings ist die zweite Option scheint einfacher und mit weniger Aufwand zu mir.

Gridgain ist eine gute Alternative. Sie haben eine Map / Reduce-Implementierung mit „direkter API-Unterstützung für Split und Aggregation“ und „verteilen Aufgabe Session“. Sie können ihre Beispiele und sehen, ob einige von ihnen passen mit Ihrem muss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top