ServerCluster
Übersicht

![]() |
GeeeckoBetreff: ServerCluster |
![]() Antworten mit Zitat ![]() |
---|---|---|
HeyHo!
Ihr kennt doch sicher "Server-Cluster", oder? Also einen "zusammenschluss" von mehreren Rechnern. Ungefähr so: ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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? ôÔ |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke an alle für eure Antworten ![]() ![]() 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? |
||
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group