ServerCluster

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

Geeecko

Betreff: ServerCluster

BeitragDi, Mai 27, 2008 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
HeyHo!
Ihr kennt doch sicher "Server-Cluster", oder?
Also einen "zusammenschluss" von mehreren Rechnern.
Ungefähr so:
user posted image
Meine Frage ist nun, wie realisiere ich sowas in BMax?
Also ich will erreichen: Ein Client bekommt davon nichts mit. Er verbindet einfach auf einen Server(-Cluster).
Die Daten die der Client sendet, sollen auf den verschiedenen Servern aufgeteilt werden.
Wenn ich jedoch ein OnlineSpiel machen wollte (nein, will ich nicht...), müsste ich doch die ganzen Spieler etc. zwischen den Servern Synchronisieren oder? Wie würdet ihr das machen?
Ich brauche Tipps! *sabber*
*hust* Danke.

mfg MD
 

Coffee

BeitragDi, Mai 27, 2008 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ai in BMax... das kommt dann sehr auf die aufgaben an... ich habe von einem servercluster immer noch die aufgabe im kopf, etwas zu berechnen (mathematisches)... das wird in BMax wohl nichts, denn so eine aufgabenverteilung zu entwickeln ist wirklich schwer!
wenn es dir um spiele o.ä. geht, würde ich für jeden server eine extra serversoftware schreiben, bzw günstiger wäre für jeden die gleiche, dass jeder alle funktionn ausführen kann, aber immer nur mitgeteilt bekommt welche er ausführen muss. sobald er das ergebnis zurücksendet schaltet der verwaltungsserver intern diesen server auf "idlet" und teilt ihm wieder aufgaben mit. am besten wäre es, du beschreibst mal genau, was du machen willst

MfG
*Mjam*

Geeecko

BeitragDi, Mai 27, 2008 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Gehen wir davon aus, ich schreibe ein MMORPG.
Jeder weiß wohl hier mittlerweile was das ist ^^
Nun, bei so vielen Spielern wäre es wohl unmöglich, alles auf einem PC
zu managen, bzw zu berechnen.
Also nehm ich mir doch einfach mehrere Server. So sehe ich da keine Probleme, und habe für alles eine Lösung gefunden. Jedoch beim synchronisieren fällt mir nichts ein.
Wenn sich der Spieler bewegt, soll es dann an alle Server im System geschickt werden? Das wäre ja schwachsinn, weils dann jeder Server wieder berechnen würde... Also sucht sich der Server ausserhalb des Clusters einen Server im cluster aus, der rechnen soll. Wenn dieser fertig gerechnet hat, schickt er das Ergebnis an alle anderen Server im Cluster, die die Spielerposition dann nur noch updaten müssen. Oder wie? ôÔ

Blitzcoder

Newsposter

BeitragDi, Mai 27, 2008 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum sollte der Client davon nichts mirkriegen? Am einfachsten ist es, du lässt den Master Server die Clients einfach an die anderen Server verteilen. Genrell ist das mit sehr vielen Spielern ein Problem, ich glaub sogar Blizzard macht es mit Wow so, dass es mehrere komplett getrennte Server gibt.

Dennoch, schaff es erstmal, einen halbwegs guten Rechner voll auszulasten.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)
 

René Meyer

BeitragDi, Mai 27, 2008 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Die einzelnen Server müssen nicht synchronisiert werden.

Bei WoW ist es z.B. so, jeder Server maximal 5.000 Spieler aufnimmt.

Wer einen Charakter erstellt, wählt zunächst einen Server aus, auf dem er spielen möchte. Der Charakter interagiert nur mit diesem Server. (Er kann auch nicht wechseln, ohne einen i.d.R. kostenpflichtigen Transfer-Prozeß.)

Charakter und Server sind also fest miteinander verbunden; alle anderen Server sind für den Spieler (und die Software) ohne Belang.

Das ist nicht nur eine Frage des Rechenaufwands. Wären alle (bei WoW 10 Millionen) Spieler auf einem Server, wäre die Spielwelt völlig übervölkert.
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb
 

ke^kx

BeitragDi, Mai 27, 2008 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei wow gibt es zusätzlich noch verschiedene Server für die Kontinente (gibt 3 stück -> 3 Server), da wird der Übergang einfach über einen Ladescreen gemacht. Und dann gibt es noch die Instanzierten Bereiche, die jede Gruppe für sich alleine spielt, dafür gibt es nochmal einen extra server.
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Jolinah

BeitragDi, Mai 27, 2008 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube Blizzard unterteilt die logischen Server (so wie man sie bei der Charaktererstellung auswählen kann) intern auf mehrere physikalische Server. Soviel ich weiss wird die Spielwelt in verschiedene Zonen aufgeteilt und ein physikalischer Server übernimmt dann eine oder mehrere Zonen.

Jedenfalls kommt es manchmal vor dass in WoW eine Zone abstürzt und dann alle Spieler, die sich in dieser Zone befinden, die Verbindung verlieren. Man kann sich dann auch nicht wieder einloggen und erhält die Meldung: "Zone ist nicht verfügbar." oder so ähnlich. Aber es ist möglich mit anderen Charakteren einzuloggen, die sich nicht in dieser Zone befinden.


So wäre es zumindest möglich die Last auf Zonen aufzuteilen. Jeder Zonenserver macht eigentlich das gleiche, nur halt für seine Zonen, die er verwaltet. Die Frage ist dann nur, ob man den Client bei jedem Zonenwechsel zu einem anderen Server verbinden lässt, oder ob die Zonenserver nur mit einem Master-Server kommunizieren und der Client immer nur mit dem Master-Server verbunden ist.

Nachteil bei den Zonen ist: Wenn sich sehr viele Spieler in einer Zone befinden, passiert das was ich oben beschrieben habe.

BtbN

BeitragDi, Mai 27, 2008 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Cluster im eigentlichen sinne macht nur sinn, wenn es um eine hoch parralelisierbare, sehr rechenintensive(Proteine Falten) berrechnung geht. Dann bekommt jeder Rechner im Cluster einen/mehrere "Threads" zugeteilt, die er dann abarbeiten darf.
Bei MMORPGs ist das anders geregelt. Wie es bei WoW läuft, wurde hier bereits genügend erklärt. Viele Realms, jeder realm diverse(weit mehr als 3) subserver.
 

René Meyer

BeitragMi, Mai 28, 2008 0:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß nicht, ob es tatsächlich "Zonen" in WoW gibt - abgesehen davon, wo es Ladebildschirme gibt (Addon-Content, Instanzen). Man kann die ganze Welt von Norden nach Süden bereisen, ohne, daß was nachgeladen wird, sieht, wo sich Gildenmitglieder und Gruppenmitglieder aufhalten etc.
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb

BtbN

BeitragMi, Mai 28, 2008 9:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt mehr, wodrum sich ein Server kümmern kann, als um eine der 5(Östliche, Kalimdor, Plateau, Scherbenwelt(da sind Draenai und Blutelfen startgebiet mit drin), Instanzen).
Da wären noch haufenweise Server für die Arenen, Battlegrounds, Auktionssystem, usw.
 

Dreamora

BeitragMi, Mai 28, 2008 9:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Jedes Server Layout hängt in höchstem Masse von der gewünschten Zielnutzung ab. Da gibts weder richtig noch falsch, noch sowas wie ein "Basislayout". Es gibt auch keine Theorien dahinter, weswegen diese Programmierung zu den komplexesten überhaupt gehört und es mehr beispiele gibt die ineffizient arbeiten als gute Beispiele.

Das meiste davon kann dabei auch easy mit BM umgesetzt werden.
Threads würde man sowieso nicht nutzen, denn ein Lock in einem Thread kann potentiell den gesamten Server killen, deswegen nutzt man getrennte Prozesse, dann geht nur 1 Server down, net alle. Darüber hinaus teilen sich alle Threads mit dem Host Prozess den IO Access etc. Nicht sonderlich wünschenswert wegen der maximalen Anzahl dateien die du parallel offen haben kannst pro Prozess etc
Wenn du zb Zonen / Sektoren server hast dann halt eine Zone. Kennen vor allem Ragnarok spieler wo einige duzend getrennte Prozesse hinter jedem Server stehen, auf wieviel CPU etc weiss eigentlich niemand.

BM hilft hier dank Pub.FreeProcess sowie den Support von Standard Streams (standard in und out stream in form von globalen Streamhandles die immer existieren beim child prozess & TProcess.Pipe beim host). Wobei ich persönlich eher etwas MPI ähnliches nutzen würde zur Master Server <-> Zone Server und Zone Server <-> Zone Server kommunikation. Speziell letzteres ist ohne etwas MPI ähnliches nicht möglich.
Hinzu kommt das man die prozesse auf verschiedenen Maschinen hat wenn man grosse Last hat, womit das die einzig verbleibende Lösung bleibt. Solange man jedoch mit 1 - 8 Kernen auskommt, kann man natürlich auch die Pipe etc nutzen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Geeecko

BeitragMi, Mai 28, 2008 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke an alle für eure Antworten Smile Hat mir geholfen Smile
Aber eine Frage noch: Sagen wir bei WoW gibts 3 Welten (ich kenne WoW nicht wirklich).
Ich habe 4 Server. 1Master-Server und die anderen 3 übernehmen jeweils eine Welt.
Wenn Spieler1 von Welt 1 nach 3 wechselt, schließt der Server von Welt 1 die Verbindung,
sendet die neuen Daten an den Masterserver, welche diese in eine Datenbank schreibt.
Der Client verbindet sich nun neu (atomatisch auf dem Ladebildschirm) mit dem Masterserver.
Der Masterserver guckt in welcher Welt der Client ist (JETZT ist er in Welt 3) und schickt
dann die IP vom Server 3 (Server-Welt 3). Jetzt verbindet sich der Client mit der neuen IP.
Würde das so gehen?

hamZta

Administrator

BeitragMi, Mai 28, 2008 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum nicht? Du könntest es noch optimieren, so, dass der Client sich nicht extra nochmal zum Masterserver verbinden muss, sondern direkt vom Server 1 die neue IP bekommt.

hamZta
Blog.

Silver_Knee

BeitragDo, Mai 29, 2008 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Es wird wohl in cnRS so laufen... habe inzwischen den Server und den Client darauf vorbereitet, dass es um einen Planeten eine Gewisse Zone gibt inder man sich aufhalten kann.... Sollte die Spielerlast eines Planeten Extrem Groß sein (wahrsch. bei der Erde....) so werde ich dem Server sagen er soll dem Client ne andere IP schicken wenn er zur erde fliegt und der Client macht dann im Zuge von Chatmessage auslesen etc einfach server_ip auslesen Killt den TCP stream und Fängt an ne UDP-login request an die neue ip zu schicken. danach hab ich eh alles so automatisiert dass es passt...
 

Dreamora

BeitragDo, Mai 29, 2008 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
wozu ne neue IP?

Alle 4 Server eine IP. Der Client verbindet jeweils zum master, der teilt ihm port des subservers mit -> da weiter spielen (port kann gewechselt werden ohne verbindung einzusargen je nach lib die du nutzt)
Wenn man welt wechselt teil der subserver das dem master mit, sendet dem client aber im gleichen go auch den port des anderen weltserver -> selbes spiel wie schon bei master -> subserver übergang
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Silver_Knee

BeitragDo, Mai 29, 2008 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm über den port kann man das ja auch machen.....stimmt.... im moment habe ich einen Fixen Port und durch meine lose ip muss ich sowieso ständig die IP senden..

Xaron

BeitragSa, Mai 31, 2008 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
René Meyer hat Folgendes geschrieben:
Ich weiß nicht, ob es tatsächlich "Zonen" in WoW gibt - abgesehen davon, wo es Ladebildschirme gibt (Addon-Content, Instanzen). Man kann die ganze Welt von Norden nach Süden bereisen, ohne, daß was nachgeladen wird, sieht, wo sich Gildenmitglieder und Gruppenmitglieder aufhalten etc.


Es muss Zonen geben, bzw. Bereiche mit lokalen Koordinatensystemen, sonst würde das nicht funktionieren. Es wird halt einfach im Hintergrund nachgeladen.

@Meister_Dieb: An Deiner Stelle würde ich mich von den Cluster-Gedanken erstmal verabschieden. Ein normaler Server verkraftet bei herkömmlichen MMORPGS sicher bis zu 100 Spielern gleichzeitig, wenn er nicht allzu schlampig programmiert ist. Wenn Du dann tatsächlich mal soweit bist, kannst Du Dich um das Load-Balancing noch extra kümmern...

Gruß - Xaron
Cerberus X - Monkey X Reloaded!

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group