ein spiel - mehrere server
wie macht man das?
also die einzelnen server sollen schon getrennte spiele sein, aber die server-trennung soll für den spieler möglichst unsichtbar sein.
ich habe keine ahnung, wie das normalerweise läuft, aber ich habe mir das folgendermaßen überlegt:
ich habe mein spiel in 2 programmteile aufgeteilt:
der erste programmteil beinhaltet hauptsächlich den externen bereich des spiels. also startseite, login-formular, registrierungs-formular und so. dazu gehört eine datenbank, die 2 tabellen enthält: eine tab. mit statistischen daten über das gesamte spiel und die andere tab. enthält alle spieler und besteht nur aus zwei spalten: spielername & dazugehöriger server. diese zweite tabelle funktioniert dann mit einem entsprechenden script wie eine weiche nach dem login (das ganze soll unsichtbar ablaufen, also ohne dass der spieler beim login selber seinen server auswählen muss). dazu ist aber eine weiterleitung notwendig, wobei ich nicht weiß, ob es da mit irgendwelchen browsereinstellungen probleme geben könnte.
der zweite programmteil ist der interne bereich, also das eigentliche spiel. dieser teil ist logischerweise mehrfach (pro server) vorhanden und besteht auch jeweils aus dem spiel-code und einer datenbank.
soweit die theorie (zur hälfte habe ich das auch schon umgesetzt). schreibt einfach mal etwas dazu. ich will vor allem wissen, wie man die verbindung zwischen "startserver" und "spiel-server" beim login am geschicktesten umsetzen kann.
Ein spiel - mehrere server
gepostet vor 18 Jahre, 7 Monate von Jackk
gepostet vor 18 Jahre, 7 Monate von woodworker
wozu bitte nen extra server für die loginseite? ist das nicht totaler overkill?
gepostet vor 18 Jahre, 7 Monate von TheUndeadable
Das, was du vorhast, nennt sich auch Cluster.
Schau dir mal Clustering-Lösungen von MySQL, PostgreSQL, ASP.Net und Java Server Pages an und entscheide dich dann, ob und wie du es in deiner bestehenden Programmierlösung integrieren kannst oder ob du from the scratch neu anfängst.
Für viele Zwecke reicht es, wenn du deine Datenbank clusterst.
Zu deiner vorgeschlagenen Trennung: Absolut überflüssig, wie Woodworker schon gesagt hast. Die Loginseite wird sowenig Resourcen fressen, dass du das Clustering gleich sparen lassen kannst (es sei denn, dass du einen 486er als Login-Server hinstellen möchtest)
Schau dir mal Clustering-Lösungen von MySQL, PostgreSQL, ASP.Net und Java Server Pages an und entscheide dich dann, ob und wie du es in deiner bestehenden Programmierlösung integrieren kannst oder ob du from the scratch neu anfängst.
Für viele Zwecke reicht es, wenn du deine Datenbank clusterst.
Zu deiner vorgeschlagenen Trennung: Absolut überflüssig, wie Woodworker schon gesagt hast. Die Loginseite wird sowenig Resourcen fressen, dass du das Clustering gleich sparen lassen kannst (es sei denn, dass du einen 486er als Login-Server hinstellen möchtest)
gepostet vor 18 Jahre, 7 Monate von Crafty-Catcher
Kann man nicht einfach folgendes bauen?:
Da die Login Seite und das evtl. Portal nichtwirklich was an Ressourcen braucht kann man das ja zusätzlich auf Server 1 packen.
Login Page auf Server 1
Tabelle mit User <-> Server auf Server 1
Welt 1 auf Server 1
Welt 2 auf Server 2
Welt n auf Server n
Da die Login Seite und das evtl. Portal nichtwirklich was an Ressourcen braucht kann man das ja zusätzlich auf Server 1 packen.
Login Page auf Server 1
Tabelle mit User <-> Server auf Server 1
Welt 1 auf Server 1
Welt 2 auf Server 2
Welt n auf Server n
gepostet vor 18 Jahre, 7 Monate von Chojin
Also extra Server für das Portal macht auch in meinen Augen wenig Sinn von Performance Seite. Aber wenn du deine Anmelde-Datenbank unabhängig vom allen Spielen machen willst, um zum Beispiel dem Spieler zu ermöglichen sich gleichzeitig bei meheren Spielen auf unterschiedlichen Servern (wegen Performance) anzumelden, dann gibt es da ne ganz einfache Lösung. Du greifst von den Spieleservern auf die allgemeine Userverwaltung über eine andere Datenbankverbindung zu.
Am einfachsten die volle Adresse des Datenbankservers und keine referenzierung alá "localhost". So stellst du sicher das Userverwaltung von einem bestimmten und die Spieldaten immer vom lokalen Server geladen werden...
War das überhaupt die frage? :roll:
reg4rds
chojin
Am einfachsten die volle Adresse des Datenbankservers und keine referenzierung alá "localhost". So stellst du sicher das Userverwaltung von einem bestimmten und die Spieldaten immer vom lokalen Server geladen werden...
War das überhaupt die frage? :roll:
reg4rds
chojin
gepostet vor 18 Jahre, 7 Monate von Jackk
das mit der trennung des start-servers und der spiel-server hatte ich nur anschaulich gemeint. also es könnte theoretisch so sein. aber das ding ist ja dann auch zu der lösung von crafty-catcher kompatibel. so hätte ich das dann wahrscheinlich auch gemacht.
meint ihr eigentlich, dass ich nur die datenbank (bei bedarf) clustern muss und es reicht, dass der ganze spiel-programm-code einmalig vorhanden ist? geht der server, wo das scipt abgelegt ist, dann nicht auch ab einer bestimmten (für ein durchschnittliches browsergame vorstellbaren) anzahl von spielern in die knie? wäre ja gut, wenn nicht. dann haben sich nämlich fast alle meine probleme/bedenken erledigt.
dann habe ich nämlich nur noch die datenbank, die ich trennen muss. und ich habe gerade nach "MySQL-Cluster" gegoogelt. mit der gleichnamigen freien software wird die datenbank dann vollautomatisch auf verschiedene server verteilt. und für mich sieht das ganze dann weiterhin wie eine datenbank aus, wenn ich das richtig verstanden habe.
meint ihr eigentlich, dass ich nur die datenbank (bei bedarf) clustern muss und es reicht, dass der ganze spiel-programm-code einmalig vorhanden ist? geht der server, wo das scipt abgelegt ist, dann nicht auch ab einer bestimmten (für ein durchschnittliches browsergame vorstellbaren) anzahl von spielern in die knie? wäre ja gut, wenn nicht. dann haben sich nämlich fast alle meine probleme/bedenken erledigt.
dann habe ich nämlich nur noch die datenbank, die ich trennen muss. und ich habe gerade nach "MySQL-Cluster" gegoogelt. mit der gleichnamigen freien software wird die datenbank dann vollautomatisch auf verschiedene server verteilt. und für mich sieht das ganze dann weiterhin wie eine datenbank aus, wenn ich das richtig verstanden habe.
gepostet vor 18 Jahre, 7 Monate von woodworker
ja
ein mysqlcluster besteht aus 3 serverarten
dem Managementserver (nur einer kann auf einenm beliebigen server mitlaufne), den Nodeservern(können beliebig viele sein, die kümmern sich um die DB aufteilung und datenspeicherung) und halt dem "normalen" mysqlserver den du abfragen schicken kannst der leitet die dann an die Nodeserver weiter die dann die daten zurückliefern.
ABER mysqlcluster sind dafür gedacht um ausfallsicherheits zu gewährleisten nicht um ein highperformance system zu erstellen das muss dir klar sein den die clustranfragen sind schon etwas langsamer.
für mehr performance würde ich zu nem master/slave system raten
nur updates etc auf nen master schreiben udn halt mehrer slaves aufstellen die dann das ganze select gedöns abarbeiten.
ein mysqlcluster besteht aus 3 serverarten
dem Managementserver (nur einer kann auf einenm beliebigen server mitlaufne), den Nodeservern(können beliebig viele sein, die kümmern sich um die DB aufteilung und datenspeicherung) und halt dem "normalen" mysqlserver den du abfragen schicken kannst der leitet die dann an die Nodeserver weiter die dann die daten zurückliefern.
ABER mysqlcluster sind dafür gedacht um ausfallsicherheits zu gewährleisten nicht um ein highperformance system zu erstellen das muss dir klar sein den die clustranfragen sind schon etwas langsamer.
für mehr performance würde ich zu nem master/slave system raten
nur updates etc auf nen master schreiben udn halt mehrer slaves aufstellen die dann das ganze select gedöns abarbeiten.
gepostet vor 18 Jahre, 7 Monate von Jackk
ok, dann werde ich mir das mit dem cluster mal wieder aus dem kopf schlagen (wegen der performance). die datenbank werde ich dann manuell aufteilen. das wird auch nicht so schwierig sein und wahrscheinlich kriege ich meinen server-verwalter-heini sowieso nicht so schnell dazu, ein cluster-system zu installieren (-; danke für die aufschlussreiche und schnelle info.
aber wie sieht es mit dem quelltext der seite an sich aus? wenn ich das programm nur auf einem server laufen lasse, verträgt der denn dann die eventuell ziemlich hohe zahl an zugriffen? der muss ja schliesslich (in meinem fall) auch den ganzen php-code ausführen. ich gehe jetzt davon aus, dass ich die datenbanken auch zur not komplett auf andere server auslagere.
aber wie sieht es mit dem quelltext der seite an sich aus? wenn ich das programm nur auf einem server laufen lasse, verträgt der denn dann die eventuell ziemlich hohe zahl an zugriffen? der muss ja schliesslich (in meinem fall) auch den ganzen php-code ausführen. ich gehe jetzt davon aus, dass ich die datenbanken auch zur not komplett auf andere server auslagere.
gepostet vor 18 Jahre, 7 Monate von friedenspanzer
Bei einer großen Spielermenge sollte man das natürlich auch splitten, weil da sonst tatsächlich die Performance drunter leidet. Im Idealfall kannst du das so anstellen: Schick beim einloggen die Spieler auf verschiedene Server (abwechselnd/zufällig) die beide auf die selbe DB zugreifen.
Sollte in dieser Art eigentlich funktionieren.
Sollte in dieser Art eigentlich funktionieren.
gepostet vor 18 Jahre, 7 Monate von Jackk
wenn ich sowieso beide teile splitten muss, dann kann ich es ja so machen, dass die datenbank immer auch ein dazugehöriges script auf dem localhost liegen hat. also mal anschaulich:
Server1:
----------
- externer Spiel-Bereich (Startseite und so)
- Main-Datenbank (Statistik/Übersicht)
- Website/Programm für Spiel-Server1
- Datenbank von Spiel-Server1
Server2:
----------
- Website/Programm für Spiel-Server2
- Datenbank von Spiel-Server2
Server3:
----------
... (beliebig erweiterbar)
Server1:
----------
- externer Spiel-Bereich (Startseite und so)
- Main-Datenbank (Statistik/Übersicht)
- Website/Programm für Spiel-Server1
- Datenbank von Spiel-Server1
Server2:
----------
- Website/Programm für Spiel-Server2
- Datenbank von Spiel-Server2
Server3:
----------
... (beliebig erweiterbar)
gepostet vor 18 Jahre, 7 Monate von Sarge
Du teilst einfach Webserver<->Datenbank server.. datenbank server stellst pro spielwelt einen hin oder clusterst oder machst irgendwelche wilden master/slave konstrukte ist ja erstmal egal und webserver stellst einfach mehrere hin.. die anfragen werden am einfachsten per DNS-Round Robin ( zwei IN A einträge in der zonefile also z.b.
www IN A deine1ip
IN A deine2ip ) .... oder später wenn du ein paar mehr hast nobler (und vorallem mit ausfallsicherheitsoptionen ) über ein layer3 oder layer7 loadbalancing.. nach belieben und vorallem geldbeutel entweder selbst gestrickt oder per hardware
www IN A deine1ip
IN A deine2ip ) .... oder später wenn du ein paar mehr hast nobler (und vorallem mit ausfallsicherheitsoptionen ) über ein layer3 oder layer7 loadbalancing.. nach belieben und vorallem geldbeutel entweder selbst gestrickt oder per hardware