0

Ich erstelle auf Online-Echtzeit-Multiplayer-Handy-Spiel mit Kryonet (eine Java TCP/UDP-Netzwerk-Bibliothek), die ich auf AWS hosten möchte.Wie skaliert man dedizierte EC2-Instanzen auf AWS?

Die Architektur ist wie folgt: Clients verbinden sich mit einem zentralen Login/Account-Server, der ihnen erlaubt, sich anzumelden und ihre Statistiken usw. zu sehen. Dieses Bit ist einfach, da es im Grunde nur eine REST-API ist und skaliert werden kann auf ziemlich normale Weise (wie Sie irgendeine Webapp).

Interessanter ist jedoch, wenn Spieler tatsächlich ein Spiel spielen. Dazu plane ich einen separaten Pool von "Match" -Servern (EC2s). Der Login/Konto-Server verbindet zwei Spieler und sendet dann dem Client die Adresse eines bestimmten Match-Servers. Die Spieler treten dann diesem Match-Server bei, der ihr Match veranstaltet (vielleicht 5-10 Minuten). Der Match-Server muss "sticky" sein, da er eine Echtzeit-Instanz des Spiels ausführt und UDP-Pakete in Echtzeit senden/empfangen wird. Jeder Match-Server wird wahrscheinlich einige hundert Matches hosten können.

Meine Frage ist, wie ich über die Skalierung dieser Match-Server gehen sollte. Ich nehme an, dass ich sie beim Start automatisch beim zentralen Server registrieren lassen und eine Art Keeping am Leben lassen werde. Ich könnte das alles selbst bauen; Ich frage mich jedoch, ob AWS Tools/Dienste hat, die das alles für mich tun können.

+0

Sie könnten sich [Amazon GameLift] (https://aws.amazon.com/gamelift/) ansehen. –

+0

Leider scheint GameLift Java-basierte Server nicht zu unterstützen. Ich plane nicht, Unity oder Unreal zu verwenden, sondern eine Kombination aus Libgdx und Kryonet. – Jambo

Antwort

0

Okay, ich habe ein wenig mehr über die AWS-Dokumentation gelesen. Es scheint, dass ich das wahrscheinlich wie folgt erreichen kann:

Jedes Mal, wenn zwei Spieler gepaart sind, werden sie zu einer Warteschlange hinzugefügt. Sie werden aus der Warteschlange genommen, wenn ein Spot auf einem der Match-Playing-Server frei ist. Wenn die Größe dieser Warteschlange einen bestimmten Schwellenwert überschreitet, wird die Anzahl der EC2s skaliert. Dies kann mit praktisch allen in AWS-Konfiguration durchgeführt werden: http://docs.aws.amazon.com/autoscaling/latest/userguide/as-using-sqs-queue.html

Das schwierige Bit ist dann das Herunterskalieren Instanzen. Im Gegensatz zu einer normalen REST-API können Sie einen Server nicht einfach ausschalten. Der Server muss alle seine aktuellen Spiele beenden. Es scheint, dass AWS dies auch mit Lebenszyklus-Haken abgedeckt hat.