Mobile Games mit
Microsoft Azure
Jürgen Gutsch
Jürgen Gutsch
• Developer, Consultant und Trainer bei der
YooApplications AG in Basel
• Stolzer Papa von drei Kindern
• Blogger, Autor von Fachartikeln
• Speaker auf Konferenzen und User Groups
• User Group Leader des .NET-Stammtisch Konstanz-
Kreuzlingen
• .NET-Begeisterter Softwareentwickler
• Webentwickler
• Open Source und ALT.NET Enthusiast
• Clean Code Developer
Was wir können
Wir suchen Dich!
Die YooApps bietet fünf interessante Positionen, die
es zu besetzen gilt. Trifft eines der fünf Profile
unter: www.yooapps.com/jobs auf dich zu, so sende
uns noch heute deine Unterlagen an jobs@yooapps.com!
• Software Engineer im Bereich .Net (80-100%)
• Unity3D Game Developer (80-100%)
• Web- oder Mobile Developer (80-100%)
• Projektleiter / Kundenberater (80-100%)
• User Experience Designer / Konzepter (80-100%)
Das Game
http://www.youtube.com/watch?v=I58AQs8QS18
Das Game
Das Game
• Kräuteranbau auf einem Feld
• Pflegen und Hegen der Kräuter
• Ernten und Verarbeiten der Kräuter
• Verkaufen und Sammeln der Kräuter
• Nutzung von Gutscheincodes
• Geo-Interaktion => Felder an echten Geopositionen
• Standortabhängige Feldqualität
• Reales Wetter am Standort des Feldes
• Highscore
• Push-Benachrichtigung
Das iOS Game
Das iOS Game
Konzept
• Rundenbasiert
• Beliebig viele Runden pro Spieler
• Mehrere Felder pro Runde
• Krauter, Geräte und Felder kosten Geld
• Verkauf von Kräutern bringt Geld
• Aktionen bringen Punkte
• Ziele des Spiels:
• Von allen Kräutern eine bestimmte Menge an Ricola
zu senden um echtes Kräuterzucker zu erhalten
• In der Gesamt-Highscore so weit oben wie zu sein.
Anforderungen
• Stabilität
• Ausfallsicherheit
• Skalierbarkeit
• Performance
• Wartbarkeit
• Ausführliches Logging
• Spielhistorie
Zahlen
• Über 17.500 App Downloads
• Knapp 25.500 Felder
• Über 13.000 Spieler
• Über 4.500 aktive Spieler
• Davon Über 2.500 sehr aktive Spieler
(>50.000 Punkte)
• Etwa 6.000 Events
pro Spielrunde und Spieler
• Ca. 54.000.000 Einträge
(Stand März 2014)
Infrastruktur
• Compute-Instanzen / Web Roles mit
• REST Schnittstelle zur Kommunikation mit den
Clients
• Spiellogik zum Großteil auf dem Server
• Background Services / Worker Role
• Für Push-Nachrichten und Schädlingsberechnung
• Relationale Datenbank für Veränderbare Daten
• Nutzerdaten, Highscore
• Bestellungen (von Kräuterzucker)
• Objektdatenbank für nicht veränderbare Daten
• Spielaktionen
• Nur hinzufügen von einzelnen Daten
• Schnelles Lesen von vielen Daten
Microsoft Azure
2 Web Roles
1 Worker Roles
Table Storage
SQL Database
Windows Azure Cache
CQRS Pattern
• Die Spielrunde ist das Aggregate
• Unsere Hauptdomäne in der alle Aktionen stattfinden
• Alle Interaktionen finden in einer Spielrunde statt
• Background-Service und User führen Aktionen aus
• Azure Table Storage wird als Event Store verwendet
• Snapshots werden im Azure Cache abgelegt
• Eigentlich „Event Sourcing + Commands“ statt CQRS
• Querying findet auf dem Snapshot aus dem Eventstore
statt und nicht auf einer denormalisierten
Datenbank
Exkurs: CQRS Pattern
Quelle: CAP-Theorem: http://de.wikipedia.org/wiki/CAP-Theorem
• Konsistenz: Alle Knoten sehen zur selben
Zeit, dieselben Daten.
• Verfügbarkeit: Alle Anfragen an das System
werden stets beantwortet.
• Partitionstoleranz: Das System arbeitet
auch bei Verlust von Nachrichten, einzelner
Netzknoten oder Partition des Netzes
weiter.
CAP-Theorem
Exkurs: CQRS Pattern
Quelle: SQRS Journey: http://msdn.microsoft.com/en-us/library/jj591573.aspx
Exkurs: CQRS Pattern
Quelle: http://www.gridshore.nl/2009/12/21/cqrs-made-easy-with-cqrs4j
Exkurs: CQRS Pattern
Event Store
Aggregate Version Event Details
GR1 1 Field Added GEO=lat,long;Name=MyField;
GR1 2 Quadrant Plowed Q=a1,a2,a3,a4,…
GR2 1 Field Added GEO=lat,long;Name=MyField
GR1 3 Quadrant Seeded Seed=pepermint;Q=a1,a2,a3,a4
GR2 2 Quadrant Plowed Q=b2,b3,c2,c3
GR2 3 Quadrant Seeded Seed=pepermint;Q=b2,b3,c2,c3
GR3 1 Field Added GEO=lat,long;Name=MyField
GR1 4 Quadrant Weeded Q=a1,a2,a3,a4
… … … …
Fragen / Diskussion / Kontakt
Zeit für Fragen und Diskussion
jetzt …
… oder jederzeit:
juergen@gutsh-online.de
Twitter: @sharpcms
FB//:juergen.gutsch
Skype//:juergen.gutsch

Mobile Games mit Windows Azure

  • 1.
    Mobile Games mit MicrosoftAzure Jürgen Gutsch
  • 3.
    Jürgen Gutsch • Developer,Consultant und Trainer bei der YooApplications AG in Basel • Stolzer Papa von drei Kindern • Blogger, Autor von Fachartikeln • Speaker auf Konferenzen und User Groups • User Group Leader des .NET-Stammtisch Konstanz- Kreuzlingen • .NET-Begeisterter Softwareentwickler • Webentwickler • Open Source und ALT.NET Enthusiast • Clean Code Developer
  • 4.
  • 5.
    Wir suchen Dich! DieYooApps bietet fünf interessante Positionen, die es zu besetzen gilt. Trifft eines der fünf Profile unter: www.yooapps.com/jobs auf dich zu, so sende uns noch heute deine Unterlagen an jobs@yooapps.com! • Software Engineer im Bereich .Net (80-100%) • Unity3D Game Developer (80-100%) • Web- oder Mobile Developer (80-100%) • Projektleiter / Kundenberater (80-100%) • User Experience Designer / Konzepter (80-100%)
  • 6.
  • 7.
  • 8.
    Das Game • Kräuteranbauauf einem Feld • Pflegen und Hegen der Kräuter • Ernten und Verarbeiten der Kräuter • Verkaufen und Sammeln der Kräuter • Nutzung von Gutscheincodes • Geo-Interaktion => Felder an echten Geopositionen • Standortabhängige Feldqualität • Reales Wetter am Standort des Feldes • Highscore • Push-Benachrichtigung
  • 9.
  • 10.
  • 11.
    Konzept • Rundenbasiert • Beliebigviele Runden pro Spieler • Mehrere Felder pro Runde • Krauter, Geräte und Felder kosten Geld • Verkauf von Kräutern bringt Geld • Aktionen bringen Punkte • Ziele des Spiels: • Von allen Kräutern eine bestimmte Menge an Ricola zu senden um echtes Kräuterzucker zu erhalten • In der Gesamt-Highscore so weit oben wie zu sein.
  • 12.
    Anforderungen • Stabilität • Ausfallsicherheit •Skalierbarkeit • Performance • Wartbarkeit • Ausführliches Logging • Spielhistorie
  • 13.
    Zahlen • Über 17.500App Downloads • Knapp 25.500 Felder • Über 13.000 Spieler • Über 4.500 aktive Spieler • Davon Über 2.500 sehr aktive Spieler (>50.000 Punkte) • Etwa 6.000 Events pro Spielrunde und Spieler • Ca. 54.000.000 Einträge (Stand März 2014)
  • 14.
    Infrastruktur • Compute-Instanzen /Web Roles mit • REST Schnittstelle zur Kommunikation mit den Clients • Spiellogik zum Großteil auf dem Server • Background Services / Worker Role • Für Push-Nachrichten und Schädlingsberechnung • Relationale Datenbank für Veränderbare Daten • Nutzerdaten, Highscore • Bestellungen (von Kräuterzucker) • Objektdatenbank für nicht veränderbare Daten • Spielaktionen • Nur hinzufügen von einzelnen Daten • Schnelles Lesen von vielen Daten
  • 15.
    Microsoft Azure 2 WebRoles 1 Worker Roles Table Storage SQL Database Windows Azure Cache
  • 16.
    CQRS Pattern • DieSpielrunde ist das Aggregate • Unsere Hauptdomäne in der alle Aktionen stattfinden • Alle Interaktionen finden in einer Spielrunde statt • Background-Service und User führen Aktionen aus • Azure Table Storage wird als Event Store verwendet • Snapshots werden im Azure Cache abgelegt • Eigentlich „Event Sourcing + Commands“ statt CQRS • Querying findet auf dem Snapshot aus dem Eventstore statt und nicht auf einer denormalisierten Datenbank
  • 17.
    Exkurs: CQRS Pattern Quelle:CAP-Theorem: http://de.wikipedia.org/wiki/CAP-Theorem • Konsistenz: Alle Knoten sehen zur selben Zeit, dieselben Daten. • Verfügbarkeit: Alle Anfragen an das System werden stets beantwortet. • Partitionstoleranz: Das System arbeitet auch bei Verlust von Nachrichten, einzelner Netzknoten oder Partition des Netzes weiter. CAP-Theorem
  • 18.
    Exkurs: CQRS Pattern Quelle:SQRS Journey: http://msdn.microsoft.com/en-us/library/jj591573.aspx
  • 19.
    Exkurs: CQRS Pattern Quelle:http://www.gridshore.nl/2009/12/21/cqrs-made-easy-with-cqrs4j
  • 20.
    Exkurs: CQRS Pattern EventStore Aggregate Version Event Details GR1 1 Field Added GEO=lat,long;Name=MyField; GR1 2 Quadrant Plowed Q=a1,a2,a3,a4,… GR2 1 Field Added GEO=lat,long;Name=MyField GR1 3 Quadrant Seeded Seed=pepermint;Q=a1,a2,a3,a4 GR2 2 Quadrant Plowed Q=b2,b3,c2,c3 GR2 3 Quadrant Seeded Seed=pepermint;Q=b2,b3,c2,c3 GR3 1 Field Added GEO=lat,long;Name=MyField GR1 4 Quadrant Weeded Q=a1,a2,a3,a4 … … … …
  • 21.
    Fragen / Diskussion/ Kontakt Zeit für Fragen und Diskussion jetzt … … oder jederzeit: juergen@gutsh-online.de Twitter: @sharpcms FB//:juergen.gutsch Skype//:juergen.gutsch