Autor Beitrag
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Di 28.01.14 18:48 
Hallo zusammen,
ich bin zurzeit daran ein sehr kleines 2D RPG Spiel zu schreiben und bin jetzt dabei mir darüber Gedanken zu machen wie man denn man besten eine skalierbare und Ausfallsichere Serverinfrasturktur aufbaut.


Unbenannt
(sorry, meine paint skills....)
Meine bisherige Überlegung sieht so aus, dass sich ein Client immer mit drei Eingangsservern verbindet, allerdings nur eine davon verwendet, die anderen 2 bleiben quasi auf Stand-by.

Diese Server haben jeweils eine Verbindung zu jeder Spielwelt und den Loginservern.
Die Eingangsserver kümmern sich um das Login und darum die Verbindung zu entschlüssen, sowie die Pakete auf Validität zu überprüfen.
Nur dann werden sie an den eigentlichen Server weitergeleitet.

Dort wird entsprechend auf die Pakete reagiert und die Antwort an den selben Eingangsserver zurückgeschickt. Dieser leitet sie dann verschlüsselt an den Client weiter.

Erkennt der Client jetzt, dass die Verbindung zu den aktieven Eingangsserver abgebrochen ist, springt er automatisch auf eine der zwei anderen Verbindungen über und sucht sich einen neuen 3. Eingangsserver. Dem neuen Server teilt er mit, dass die Verbindung abgebrochen ist und fordert das letzte Paket erneut an. Damit weis dann auch der Spielserver, dass die Verbindung ab jetzt über den neuen Server läuft, und sendet das letzte Paket erneut.


Was haltet ihr davon? Ist das ganze so sinnvoll oder habt ihr eine bessere Idee? Mein Grundgedanke war, dass die Außenwelt die eigentlichen Server nie sieht und so nur die Eingangsserver angreifbar sind, wenn die allerdings abstürtzen oder durch ddos lahmgelegt werden, tut das niemanden weh, der Spieler merkt es wahrscheinlich nichtmal, weil automatisch über einen anderen Server weiter gemacht wird.

mfg
glotzer
Einloggen, um Attachments anzusehen!
_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 28.01.14 20:49 
Die wichtigste Frage: Wie viele Spieler?

Dein Design skaliert durch die parallelen Verbindungen schonmal relativ schlecht, aber was das genau bedeutet kann man nur mit einer geschätzten Größenordnung angeben. Ausfallsicher könnte es sein, aber sobald ein Proxy stirbt hast du im worst-case eine schöne Kettenreaktion und einer nach dem anderen fällt um.

Ein paar Worte hatten wir dazu auch schonmal geschrieben. Nicht mehr alles aktuell und ein paar Stellen haben wir seitdem optimiert, aber die Grundidee ist noch da. Unsere Größenordnung: bis zu 200-1k Spieler in einem Sektor.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Di 28.01.14 22:22 
Die wichtigste Frage kann ich leider nicht beantworten. Meine Idee war es so zu bauen, dass man später durch das einfache hinzufügen von Servern quasi unbegrenzt skalieren kann aber ich bezweifel, dass ich am Anfang auch nur 10 gleichzeitige Verbindungen haben werde.

Meinst du wirklich, dass die parallelen Verbindungen zu einem so großen Problem werden? Es verbindet sich ja nur jeder Proxy ein einziges Mal mit jeden Gameserver. Selbst wenn es 10k Proxys sind die sich mit 10k Servern verbinden, müsste das noch ohne größere Probleme gehen. Ja an diese Kettenreaktion hab ich auch gedacht, es müssen eben immer genügend Proxys bereit sein und es muss dafür gesorgt werden, dass wenn ein Proxy stirbt sich nicht alle Clients an einen anderen hängen, sonder sich wieder verteilen.

Deinen Artikel hab ich damals gelesen und das war teil meiner Anfangsüberlegung. Aber ich will die Verbindung für die Clients so einfach wie möglich halten, so dass er sich im Normalfall nur einmal verbinden muss und alles weitere am Server passiert.

Danke für die Gedanken.

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht