Nachrichtenwarteschlange mit niedriger Latenz und großem Nachrichtenvolumen

Werde ich durch ein bisschen ein Umdenken in der groß angelegten multiplayer-Spiele im Zeitalter von Facebook-Anwendungen und cloud computing.

Nehme an, dass ich waren, etwas zu bauen auf der Oberseite des bestehenden, offenen Protokollen, und ich will zu dienen, der 1.000.000 Spieler gleichzeitig, nur um das problem Bereich.

Angenommen, jeder Spieler besitzt eine Warteschlange für eingehende Nachrichten (für chat und so weiter), und im Durchschnitt eine weitere Warteschlange für eingehende Nachrichten (Gilden-Zonen, Instanzen, Auktion, ...), so haben wir von 2.000.000 Warteschlangen. Ein Spieler wird hören, 1-10 Warteschlangen zu einer Zeit. Jede Warteschlange wird im Durchschnitt vielleicht 1 Nachricht pro Sekunde, aber bestimmte queues haben eine viel höhere rate und eine höhere Anzahl von Hörern (sagen wir, eine "Einheit Standort" Warteschlange für eine Instanz-Ebene). Nehmen wir an, nicht mehr als 100 Millisekunden von system-latency queuing, das ist OK für milde action-orientierte Spiele (aber nicht Spiele wie Quake oder Unreal Tournament).

Aus anderen Systemen, ich weiß, dass für 10.000 Benutzer auf einem einzigen 1HE-oder blade-box ist eine vernünftige Erwartung (vorausgesetzt, es gibt nichts, was teuer Los, wie der Physik-simulation oder ähnliches).

So, mit einem crossbar-cluster-system, bei dem clients eine Verbindung zu Verbindung-gateways, die wiederum eine Verbindung zu message queue Server, würden wir bekommen 10.000 Benutzer pro gateway 100-gateway Maschinen und 20.000 message queues pro queue-server mit 100-queue-Maschinen. Wieder, nur für die Allgemeine Festlegung des lösungsumfangs. Die Anzahl der verbindungen auf den einzelnen MQ-Maschine wäre winzig klein: etwa 100, zu sprechen, zu jedem der gateways. Die Anzahl der verbindungen auf den gateways wäre viel höher: 10,100 für den Kunden + die verbindungen zu allen queue-Server. (Auf der Oberseite von diesem ist, fügen Sie einige verbindungen für das Spiel world Simulations-Server oder ähnliches, aber ich bin versucht zu halten, die GESONDERT für jetzt)

Wenn ich nicht bauen wollen, das von Grund auf, ich würde verwenden einige messaging-und/oder queuing-Infrastruktur, die vorhanden ist. Die zwei offenen Protokollen, die ich finden kann, sind AMQP und XMPP. Die bestimmungsgemäße Nutzung von XMPP ist ein wenig mehr wie das, was dieses Spiel-system benötigen würde, aber der Aufwand ist deutlich spürbar (XML, plus die ausführliche Vorhandensein von Daten, sowie verschiedene andere Kanäle, die gebaut werden müssen). Das eigentliche Datenmodell von AMQP ist näher zu dem, was ich oben beschreiben, aber alle Benutzer zu sein scheinen große enterprise-Unternehmen geben, die workloads zu sein scheinen workflow-bezogene, nicht-Echtzeit-Spiel-update zusammenhängt.

Tut jedermann haben alle tagsüber Erfahrung mit diesen Technologien und Implementierungen davon, dass Sie teilen können?

InformationsquelleAutor der Frage Jon Watte | 2009-12-17

Schreibe einen Kommentar