apollo13 hat geschrieben:veers hat geschrieben:apollo13 hat geschrieben:veers hat geschrieben:Ich würde ziemlich sicher keine (SQL) Datenbank verwenden. Ich würde die gesamte Spiel Welt im Speicher behalten (RAM kostet ja nicht mehr die Welt) und zur persistierung Regelmässig auf die Festplatte synchronisieren. Anfang vermutlich einfach mit Pickle.
Ich würd nicht alles im Ram halten, ist auch fürs syncen zwischen den Webservern doof, Mongodb oder so würde sich anbieten.
Wenn dein Code dafür 10x schneller läuft könnte sich das durchaus Lohnen.
performance != skalieren, was hilft dir schneller, wenn du den server einfach mit requests wegkillen kannst und dann wegen deinem Memory nimmer skalieren kannst…
Wenn deine Welt wirklich so Massiv ist, dass das nicht mehr möglich ist, dann Teil sie in 2. Das Skaliert garantiert besser als ein Zentraler Keyvalue Store auf den mehrere Server schreiben die dann irgend wie Synchronisiert werden müssen. Mongodb o.ä. zu persistierung zu verwenden halte ich durchaus für Denkbar. Würde ich jedoch auch Aufschieben.
apollo13 hat geschrieben:apollo13 hat geschrieben:Gamelogik in Threads? Ne danke lieber ne MessageQueue die bestimmte Tasks alle $X Minunten ausführen kann.
veers hat geschrieben:Die Game Logik würde ich soweit wie möglich in festen Zeit Schritten in einem einzelnen Thread abhandeln. Eingaben würde ich über eine Message Queue laufen lassen. Das auslesen der Daten für die Spieler ist interessanter. Vermutlich würde ich da Anfangs vollständige Kopien der Welt erstellen und das ganze dann später optimieren.
In einem Thread, nicht in Threads. Deine Message Queue muss ja von irgend wo abgearbeitet werden.
In RabbitMQ we trust
Wie gesagt ich würde sowas von Anfang an so konzipieren, dass ich gerade solche Tasks leicht über die Server verteilen kann…
Ich würde vermutlich erst auf RabbitMQ umsteigen wenn es nötig ist. Wenn die Architektur stimmt müsste sich die Middleware leicht auswechseln lassen.
Mein Ansatz wäre auf jeden Fall zuerst einmal das Spiel zum laufen zu bringen, und zu sehen ob meine Idee wirklich so Toll ist wie ich mir das Gedacht habe, und ob andere Leute diese auch so Toll finden. Dinge wie die MessageQueue, oder auch ein KeyValueStore lassen sich mit einer vernünftigen Architektur relativ leicht auswechseln, wenn die bestehenden an ihre grenze kommen. Zum einen weil ich, und ganz bestimmt nicht nur ich, viel zu schnell die Lust an so einem Projekt verliere wenn ich nicht in absehbarer Zeit ans eingemachte kann. Zum anderen sehe ich das ganze als Optimierung an. Optimieren ohne das Wahre Problem zu kennen halte ich für gefährlich.
Gruss,
Jonas