Frage

Lassen Sie uns sagen, dass ich eine Anwendung, die auch nach Optimierungen zu überwältigen einen Server gewährleistet ist. Gibt es eine Technologie, die eine Web-Anwendung ermöglicht es verteilt über mehrere Server zu sein, während sein Zustand beibehalten wird?

Nehmen Sie zum Beispiel ein mehrere Spieler Online-Spiel. In der Regel in World of War Craft gibt es mehrere Server mit jeder sein eigenes Spiel Zustand. Was ich suche ist etwas, das dieses Spiel Zustand unter mehreren Servern gemeinsam genutzt werden zulassen würde.

EDIT: Die Plattform ist nicht wirklich wichtig, da dies für eine Web-Anwendung ist daher funktioniert das Backend nicht viel aus. Allerdings Rails und Java sind Möglichkeiten.

Auch war WoW nur ??ein Beispiel, ich bin interessiert nur in eine solche Technologie; ein großes Spiel wäre eine gute Anwendung für sie.

War es hilfreich?

Lösung

Es gibt nicht wirklich etwas für niedrige Latenz, hohe Durchsatz in-Memory-Anwendungen wie Echtzeit-Online-Spiele, zumindest nicht als ein Stück beliebiger Middleware.

Projekt Darkstar bei dieser auf der Nutzbarkeit und die Komplexität Seite einen bewundernswerten Versuch gemacht, finde aber (wenig überraschend) dass es die Skalierung nicht.

Schließlich ist es ein schwieriger (wenn auch nicht unlösbare) Probleme, wo es keine Lösung gibt, die in der Nähe ist universell einsetzbar zu sein. Insbesondere sind Sie wahrscheinlich einen Kompromiss haben, zwischen auf veralteten Spieldaten auf der einen Seite zu handeln, um gegen benötigen ständig auf gemeinsam genutzte Daten auf der anderen Seite auszutauschen. Mangel an Korrektheit vs. exponentielles Wachstum in Komplexität ... Wählen Sie Ihr Gift.

Es ist erwähnenswert, - vor allem, wenn Ihre Anwendungsdomäne nicht Echtzeit-Spiele ist -, dass man oft nichts dagegen, wenn Sie mit veralteten Daten arbeiten, solange es richtig schnell genug wird. In solchen Fällen einfache Caching-Systeme wie memcache sind groß. Und falls Sie mehr Korrektheit brauchen aber nicht zu haben Sorgen um den Durchsatz so viel, so etwas wie Hazelcast (in einer anderen Antwort erwähnt) könnte groß sein, aber für die meisten Online-Spiele, die groß genug sind, um Last zu erfordern „Tausende von Operationen Balancing / sec“ist einfach nicht gut genug.

Einige MMO-Technologie einige Versuch macht, um die Anwendung zu verteilen, indem sie geographisch Partitionierung, die bedeutet, dass es nicht wirklich viel gemeinsam genutzten Zustand überhaupt, und es erfordert dieses Schema Sinn in der Spielwelt und Fiktion zu machen.

Ein weiterer Ansatz ist es durch Service zu partitionieren und die meisten Dienste mit Ihrem Lieblings-off-the-shelf RPC Ansatz zu implementieren. Auf diese Weise können Sie skalieren ganz einfach, wenn Ihre Dienste unabhängig sind, aber alle Abhängigkeiten zwischen den Diensten Puts auf Platz eins Sie zurück.

Andere Tipps

Hier finden Sie aktuelle Hazelcast. Es ist Open Source, hoch skalierbare Datenverteilungsplattform für Java. Hazelcast Angebote verteilt Karte, die unter den Clustermitgliedern gemeinsam genutzt werden. Sie können Ihre Daten in leicht speichern. Es ist super super einfach zu bedienen. Fügen Sie einfach hazelcast.jar zu Classpath. Sie müssen keine Server installieren.

Ich verwende Microsoft HPC , wenn auch nicht für Spiele. Ziemlich einfach einzurichten und zu verwenden.

Sie erwähnen nicht Ihre Plattform. Für Java gibt es Terracotta

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