Browsergame mit Django entwickeln?

Django, Flask, Bottle, WSGI, CGI…
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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…
Insbesondere mit Mongodb welches keine Transaktionen oder Locking zu unterstützen scheint (oder habe ich da etwas übersehen?).
Ka, müsste man schauen wie viel man davon braucht etc…
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. :wink:
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…
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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. :wink:
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
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Nun von Anfang an RabbitMQ mit Django (jetzt mal nur als Beispiel) zu verwenden ist schon einmal einfacher als ne saubere Struktur zu schreiben, so dass man es später einbauen kann. Und ja je nach Projekt achte ich schon von Anfang an auf Skalierung…
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

apollo13 hat geschrieben:Nun von Anfang an RabbitMQ mit Django (jetzt mal nur als Beispiel) zu verwenden ist schon einmal einfacher als ne saubere Struktur zu schreiben, so dass man es später einbauen kann. Und ja je nach Projekt achte ich schon von Anfang an auf Skalierung…
Lose Kopplung ist für mich absolut essentiell für eine gute Architektur. Darauf würde ich RabbitMQ hin und MongoDB her nicht verzichten wollen. Gerade in einer dynamischen Sprache wie Python ist das auch nicht schrecklich aufwändig, und der Gewinn ist sehr gross (Verständlichkeit, Testbarkeit, Wartbarkeit, einfachere Zusammenarbeit).

Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Klar deshalb ja auch RabbitMQ via celery, da hast dein loose coupling schon ;) Aber lassen wir das, das führt zu nix…
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

apollo13 hat geschrieben:Klar deshalb ja auch RabbitMQ via celery, da hast dein loose coupling schon ;) Aber lassen wir das, das führt zu nix…
Celery sieht interessant aus. Werde ich mir merken.

Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Antworten