Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Pecadis

Frischling

  • »Pecadis« ist der Autor dieses Themas

Beiträge: 29

Wohnort: München

Beruf: Fachinformatiker für Systemintegration

  • Private Nachricht senden

1

29.02.2012, 12:45

Große Netzwerke,Zoning und Datenbanken

Hallo Spieleprogrammierer,

Ich bin jetzt seit einiger Zeit dabei
ein Spiel zu planen das als Mmorpg fertig gestellt werden soll (nennt mich Größenwahnsinnig wenn ihr wollt :thumbsup: aber da sollen im selben "System" >20.000 Leute Interagieren können). Ich habe mir dabei gedacht das dieses Private Projekt auf etwa 5-10 Jahre ausgelegt werden soll. Ich habe Grundlegende Kenntnisse in der Programmierung mit c++, Java, Autoit (eher unbekannt aber gut für den Einsteiger^^ ist aber nur Prozedural) und Php. Des Weiteren kenne ich mich in den DBMS Mysql und Oracle aus.

Wie auch immer kreisen in meinen Gedanken immer wieder 2 probleme auf die ich zu lösen gedenke bevor ich weiter arbeiten kann, wobei beides sich um das Problem der Menge handelt.

1. Datenbank
Da es nun offensichtlich sein wird dass so viele Menschen/Personen/Rechner gleichzeitig auf einem System agieren werden muss auch eine stabile Datenbank dahinter stehen und alles Managen, und das am besten schnell und ohne ausfälle. Ich habe mich in den beiden DBMS Mysql und Oracle umgeschaut und entsprechende Versionen gefunden (Mysql Cluster und Oracle RAC).

Ich denke dabei ca dass jeder User Pro sekunde 1 Abfrage startet (sei es Inserts, Updates o.ä.) was bedeutet dass auf die Cluster 20.000 Transaktionen/sekunde entstehen würden (ja ich weiß das das ein ziemlich hoher wert ist aber im worst case szenario kann dass ja mal vorkommen.)

Meine frage wäre nun ob jemand Erfahrung hat mit der Performance (bei gleichwertigem aufbau der Hardware) der beiden DBMS und ob es eine bessere Alternative gibt.


2. Positionsdaten

Nun wenn ich mir vorstelle dass jeder User sich in dem Raum bewegt entstehen ja logischerweise auch Positionsdaten. Mein erster Gedanke war, dass ich diese Positionsdaten in der Datenbank abspeichere aber das würde erhebliche Reccourcen fressen alleine um die daten einzutragen, und noch mehr reccourcen um die Daten an alle user in der Nähe zu schicken. Zudem sind positionsdaten ja nicht Fest sondern flexibel.
Aus diesem Grund dachte ich ob es nicht besser wäre alles über einen eigene "Positionsserver" laufen zu lassen der das alles Managed und gar nicht erst in eine Datenbank schreibt (quasi eine eigene Applikation).

Meine frage dazu wäre ob jemand Erfahrung in dem bereich hat und weiß wie das im Professionellen umfeld realisiert wird bzw obs bessere Alternativen gibt.

Ich danke euch für eure Antworten
Pecadis

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Pecadis« (04.03.2012, 01:04)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

29.02.2012, 13:10

Was für Spiele hast du denn bisher schon so programmiert?

Wenn es dir einfach nur darum geht, deine Spielidee umzusetzen, dann wirf mal einen Blick auf das: http://www.heroengine.com/ ;)

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

29.02.2012, 13:17

Jetzt mal ganz davon abgesehen, dass das sowieso nichts wird (nein ich nenn dich nicht größenwahnsinnig ;) )
Bei 20.000 Abfragen pro Sekunde sollte ein gutes DBMS (wozu ich MySQL und Oracle zählen würde) noch nicht auf einen Cluster angewiesen sein. Das sollte ein einigermaßen potenter Server noch alleine schaffen.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

5

29.02.2012, 14:16

Ich frage mich, ob im Bereich Datenverarbeitung auf dem Server nicht in Bereiche kommst, in denen ein Framework wie Hadoop anfängt sinnvoll zu werden. Besonders wenn die Datenmengen, die deine Spieler produzieren, riesig werden.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Pecadis

Frischling

  • »Pecadis« ist der Autor dieses Themas

Beiträge: 29

Wohnort: München

Beruf: Fachinformatiker für Systemintegration

  • Private Nachricht senden

6

29.02.2012, 14:30

Hm nun das mit der Datenbankabfrage soll heißen dass es 20.000 einzelne Transaktionen sind und nicht z.b. 20.000 datensätze in einer einzigen Transaktion.

Ich habe mal spaßeshalber auf meinem Rechner auf php basis ein Testscript geschrieben das mir Eingaben in die mysql - datenbank schreibt.

Durchschnittlich schafft mysql es etwa 1000 inserts pro sekunde (wobei 1 Insert auch 1 Datensatz hat) dagegen habe ich nur 3 inserts mit einer Gesamtmenge von 105000 Datensätzen in nur 3 Sekunden einschreiben können. Am ende des Textes habe ich den Code mal eingefügt.

@Sylence ich habe nicht vor das Spiel in den nächsten 2 Jahren zu programmieren sondern lediglich zu Planen und zwar so genau wie irgend möglich ^^ aber ich finde es nett dass du an mich glaubst ;)

@Legend von Hadoop habe ich leider noch nichts gehört. könntest du mir erklären wo die stärken/nutzen dieses Frameworks sind?

@Chromanoid Danke für die vielen Links, ich habe mich da gerade reingelesen und ist wirklich verdammt interressant =)

Im folgenden könnt ihr euch das Script anschauen und gerne benutzen wenn ihr mögt.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
    $dbname="kekse";
    $dbhost="localhost";
    $dbuser="root";
    $dbpass="";
    mysql_connect($dbhost,$dbuser,$dbpass);
    mysql_select_db($dbname);
    $time_start = microtime(true);
    set_time_limit(0);
    $aua = 3;
    $durchlaeufe = 35000;
    for ($a = 1; $a <= $aua;$a++){
        
        $insert = "INSERT INTO tb_test( pk, test1, test2, test3, test4 ) VALUES ";
        for ($i = 1; $i <= $durchlaeufe ; $i++){
            $insert .= "(null,$i,$i,$i,100)";
            if ($i < $durchlaeufe)
            {
                $insert .= ",";
            }
            else
            {
                $insert .= ";";
            }
        }
        mysql_query ($insert);
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo "Menge an abfragen sind ".($aua*$durchlaeufe).".<br>";
    echo "Mysql $time Sekunden ausgeführt.";
    $avg = ($time / ($durchlaeufe*$aua))*1000;
    echo " Durchschnittswert = $avg Millisekunden<br>";
    
    $time_start = microtime(true);
    set_time_limit(0);
    $durchlaeufe = $aua*$durchlaeufe;
    
    for ($i = 1; $i <= $durchlaeufe ; $i++){
        $insert = "INSERT INTO tb_test( pk, test1, test2, test3, test4 ) VALUES (null,$i,$i,$i,100);";
        mysql_query ($insert);
    }
    mysql_query ($insert);
    
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo "Durchlauf ".$durchlaeufe." <br>";
    echo "Mysql $time Sekunden ausgeführt.";
    $avg = ($time / ($durchlaeufe*$aua))*1000;
    echo " Durchschnittswert = $avg Millisekunden<br>";
?>

7

29.02.2012, 14:33

Je nach Anwendung ist ja vor allem das load balancing auf verschiedene Server das Problem. Ein Server kann halt nur eine begrenzte Anzahl Benutzer aufnehmen und bedienen. Bei raumbasierten virtuellen Welten gibt's dazu eigentlich nur sharding, zoning, instancing und Replikation. Für das Bereitstellen der Illusion einer grenzenlosen Welt für alle Benutzer ist Zoning also das räumliche Aufteilen der Welt in verschiedene Zonen, die je von einem Server verarbeitet werden, so ziemlich best practice.

Sachen wie Hardoop helfen da nur sehr bedingt weiter. Project Darkstar/Red Dwarf hat soweit ich das verstanden habe im Grunde versucht das ganze Problem auf eine Datenbank auszulagern. Das hat bisher nicht so gut geklappt. Die wichtigste Middleware, die man so brauchen kann, ist denke ich, irgendwas mit dem man Publish/Subscribe zwischen den Servern machen kann. Positionsdaten etc. würde ich auch nicht unbedingt auf die DB knallen jedenfalls nicht in der Regelmäßigkeit wie man es für eine Berechnung des Spielzustands braucht. Schau dir sonst mal die Architektur von EVE Online an, die setzen auch stark auf eine zentrale DB.

Pecadis

Frischling

  • »Pecadis« ist der Autor dieses Themas

Beiträge: 29

Wohnort: München

Beruf: Fachinformatiker für Systemintegration

  • Private Nachricht senden

8

29.02.2012, 14:43

Ja das Problem mit dem aufteilen der Welt habe ich mir auch durchgedacht und bin deswegen auch auf die Idee mit den Datenbank-Clustern gekommen da mir schien das das die beste idee wäre. So wie ich es mir vorstelle müssten so oder so mindestens 2 Rechner agieren (wenn nicht sogar mehr) um alles zu realisieren. Aus diesem Grund habe ich auch meine beiden fragen gestellt ^^

Ich wurde unter anderem auch von Eve online inspiriert (die haben ja zeitweilig 60.000+ Personen gleichzeitig in dem System) wobei Sie es ja so gelöst haben dass jedes System quasi einen eigenen Server darstellt was in der Praxis dann zu einem Problem mit der auslastung geführt hat wenn 1500+ Personen gleichzeitig und vor allem unerwartet auftreten. Diesem Problem wollte ich aus dem weg gehen indem ich gleich den Grundgedanken habe dass jeder Server in meinem Cluster quasi alles verwaltet und sollte es in einer bestimmten Region viele User unterwegs sein, so teilt sich die last letztendlich auch auf alle Server.

Das dafür ein ziemlich gutes Load-balancing system notwendig ist bzw auch direkt eingebaut werden muss ... daran habe ich auch schon gedacht.

(Ich habe mir nicht umsonst für das Projekt 5-10 Jahre eingeplant ;) )

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

9

29.02.2012, 15:17

In 5-10 Jahren ist das höchstens zu schaffen, wenn du ein 50+ Mann starkes Team aus erfahrenen Entwicklern hast.

Das "Massive" in MMO steht auch für den Entwicklungsaufwand ;)

Pecadis

Frischling

  • »Pecadis« ist der Autor dieses Themas

Beiträge: 29

Wohnort: München

Beruf: Fachinformatiker für Systemintegration

  • Private Nachricht senden

10

29.02.2012, 15:27

=D ja sowas ist mir schon in den Sinn gekommen ... aber Männer brauchen eben Ziele =D

Nein mal im ernst. Ich habe schon einige Leute und Personen die mir dabei helfen und ich suche noch immer mehr. Aber bevor ich dann wirklich rekrutiere will ich die gesamte Planungsphase durch haben damit ich auch was vorzuweisen habe. Freunde von mir meinten eine Planungszeit von 2 Jahren wäre zu lang aber ich denke das ist gerade richtig um halbwegs ins detail gehen zu können.

Naja =) Wenn jemand lust hat kann er/sie ja mitmachen =D

Werbeanzeige