SlideShare une entreprise Scribd logo
1  sur  215
Télécharger pour lire hors ligne
PAINFUL SUCCESS
Jesper Richter-Reichhelm (@jrirei) / session 4853
Pain
Flash client   Backend
7M players / month
7M players / month

10K API calls / second
7M players / month

10K API calls / second

200K DB operations / second
7M players / month

10K API calls / second

200K DB operations / second

100K DB writes / second
7M players / month

10K API calls / second

200K DB operations / second

100K DB writes / second

2 devops since 2009
Success
Painful Success
Painful Success
2009
Decisions
What is the right
software stack?
Browser




        lb




app     app     app




  SQL         SQL

  sql         sql
2010
Scaling Up
100%#


 80%#


 60%#


 40%#


 20%#


  0%#
        0#   5#   10#   15#   20#   25#   30#   35#   40#
100%#


 80%#


 60%#


 40%#


 20%#


  0%#
        0#   5#   10#   15#   20#   25#   30#   35#   40#
100%#


 80%#


 60%#


 40%#


 20%#


  0%#
        0#   5#   10#   15#   20#   25#   30#   35#   40#
Small things...
AMF responses
Checking connection
      ‘status’
ActiveRecord caching
Lesson 1:

Always check back
   on reality!
Big Things...
Lot’s of tuning
Lot’s of tuning

and more memory
app




master




slave
app




                        1. create new DBs
master         master




slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication



slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication



slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters

slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters
                        4. cut replication
slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters
                        4. cut replication
slave          slave
                        5. remove old DBs
app




               1. create new DBs
      master
               2. setup replication
               3. start using masters
               4. cut replication
      slave
               5. remove old DBs
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters

slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters
                        4. remove old DBs
slave          slave
app




               1. create new DBs
      master
        ?      2. setup replication
               3. start using masters
               4. remove old DBs
      slave
app




               1. create new DBs
      master
               2. setup replication
               3. start using masters
               4. remove old DBs
      slave
               5. cut replication
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters

slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters
                        4. drop database;
slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters
                        4. drop database;
slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters
                        4. drop database;
slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters
                        4. drop database;
slave          slave
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters
                        4. drop database;
slave          slave
app




      1. create new DBs
      2. setup replication
      3. start using masters
      4. drop database;
app




      1. create new DBs
      2. setup replication
      3. start using masters
      4. drop database;
      5. Nooooooooo!
app




      1. create new DBs
      2. setup replication
      3. start using masters
      4. drop database;
      5. Nooooooooo!
Lesson 2:

You will make
  mistakes!
More things...
app




                        1. create new DBs
master         master
                        2. setup replication
                        3. start using masters
                        4. cut replication
slave          slave
                        5. truncate data
app




                        1. create new DBs
master         master
 AB             AB      2. setup replication
                        3. start using masters
                        4. cut replication
slave          slave
 AB             AB      5. truncate data
app


    A          B



                        1. create new DBs
master         master
 AB             AB      2. setup replication
                        3. start using masters

slave          slave
 AB             AB
app


    A          B



                        1. create new DBs
master         master
 AB             AB      2. setup replication
                        3. start using masters
                        4. cut replication
slave          slave
 AB             AB
app


    A          B



                        1. create new DBs
master         master
 AB             AB      2. setup replication
                        3. start using masters
                        4. cut replication
slave          slave
 AB             AB      5. truncate data
app


    A          B



                        1. create new DBs
master         master
 AB             AB      2. setup replication
                        3. start using masters
                        4. cut replication
slave          slave
 AB             AB      5. truncate data
app




master         master   master   master
 AC             BD




slave          slave    slave    slave
 AC             BD
app




master         master   master   master
 AC             BD       AC       BD




slave          slave    slave    slave
 AC             BD       AC       BD
app




master         master   master   master
 AC             BD       AC       BD




slave          slave    slave    slave
 AC             BD       AC       BD
app




master         master   master   master
 AC             BD       AC       BD




slave          slave    slave    slave
 AC             BD       AC       BD
The right thing...
Lesson 3:

Software is easy,
  data is hard!
44 GB

   in 8 days

24 GB
Not enough memory
Not enough memory

=> no backups
Not enough memory

=> no backups

=> no new slaves
Not enough memory

=> no backups

=> no new slaves

=> big problem
38 GB
   in 3 days
24 GB
v2.2
      in
 ixed
F
                38 GB
                   in 3 days
                24 GB
2011
Operation Hell
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app




SQL    SQL          SQL     SQL   SQL         SQL

sql     sql         sql     sql   sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd

 rd     rd          rd      rd     rd          rd             rd              rd
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app




SQL    SQL          SQL     SQL   SQL         SQL

sql     sql         sql     sql   sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd

 rd     rd          rd      rd     rd          rd             rd              rd
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app        app    app    app   app   app

app   app     app     app   app   app        app        app        app        app        app    app    app   app   app

app   app     app     app   app   app        app        app        app        app        app    app    app   app   app

app   app     app     app   app   app        app        app        app        app        app    app    app   app   app

app   app     app     app   app   app        app        app        app        app        app    app    app   app   app

app   app     app     app   app   app        app        app        app        app        app    app    app   app   app

app   app     app     app   app   app        app        app        app        app    SQL
                                                                                      app       app    app   app   app



                                                                     EBS           EBS    EBS    EBS
SQL    SQL          SQL     SQL   SQL         SQL

sql     sql         sql     sql   sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd

 rd     rd          rd      rd     rd          rd             rd              rd
lb   app   app

          lb   app   app
Browser                    SQL   EBS
          lb   app   app

          lb   app   app
lb   app   app

          lb   app   app
Browser                    SQL   EBS
          lb   app   app

          lb   app   app
lb   app   app

          lb   app   app
Browser                    SQL   EBS
          lb   app   app

          lb   app   app
lb   app   app

          lb   app   app
Browser                    SQL   EBS
          lb   app   app

          lb   app   app
lb   app   app

          lb   app   app
Browser                    SQL   EBS
          lb   app   app

          lb   app   app
lb   app   app

          lb   app   app
Browser                    SQL   EBS
          lb   app   app

          lb   app   app
lb   app   app

          lb   app   app
Browser                    SQL   EBS
          lb   app   app

          lb   app   app
lb   app   app

          lb   app   app
Browser                    SQL   EBS
          lb   app   app

          lb   app   app
2,000,000"




1,500,000"




1,000,000"




 500,000"




        0"
        Apr*10"   Jul*10"   Oct*10"   Jan*11"   Apr*11"   Jul*11"   Oct*11"
2,000,000"




1,500,000"




1,000,000"



                                         AWS  outage
 500,000"
                                          in  Ireland

        0"
        Apr*10"   Jul*10"   Oct*10"   Jan*11"   Apr*11"   Jul*11"   Oct*11"
http://en.wikipedia.org/wiki/File:St%C3%B6wer_Titanic.jpg
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app

app   app     app     app   app   app        app        app        app        app   app   app   app   app   app




SQL    SQL          SQL     SQL   SQL         SQL

sql     sql         sql     sql   sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd

 rd     rd          rd      rd     rd          rd             rd              rd
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app




SQL    SQL          SQL     SQL   SQL         SQL                         SQL       SQL    SQL     SQL       SQL

sql     sql         sql     sql   sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd

 rd     rd          rd      rd     rd          rd             rd              rd
Installed in 3 years:
Installed in 3 years:

98 MySQL machines
Installed in 3 years:

98 MySQL machines

195 Redis machines
2012/2013
Refactoring
Lessons learned
Server   Database
Server   Database
Server   Database
Server   Database
Server   Database
Server   Database
Server   Database
Server   Database
Server   Database
Server                      Database




         One Game Session
Server                      Database




         One Game Session
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app




SQL    SQL          SQL     SQL   SQL         SQL                         SQL       SQL    SQL     SQL       SQL

sql     sql         sql     sql   sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd

 rd     rd          rd      rd     rd          rd             rd              rd
lb         lb         lb         lb



app   app   app   app   app   app        app        app        app        app   app   app   app   app   app

app   app   app   app   app   app        app        app        app        app   app   app   app   app   app

app   app   app   app   app   app        app        app        app        app   app   app   app   app   app

app   app   app   app   app   app        app        app        app        app   app   app   app   app   app

app   app   app   app   app   app        app        app        app        app   app   app   app   app   app

app   app   app   app   app   app        app        app        app        app   app   app   app   app   app

app   app   app   app   app   app        app        app        app        app   app   app   app   app   app




                                           Rd

                                           rd
lb         lb         lb         lb




     app        app        app




       Rd

       rd
1. Separate user and world DBs
1. Separate user and world DBs

2. Migrate to JRuby
1. Separate user and world DBs

2. Migrate to JRuby

3. Introduce life cycle
1. Separate user and world DBs

2. Migrate to JRuby

3. Introduce life cycle

4. Remove (user) DBs
1. Separate user and world DBs

2. Migrate to JRuby

3. Introduce life cycle

4. Remove (user) DBs

5. Enjoy!
Separate user DBs
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app




SQL    SQL          SQL     SQL   SQL         SQL                                   SQL    SQL     SQL       SQL

sql     sql         sql     sql   sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd    Rd

 rd     rd          rd      rd     rd          rd             rd              rd    rd
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app




SQL    SQL          SQL     SQL   SQL         SQL         SQL                       SQL    SQL     SQL       SQL

sql     sql         sql     sql   sql          sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd    Rd

 rd     rd          rd      rd     rd          rd             rd              rd    rd
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app




SQL    SQL          SQL     SQL   SQL         SQL         SQL             SQL       SQL    SQL     SQL       SQL

sql     sql         sql     sql   sql          sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd    Rd

 rd     rd          rd      rd     rd          rd             rd              rd    rd
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app




SQL    SQL          SQL     SQL   SQL         SQL         SQL             SQL       SQL    SQL     SQL        SQL

sql     sql         sql     sql   sql          sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd    Rd      Rd         Rd

 rd     rd          rd      rd     rd          rd             rd              rd     rd     rd         rd
JRuby
http://www.flickr.com/photos/biblicone/3425903181/sizes/l/in/photostream/
JRuby v2
Throughput
200




150




100




 50




  0
      Rails 2.3.11
      MRI 1.8.7
Throughput
200




150




100




 50




  0
      Rails 2.3.11   Rails 3.2.8
      MRI 1.8.7      MRI 1.8.7
Throughput
200




150




100




 50




  0
      Rails 2.3.11   Rails 3.2.8   Rails 3.2.8
      MRI 1.8.7      MRI 1.8.7     MRI 1.9.3
Throughput
200




150




100




 50




  0
      Rails 2.3.11   Rails 3.2.8   Rails 3.2.8   Rails 3.2.8
      MRI 1.8.7      MRI 1.8.7     MRI 1.9.3     JRuby 1.7.2
Throughput
200



                      a rk
150
                  c hm
            ben
      n   o
100




 50




  0
      Rails 2.3.11   Rails 3.2.8   Rails 3.2.8   Rails 3.2.8
      MRI 1.8.7      MRI 1.8.7     MRI 1.9.3     JRuby 1.7.2
Throughput
200



                      a rk
150
                  c hm
            ben
      n   o
100




 50




  0
      Rails 2.3.11   Rails 3.2.8   Rails 3.2.8   Rails 3.2.8
      MRI 1.8.7      MRI 1.8.7     MRI 1.9.3     JRuby 1.7.2
Throughput
200



                      a rk
150
                  c hm
            ben
      n   o
100

                                                   multi
                                                 threaded
 50




  0
      Rails 2.3.11   Rails 3.2.8   Rails 3.2.8   Rails 3.2.8
      MRI 1.8.7      MRI 1.8.7     MRI 1.9.3     JRuby 1.7.2
Throughput
200



                      a rk
150
                  c hm
            ben                                    tuning
      n   o
100

                                                   multi
                                                 threaded
 50




  0
      Rails 2.3.11   Rails 3.2.8   Rails 3.2.8   Rails 3.2.8
      MRI 1.8.7      MRI 1.8.7     MRI 1.9.3     JRuby 1.7.2
Throughput
200
                                                    cpu

                      a rk                       saturation
150
                  c hm
            ben                                    tuning
      n   o
100

                                                   multi
                                                 threaded
 50




  0
      Rails 2.3.11   Rails 3.2.8   Rails 3.2.8   Rails 3.2.8
      MRI 1.8.7      MRI 1.8.7     MRI 1.9.3     JRuby 1.7.2
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app




SQL    SQL          SQL     SQL   SQL         SQL                         SQL       SQL    SQL     SQL       SQL

sql     sql         sql     sql   sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd

 rd     rd          rd      rd     rd          rd             rd              rd
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app

app   app     app     app   app   app        app        app        app        app   app   app    app   app    app




SQL    SQL          SQL     SQL   SQL         SQL                         SQL       SQL    SQL     SQL       SQL

sql     sql         sql     sql   sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd

 rd     rd          rd      rd     rd          rd             rd              rd
NEW   OLD
NEW   OLD
NEW   OLD
NEW   OLD
Life cycle
app
app
servlet




 app
servlet   archiver




 app
servlet   archiver

                      User
 app
                     Registry
servlet   archiver

                      User
 app
                     Registry




  S3
servlet        archiver

                             User
      app
                            Registry




SQL         Rd




      S3
servlet        archiver

                             User
      app
                            Registry




SQL         Rd




      S3
servlet        archiver

                             User
      app
                            Registry



                             World
SQL         Rd
                             Data




      S3
Load Balancer




  servlet        archiver

                                  User
      app
                                 Registry



                                  World
SQL         Rd
                                  Data




      S3
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app




SQL    SQL          SQL     SQL   SQL         SQL         SQL             SQL       SQL    SQL     SQL        SQL

sql     sql         sql     sql   sql          sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd    Rd      Rd         Rd

 rd     rd          rd      rd     rd          rd             rd              rd     rd     rd         rd
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app




SQL    SQL          SQL     SQL   SQL         SQL         SQL             SQL       SQL    SQL     SQL        SQL

sql     sql         sql     sql   sql          sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd    Rd      Rd         Rd     Rd

 rd     rd          rd      rd     rd          rd             rd              rd     rd     rd         rd     rd
Removing DBs
lb         lb         lb         lb



app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app

app   app     app     app   app   app        app        app        app        app   app   app    app    app    app




SQL    SQL          SQL     SQL   SQL         SQL         SQL             SQL       SQL    SQL     SQL        SQL

sql     sql         sql     sql   sql          sql

Rd      Rd          Rd      Rd    Rd           Rd             Rd              Rd    Rd      Rd         Rd     Rd

 rd     rd          rd      rd     rd          rd             rd              rd     rd     rd         rd     rd
lb         lb         lb         lb



app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app




                              SQL         SQL         SQL             SQL

                              sql          sql

                                                          Rd              Rd    Rd      Rd         Rd     Rd

                                                          rd              rd     rd     rd         rd     rd
lb         lb         lb         lb



app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app




                              SQL         SQL                         SQL

                              sql          sql

                                                          Rd              Rd    Rd      Rd         Rd     Rd

                                                          rd              rd     rd     rd         rd     rd
Enjoy
lb         lb         lb         lb



app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app




                              SQL         SQL                         SQL

                              sql          sql

                                                          Rd              Rd    Rd      Rd         Rd     Rd

                                                          rd              rd     rd     rd         rd     rd
lb         lb         lb         lb



app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app




                              SQL                                     SQL

                              sql

                                                          Rd              Rd    Rd      Rd         Rd     Rd

                                                          rd              rd     rd     rd         rd     rd
lb         lb         lb         lb



app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app

app   app   app   app   app   app        app        app        app        app   app   app    app    app   app




                                                          Rd              Rd    Rd      Rd         Rd     Rd

                                                          rd              rd     rd     rd         rd     rd
http://www.flickr.com/photos/aigle_dore/
http://www.flickr.com/photos/aigle_dore/
Looking Back
What is the right
software stack?
What is the right
software stack?
What is the right
software stack?
What kind of application
   are we building?
User
User




Avatar
User




                 Cus-
Avatar
                tomer
User




                   Cus-
Avatar   Garden
                  tomer
User




                               Cus-
Avatar     Garden
                              tomer




      Deco-
                      Tiles
     rations
User




                               Cus-
Avatar     Garden
                              tomer




      Deco-
                      Tiles
     rations
User                                  User




                               Cus-                                  Cus-
Avatar     Garden                     Avatar     Garden
                              tomer                                 tomer




      Deco-                                 Deco-
                      Tiles                                 Tiles
     rations                               rations
User                                  User




                               Cus-                                  Cus-
Avatar     Garden                     Avatar     Garden
                              tomer                                 tomer




      Deco-                                 Deco-
                      Tiles                                 Tiles
     rations                               rations
http://en.wikipedia.org/wiki/File:Columbus_Breaking_the_Egg%27_(Christopher_Columbus)_by_William_Hogarth.jpg
http://en.wikipedia.org/wiki/File:Columbus_Breaking_the_Egg%27_(Christopher_Columbus)_by_William_Hogarth.jpg
http://en.wikipedia.org/wiki/File:Columbus_Breaking_the_Egg%27_(Christopher_Columbus)_by_William_Hogarth.jpg
http://en.wikipedia.org/wiki/File:Columbus_Breaking_the_Egg%27_(Christopher_Columbus)_by_William_Hogarth.jpg
http://en.wikipedia.org/wiki/File:Columbus_Breaking_the_Egg%27_(Christopher_Columbus)_by_William_Hogarth.jpg
What kind of application
   are we building?
Plain File System
Handle state
the right way!
Lesson 3:

Software is easy,
  data is hard!
Lesson 2:

You will make
  mistakes!
Lesson 1:

Always check back
   on reality!
Lesson 1:

 Always check back
on your assumptions!
Thank you
Jesper Richter-Reichhelm

        @jrirei



    woo.ga/backend

    wooga.com/jobs
Jesper Richter-Reichhelm
          @jrirei

    wooga.com/jobs
    woo.ga/backend

Contenu connexe

En vedette

Stateful Application Server_JRubyConf13_Lukas Rieder
Stateful Application Server_JRubyConf13_Lukas RiederStateful Application Server_JRubyConf13_Lukas Rieder
Stateful Application Server_JRubyConf13_Lukas RiederWooga
 
NoSQL Games_NoSQL Roadshow Berlin
NoSQL Games_NoSQL Roadshow BerlinNoSQL Games_NoSQL Roadshow Berlin
NoSQL Games_NoSQL Roadshow BerlinWooga
 
Games for the Masses: Scaling Rails to the Extreme
Games for the Masses: Scaling Rails to the ExtremeGames for the Masses: Scaling Rails to the Extreme
Games for the Masses: Scaling Rails to the ExtremeWooga
 
Metrics. Driven. Design. (Developer Conference Hamburg 2012)
Metrics. Driven. Design. (Developer Conference Hamburg 2012)Metrics. Driven. Design. (Developer Conference Hamburg 2012)
Metrics. Driven. Design. (Developer Conference Hamburg 2012)Wooga
 
Event Stream Processing with Kafka (Berlin Buzzwords 2012)
Event Stream Processing with Kafka (Berlin Buzzwords 2012)Event Stream Processing with Kafka (Berlin Buzzwords 2012)
Event Stream Processing with Kafka (Berlin Buzzwords 2012)Wooga
 
How to scale a company - game teams at Wooga
How to scale a company - game teams at WoogaHow to scale a company - game teams at Wooga
How to scale a company - game teams at WoogaWooga
 
2013 04-29-evolution of backend
2013 04-29-evolution of backend2013 04-29-evolution of backend
2013 04-29-evolution of backendWooga
 
More than syntax
More than syntaxMore than syntax
More than syntaxWooga
 
Stateful_Application_Server_RuPy 2012_Brno
Stateful_Application_Server_RuPy 2012_BrnoStateful_Application_Server_RuPy 2012_Brno
Stateful_Application_Server_RuPy 2012_BrnoWooga
 
You are not alone - Scaling multiplayer games
You are not alone - Scaling multiplayer gamesYou are not alone - Scaling multiplayer games
You are not alone - Scaling multiplayer gamesWooga
 
Continuous Integration for iOS (iOS User Group Berlin)
Continuous Integration for iOS (iOS User Group Berlin)Continuous Integration for iOS (iOS User Group Berlin)
Continuous Integration for iOS (iOS User Group Berlin)Wooga
 
Stealing Your Heart, Eating your Brain_Casual Connect-Hamburg_2013
Stealing Your Heart, Eating your Brain_Casual Connect-Hamburg_2013Stealing Your Heart, Eating your Brain_Casual Connect-Hamburg_2013
Stealing Your Heart, Eating your Brain_Casual Connect-Hamburg_2013Wooga
 
NoSQL Games
NoSQL GamesNoSQL Games
NoSQL GamesWooga
 
From Keyboards to Fingertips_Casual Connect HH_2013_Jens Begemann
From Keyboards to Fingertips_Casual Connect HH_2013_Jens BegemannFrom Keyboards to Fingertips_Casual Connect HH_2013_Jens Begemann
From Keyboards to Fingertips_Casual Connect HH_2013_Jens BegemannWooga
 
Monitoring with Syslog and EventMachine
Monitoring with Syslog and EventMachineMonitoring with Syslog and EventMachine
Monitoring with Syslog and EventMachineWooga
 
"Common Sense" instead of "Command and Control"_Start up Camp 2013
"Common Sense" instead of "Command and Control"_Start up Camp 2013"Common Sense" instead of "Command and Control"_Start up Camp 2013
"Common Sense" instead of "Command and Control"_Start up Camp 2013Wooga
 
Riak at Wooga_Riak Meetup Sept 2013
Riak at Wooga_Riak Meetup Sept 2013Riak at Wooga_Riak Meetup Sept 2013
Riak at Wooga_Riak Meetup Sept 2013Wooga
 

En vedette (17)

Stateful Application Server_JRubyConf13_Lukas Rieder
Stateful Application Server_JRubyConf13_Lukas RiederStateful Application Server_JRubyConf13_Lukas Rieder
Stateful Application Server_JRubyConf13_Lukas Rieder
 
NoSQL Games_NoSQL Roadshow Berlin
NoSQL Games_NoSQL Roadshow BerlinNoSQL Games_NoSQL Roadshow Berlin
NoSQL Games_NoSQL Roadshow Berlin
 
Games for the Masses: Scaling Rails to the Extreme
Games for the Masses: Scaling Rails to the ExtremeGames for the Masses: Scaling Rails to the Extreme
Games for the Masses: Scaling Rails to the Extreme
 
Metrics. Driven. Design. (Developer Conference Hamburg 2012)
Metrics. Driven. Design. (Developer Conference Hamburg 2012)Metrics. Driven. Design. (Developer Conference Hamburg 2012)
Metrics. Driven. Design. (Developer Conference Hamburg 2012)
 
Event Stream Processing with Kafka (Berlin Buzzwords 2012)
Event Stream Processing with Kafka (Berlin Buzzwords 2012)Event Stream Processing with Kafka (Berlin Buzzwords 2012)
Event Stream Processing with Kafka (Berlin Buzzwords 2012)
 
How to scale a company - game teams at Wooga
How to scale a company - game teams at WoogaHow to scale a company - game teams at Wooga
How to scale a company - game teams at Wooga
 
2013 04-29-evolution of backend
2013 04-29-evolution of backend2013 04-29-evolution of backend
2013 04-29-evolution of backend
 
More than syntax
More than syntaxMore than syntax
More than syntax
 
Stateful_Application_Server_RuPy 2012_Brno
Stateful_Application_Server_RuPy 2012_BrnoStateful_Application_Server_RuPy 2012_Brno
Stateful_Application_Server_RuPy 2012_Brno
 
You are not alone - Scaling multiplayer games
You are not alone - Scaling multiplayer gamesYou are not alone - Scaling multiplayer games
You are not alone - Scaling multiplayer games
 
Continuous Integration for iOS (iOS User Group Berlin)
Continuous Integration for iOS (iOS User Group Berlin)Continuous Integration for iOS (iOS User Group Berlin)
Continuous Integration for iOS (iOS User Group Berlin)
 
Stealing Your Heart, Eating your Brain_Casual Connect-Hamburg_2013
Stealing Your Heart, Eating your Brain_Casual Connect-Hamburg_2013Stealing Your Heart, Eating your Brain_Casual Connect-Hamburg_2013
Stealing Your Heart, Eating your Brain_Casual Connect-Hamburg_2013
 
NoSQL Games
NoSQL GamesNoSQL Games
NoSQL Games
 
From Keyboards to Fingertips_Casual Connect HH_2013_Jens Begemann
From Keyboards to Fingertips_Casual Connect HH_2013_Jens BegemannFrom Keyboards to Fingertips_Casual Connect HH_2013_Jens Begemann
From Keyboards to Fingertips_Casual Connect HH_2013_Jens Begemann
 
Monitoring with Syslog and EventMachine
Monitoring with Syslog and EventMachineMonitoring with Syslog and EventMachine
Monitoring with Syslog and EventMachine
 
"Common Sense" instead of "Command and Control"_Start up Camp 2013
"Common Sense" instead of "Command and Control"_Start up Camp 2013"Common Sense" instead of "Command and Control"_Start up Camp 2013
"Common Sense" instead of "Command and Control"_Start up Camp 2013
 
Riak at Wooga_Riak Meetup Sept 2013
Riak at Wooga_Riak Meetup Sept 2013Riak at Wooga_Riak Meetup Sept 2013
Riak at Wooga_Riak Meetup Sept 2013
 

Similaire à Painful success - lessons learned while scaling up

My sql replication advanced techniques presentation
My sql replication advanced techniques presentationMy sql replication advanced techniques presentation
My sql replication advanced techniques presentationepee
 
MongoDB and AWS Best Practices
MongoDB and AWS Best PracticesMongoDB and AWS Best Practices
MongoDB and AWS Best PracticesMongoDB
 
Mater,slave on mysql
Mater,slave on mysqlMater,slave on mysql
Mater,slave on mysqlVasudeva Rao
 
Innovation dank DevOps (DevOpsCon Berlin 2015)
Innovation dank DevOps (DevOpsCon Berlin 2015)Innovation dank DevOps (DevOpsCon Berlin 2015)
Innovation dank DevOps (DevOpsCon Berlin 2015)Wooga
 
Clearly, I Have Made Some Bad Decisions
Clearly, I Have Made Some Bad DecisionsClearly, I Have Made Some Bad Decisions
Clearly, I Have Made Some Bad DecisionsJonathan Hitchcock
 
Building a High-Volume Reporting System on Amazon AWS with MySQL, Tungsten, a...
Building a High-Volume Reporting System on Amazon AWS with MySQL, Tungsten, a...Building a High-Volume Reporting System on Amazon AWS with MySQL, Tungsten, a...
Building a High-Volume Reporting System on Amazon AWS with MySQL, Tungsten, a...Jeff Malek
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기OnGameServer
 
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...Chef
 
Performance Tuning for Pirates!
Performance Tuning for Pirates!Performance Tuning for Pirates!
Performance Tuning for Pirates!John Sterrett
 
Monkeybars in the Manor
Monkeybars in the ManorMonkeybars in the Manor
Monkeybars in the Manormartinbtt
 
Architecting cloud
Architecting cloudArchitecting cloud
Architecting cloudTahsin Hasan
 
DB Replication With Rails
DB Replication With RailsDB Replication With Rails
DB Replication With Railsschoefmax
 
MySQL Replication Update -- Zendcon 2016
MySQL Replication Update -- Zendcon 2016MySQL Replication Update -- Zendcon 2016
MySQL Replication Update -- Zendcon 2016Dave Stokes
 
Mitchell Hashimoto, HashiCorp
Mitchell Hashimoto, HashiCorpMitchell Hashimoto, HashiCorp
Mitchell Hashimoto, HashiCorpOntico
 
Games for the Masses (Jax)
Games for the Masses (Jax)Games for the Masses (Jax)
Games for the Masses (Jax)Wooga
 
Scaling a Web Service
Scaling a Web ServiceScaling a Web Service
Scaling a Web ServiceLeon Ho
 

Similaire à Painful success - lessons learned while scaling up (20)

My sql replication advanced techniques presentation
My sql replication advanced techniques presentationMy sql replication advanced techniques presentation
My sql replication advanced techniques presentation
 
Dbm 438 week 6 ilab
Dbm 438 week 6 ilabDbm 438 week 6 ilab
Dbm 438 week 6 ilab
 
MongoDB and AWS Best Practices
MongoDB and AWS Best PracticesMongoDB and AWS Best Practices
MongoDB and AWS Best Practices
 
Mater,slave on mysql
Mater,slave on mysqlMater,slave on mysql
Mater,slave on mysql
 
Innovation dank DevOps (DevOpsCon Berlin 2015)
Innovation dank DevOps (DevOpsCon Berlin 2015)Innovation dank DevOps (DevOpsCon Berlin 2015)
Innovation dank DevOps (DevOpsCon Berlin 2015)
 
Mysql S&M
Mysql S&MMysql S&M
Mysql S&M
 
Clearly, I Have Made Some Bad Decisions
Clearly, I Have Made Some Bad DecisionsClearly, I Have Made Some Bad Decisions
Clearly, I Have Made Some Bad Decisions
 
Machinist
MachinistMachinist
Machinist
 
Building a High-Volume Reporting System on Amazon AWS with MySQL, Tungsten, a...
Building a High-Volume Reporting System on Amazon AWS with MySQL, Tungsten, a...Building a High-Volume Reporting System on Amazon AWS with MySQL, Tungsten, a...
Building a High-Volume Reporting System on Amazon AWS with MySQL, Tungsten, a...
 
Sysops cu Chef
Sysops cu ChefSysops cu Chef
Sysops cu Chef
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기
 
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
 
Performance Tuning for Pirates!
Performance Tuning for Pirates!Performance Tuning for Pirates!
Performance Tuning for Pirates!
 
Monkeybars in the Manor
Monkeybars in the ManorMonkeybars in the Manor
Monkeybars in the Manor
 
Architecting cloud
Architecting cloudArchitecting cloud
Architecting cloud
 
DB Replication With Rails
DB Replication With RailsDB Replication With Rails
DB Replication With Rails
 
MySQL Replication Update -- Zendcon 2016
MySQL Replication Update -- Zendcon 2016MySQL Replication Update -- Zendcon 2016
MySQL Replication Update -- Zendcon 2016
 
Mitchell Hashimoto, HashiCorp
Mitchell Hashimoto, HashiCorpMitchell Hashimoto, HashiCorp
Mitchell Hashimoto, HashiCorp
 
Games for the Masses (Jax)
Games for the Masses (Jax)Games for the Masses (Jax)
Games for the Masses (Jax)
 
Scaling a Web Service
Scaling a Web ServiceScaling a Web Service
Scaling a Web Service
 

Plus de Wooga

Story of Warlords: Bringing a turn-based strategy game to mobile
Story of Warlords: Bringing a turn-based strategy game to mobile Story of Warlords: Bringing a turn-based strategy game to mobile
Story of Warlords: Bringing a turn-based strategy game to mobile Wooga
 
Instagram Celebrities: are they the new cats? - Targetsummit Berlin 2015
Instagram Celebrities: are they the new cats? - Targetsummit Berlin 2015Instagram Celebrities: are they the new cats? - Targetsummit Berlin 2015
Instagram Celebrities: are they the new cats? - Targetsummit Berlin 2015Wooga
 
In it for the long haul - How Wooga boosts long-term retention
In it for the long haul - How Wooga boosts long-term retentionIn it for the long haul - How Wooga boosts long-term retention
In it for the long haul - How Wooga boosts long-term retentionWooga
 
Leveling up in localization! - Susan Alma & Dario Quondamstefano
Leveling up in localization! - Susan Alma & Dario QuondamstefanoLeveling up in localization! - Susan Alma & Dario Quondamstefano
Leveling up in localization! - Susan Alma & Dario QuondamstefanoWooga
 
Evoloution of Ideas
Evoloution of IdeasEvoloution of Ideas
Evoloution of IdeasWooga
 
Entitas System Architecture with Unity - Maxim Zaks and Simon Schmid
Entitas System Architecture with Unity - Maxim Zaks and Simon Schmid Entitas System Architecture with Unity - Maxim Zaks and Simon Schmid
Entitas System Architecture with Unity - Maxim Zaks and Simon Schmid Wooga
 
Saying No to the CEO: A Deep Look at Independent Teams - Adam Telfer
Saying No to the CEO: A Deep Look at Independent Teams - Adam TelferSaying No to the CEO: A Deep Look at Independent Teams - Adam Telfer
Saying No to the CEO: A Deep Look at Independent Teams - Adam TelferWooga
 
Big Fish, small pond - strategies for surviving in a maturing market - Ed Biden
Big Fish, small pond - strategies for surviving in a maturing market - Ed BidenBig Fish, small pond - strategies for surviving in a maturing market - Ed Biden
Big Fish, small pond - strategies for surviving in a maturing market - Ed BidenWooga
 
Review mining aps2014 berlin
Review mining aps2014 berlinReview mining aps2014 berlin
Review mining aps2014 berlinWooga
 
Riak & Wooga_Geeek2Geeek Meetup2014 Berlin
Riak & Wooga_Geeek2Geeek Meetup2014 BerlinRiak & Wooga_Geeek2Geeek Meetup2014 Berlin
Riak & Wooga_Geeek2Geeek Meetup2014 BerlinWooga
 
Staying in the Game: Game localization practices for the mobile market
Staying in the Game: Game localization practices for the mobile marketStaying in the Game: Game localization practices for the mobile market
Staying in the Game: Game localization practices for the mobile marketWooga
 
Startup Weekend_Makers and Games_Philipp Stelzer
Startup Weekend_Makers and Games_Philipp StelzerStartup Weekend_Makers and Games_Philipp Stelzer
Startup Weekend_Makers and Games_Philipp StelzerWooga
 
DevOps goes Mobile (daho.am)
DevOps goes Mobile (daho.am)DevOps goes Mobile (daho.am)
DevOps goes Mobile (daho.am)Wooga
 
DevOps goes Mobile - Jax 2014 - Jesper Richter-Reichhelm
DevOps goes Mobile - Jax 2014 - Jesper Richter-ReichhelmDevOps goes Mobile - Jax 2014 - Jesper Richter-Reichhelm
DevOps goes Mobile - Jax 2014 - Jesper Richter-ReichhelmWooga
 
CodeFest 2014_Mobile Game Development
CodeFest 2014_Mobile Game DevelopmentCodeFest 2014_Mobile Game Development
CodeFest 2014_Mobile Game DevelopmentWooga
 
Jelly Splash: Puzzling your way to the top of the App Stores - GDC 2014
Jelly Splash: Puzzling your way to the top of the App Stores - GDC 2014Jelly Splash: Puzzling your way to the top of the App Stores - GDC 2014
Jelly Splash: Puzzling your way to the top of the App Stores - GDC 2014Wooga
 
How to hire the best people for your startup-Gitta Blat-Head of People
How to hire the best people for your startup-Gitta Blat-Head of PeopleHow to hire the best people for your startup-Gitta Blat-Head of People
How to hire the best people for your startup-Gitta Blat-Head of PeopleWooga
 
Two Ann(e)s and one Julia_Wooga Lady Power from Berlin_SGA2014
Two Ann(e)s and one Julia_Wooga Lady Power from Berlin_SGA2014Two Ann(e)s and one Julia_Wooga Lady Power from Berlin_SGA2014
Two Ann(e)s and one Julia_Wooga Lady Power from Berlin_SGA2014Wooga
 
Pocket Gamer Connects 2014_The Experience of Entering the Korean Market
Pocket Gamer Connects 2014_The Experience of Entering the Korean MarketPocket Gamer Connects 2014_The Experience of Entering the Korean Market
Pocket Gamer Connects 2014_The Experience of Entering the Korean MarketWooga
 
How to stand out in a hit driven business - Game Connection Paris 2013 - SebK...
How to stand out in a hit driven business - Game Connection Paris 2013 - SebK...How to stand out in a hit driven business - Game Connection Paris 2013 - SebK...
How to stand out in a hit driven business - Game Connection Paris 2013 - SebK...Wooga
 

Plus de Wooga (20)

Story of Warlords: Bringing a turn-based strategy game to mobile
Story of Warlords: Bringing a turn-based strategy game to mobile Story of Warlords: Bringing a turn-based strategy game to mobile
Story of Warlords: Bringing a turn-based strategy game to mobile
 
Instagram Celebrities: are they the new cats? - Targetsummit Berlin 2015
Instagram Celebrities: are they the new cats? - Targetsummit Berlin 2015Instagram Celebrities: are they the new cats? - Targetsummit Berlin 2015
Instagram Celebrities: are they the new cats? - Targetsummit Berlin 2015
 
In it for the long haul - How Wooga boosts long-term retention
In it for the long haul - How Wooga boosts long-term retentionIn it for the long haul - How Wooga boosts long-term retention
In it for the long haul - How Wooga boosts long-term retention
 
Leveling up in localization! - Susan Alma & Dario Quondamstefano
Leveling up in localization! - Susan Alma & Dario QuondamstefanoLeveling up in localization! - Susan Alma & Dario Quondamstefano
Leveling up in localization! - Susan Alma & Dario Quondamstefano
 
Evoloution of Ideas
Evoloution of IdeasEvoloution of Ideas
Evoloution of Ideas
 
Entitas System Architecture with Unity - Maxim Zaks and Simon Schmid
Entitas System Architecture with Unity - Maxim Zaks and Simon Schmid Entitas System Architecture with Unity - Maxim Zaks and Simon Schmid
Entitas System Architecture with Unity - Maxim Zaks and Simon Schmid
 
Saying No to the CEO: A Deep Look at Independent Teams - Adam Telfer
Saying No to the CEO: A Deep Look at Independent Teams - Adam TelferSaying No to the CEO: A Deep Look at Independent Teams - Adam Telfer
Saying No to the CEO: A Deep Look at Independent Teams - Adam Telfer
 
Big Fish, small pond - strategies for surviving in a maturing market - Ed Biden
Big Fish, small pond - strategies for surviving in a maturing market - Ed BidenBig Fish, small pond - strategies for surviving in a maturing market - Ed Biden
Big Fish, small pond - strategies for surviving in a maturing market - Ed Biden
 
Review mining aps2014 berlin
Review mining aps2014 berlinReview mining aps2014 berlin
Review mining aps2014 berlin
 
Riak & Wooga_Geeek2Geeek Meetup2014 Berlin
Riak & Wooga_Geeek2Geeek Meetup2014 BerlinRiak & Wooga_Geeek2Geeek Meetup2014 Berlin
Riak & Wooga_Geeek2Geeek Meetup2014 Berlin
 
Staying in the Game: Game localization practices for the mobile market
Staying in the Game: Game localization practices for the mobile marketStaying in the Game: Game localization practices for the mobile market
Staying in the Game: Game localization practices for the mobile market
 
Startup Weekend_Makers and Games_Philipp Stelzer
Startup Weekend_Makers and Games_Philipp StelzerStartup Weekend_Makers and Games_Philipp Stelzer
Startup Weekend_Makers and Games_Philipp Stelzer
 
DevOps goes Mobile (daho.am)
DevOps goes Mobile (daho.am)DevOps goes Mobile (daho.am)
DevOps goes Mobile (daho.am)
 
DevOps goes Mobile - Jax 2014 - Jesper Richter-Reichhelm
DevOps goes Mobile - Jax 2014 - Jesper Richter-ReichhelmDevOps goes Mobile - Jax 2014 - Jesper Richter-Reichhelm
DevOps goes Mobile - Jax 2014 - Jesper Richter-Reichhelm
 
CodeFest 2014_Mobile Game Development
CodeFest 2014_Mobile Game DevelopmentCodeFest 2014_Mobile Game Development
CodeFest 2014_Mobile Game Development
 
Jelly Splash: Puzzling your way to the top of the App Stores - GDC 2014
Jelly Splash: Puzzling your way to the top of the App Stores - GDC 2014Jelly Splash: Puzzling your way to the top of the App Stores - GDC 2014
Jelly Splash: Puzzling your way to the top of the App Stores - GDC 2014
 
How to hire the best people for your startup-Gitta Blat-Head of People
How to hire the best people for your startup-Gitta Blat-Head of PeopleHow to hire the best people for your startup-Gitta Blat-Head of People
How to hire the best people for your startup-Gitta Blat-Head of People
 
Two Ann(e)s and one Julia_Wooga Lady Power from Berlin_SGA2014
Two Ann(e)s and one Julia_Wooga Lady Power from Berlin_SGA2014Two Ann(e)s and one Julia_Wooga Lady Power from Berlin_SGA2014
Two Ann(e)s and one Julia_Wooga Lady Power from Berlin_SGA2014
 
Pocket Gamer Connects 2014_The Experience of Entering the Korean Market
Pocket Gamer Connects 2014_The Experience of Entering the Korean MarketPocket Gamer Connects 2014_The Experience of Entering the Korean Market
Pocket Gamer Connects 2014_The Experience of Entering the Korean Market
 
How to stand out in a hit driven business - Game Connection Paris 2013 - SebK...
How to stand out in a hit driven business - Game Connection Paris 2013 - SebK...How to stand out in a hit driven business - Game Connection Paris 2013 - SebK...
How to stand out in a hit driven business - Game Connection Paris 2013 - SebK...
 

Dernier

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 

Dernier (20)

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

Painful success - lessons learned while scaling up

  • 1. PAINFUL SUCCESS Jesper Richter-Reichhelm (@jrirei) / session 4853
  • 3.
  • 4.
  • 5.
  • 6. Flash client Backend
  • 7. 7M players / month
  • 8. 7M players / month 10K API calls / second
  • 9. 7M players / month 10K API calls / second 200K DB operations / second
  • 10. 7M players / month 10K API calls / second 200K DB operations / second 100K DB writes / second
  • 11. 7M players / month 10K API calls / second 200K DB operations / second 100K DB writes / second 2 devops since 2009
  • 13.
  • 14.
  • 18.
  • 19.
  • 20. What is the right software stack?
  • 21.
  • 22.
  • 23.
  • 24. Browser lb app app app SQL SQL sql sql
  • 26.
  • 27.
  • 28. 100%# 80%# 60%# 40%# 20%# 0%# 0# 5# 10# 15# 20# 25# 30# 35# 40#
  • 29. 100%# 80%# 60%# 40%# 20%# 0%# 0# 5# 10# 15# 20# 25# 30# 35# 40#
  • 30. 100%# 80%# 60%# 40%# 20%# 0%# 0# 5# 10# 15# 20# 25# 30# 35# 40#
  • 33. Checking connection ‘status’
  • 35. Lesson 1: Always check back on reality!
  • 38. Lot’s of tuning and more memory
  • 40. app 1. create new DBs master master slave slave
  • 41. app 1. create new DBs master master 2. setup replication slave slave
  • 42. app 1. create new DBs master master 2. setup replication slave slave
  • 43. app 1. create new DBs master master 2. setup replication 3. start using masters slave slave
  • 44. app 1. create new DBs master master 2. setup replication 3. start using masters 4. cut replication slave slave
  • 45. app 1. create new DBs master master 2. setup replication 3. start using masters 4. cut replication slave slave 5. remove old DBs
  • 46. app 1. create new DBs master 2. setup replication 3. start using masters 4. cut replication slave 5. remove old DBs
  • 47. app 1. create new DBs master master 2. setup replication 3. start using masters slave slave
  • 48. app 1. create new DBs master master 2. setup replication 3. start using masters 4. remove old DBs slave slave
  • 49. app 1. create new DBs master ? 2. setup replication 3. start using masters 4. remove old DBs slave
  • 50. app 1. create new DBs master 2. setup replication 3. start using masters 4. remove old DBs slave 5. cut replication
  • 51. app 1. create new DBs master master 2. setup replication 3. start using masters slave slave
  • 52. app 1. create new DBs master master 2. setup replication 3. start using masters 4. drop database; slave slave
  • 53. app 1. create new DBs master master 2. setup replication 3. start using masters 4. drop database; slave slave
  • 54. app 1. create new DBs master master 2. setup replication 3. start using masters 4. drop database; slave slave
  • 55. app 1. create new DBs master master 2. setup replication 3. start using masters 4. drop database; slave slave
  • 56. app 1. create new DBs master master 2. setup replication 3. start using masters 4. drop database; slave slave
  • 57. app 1. create new DBs 2. setup replication 3. start using masters 4. drop database;
  • 58. app 1. create new DBs 2. setup replication 3. start using masters 4. drop database; 5. Nooooooooo!
  • 59. app 1. create new DBs 2. setup replication 3. start using masters 4. drop database; 5. Nooooooooo!
  • 60. Lesson 2: You will make mistakes!
  • 62. app 1. create new DBs master master 2. setup replication 3. start using masters 4. cut replication slave slave 5. truncate data
  • 63. app 1. create new DBs master master AB AB 2. setup replication 3. start using masters 4. cut replication slave slave AB AB 5. truncate data
  • 64. app A B 1. create new DBs master master AB AB 2. setup replication 3. start using masters slave slave AB AB
  • 65. app A B 1. create new DBs master master AB AB 2. setup replication 3. start using masters 4. cut replication slave slave AB AB
  • 66. app A B 1. create new DBs master master AB AB 2. setup replication 3. start using masters 4. cut replication slave slave AB AB 5. truncate data
  • 67. app A B 1. create new DBs master master AB AB 2. setup replication 3. start using masters 4. cut replication slave slave AB AB 5. truncate data
  • 68. app master master master master AC BD slave slave slave slave AC BD
  • 69. app master master master master AC BD AC BD slave slave slave slave AC BD AC BD
  • 70. app master master master master AC BD AC BD slave slave slave slave AC BD AC BD
  • 71. app master master master master AC BD AC BD slave slave slave slave AC BD AC BD
  • 73.
  • 74.
  • 75.
  • 76. Lesson 3: Software is easy, data is hard!
  • 77. 44 GB in 8 days 24 GB
  • 79. Not enough memory => no backups
  • 80. Not enough memory => no backups => no new slaves
  • 81. Not enough memory => no backups => no new slaves => big problem
  • 82. 38 GB in 3 days 24 GB
  • 83. v2.2 in ixed F 38 GB in 3 days 24 GB
  • 85. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd
  • 86. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd
  • 87. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL app app app app app EBS EBS EBS EBS SQL SQL SQL SQL SQL SQL sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd
  • 88. lb app app lb app app Browser SQL EBS lb app app lb app app
  • 89. lb app app lb app app Browser SQL EBS lb app app lb app app
  • 90. lb app app lb app app Browser SQL EBS lb app app lb app app
  • 91. lb app app lb app app Browser SQL EBS lb app app lb app app
  • 92. lb app app lb app app Browser SQL EBS lb app app lb app app
  • 93. lb app app lb app app Browser SQL EBS lb app app lb app app
  • 94. lb app app lb app app Browser SQL EBS lb app app lb app app
  • 95. lb app app lb app app Browser SQL EBS lb app app lb app app
  • 96. 2,000,000" 1,500,000" 1,000,000" 500,000" 0" Apr*10" Jul*10" Oct*10" Jan*11" Apr*11" Jul*11" Oct*11"
  • 97. 2,000,000" 1,500,000" 1,000,000" AWS  outage 500,000" in  Ireland 0" Apr*10" Jul*10" Oct*10" Jan*11" Apr*11" Jul*11" Oct*11"
  • 99. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd
  • 100. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd
  • 101.
  • 102. Installed in 3 years:
  • 103. Installed in 3 years: 98 MySQL machines
  • 104. Installed in 3 years: 98 MySQL machines 195 Redis machines
  • 105.
  • 106.
  • 107.
  • 108.
  • 111. Server Database
  • 112. Server Database
  • 113. Server Database
  • 114. Server Database
  • 115. Server Database
  • 116. Server Database
  • 117. Server Database
  • 118. Server Database
  • 119. Server Database
  • 120. Server Database One Game Session
  • 121. Server Database One Game Session
  • 122. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd
  • 123. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app Rd rd
  • 124. lb lb lb lb app app app Rd rd
  • 125.
  • 126. 1. Separate user and world DBs
  • 127. 1. Separate user and world DBs 2. Migrate to JRuby
  • 128. 1. Separate user and world DBs 2. Migrate to JRuby 3. Introduce life cycle
  • 129. 1. Separate user and world DBs 2. Migrate to JRuby 3. Introduce life cycle 4. Remove (user) DBs
  • 130. 1. Separate user and world DBs 2. Migrate to JRuby 3. Introduce life cycle 4. Remove (user) DBs 5. Enjoy!
  • 132. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd rd
  • 133. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd rd
  • 134. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd rd
  • 135. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd rd rd rd
  • 136. JRuby
  • 139. Throughput 200 150 100 50 0 Rails 2.3.11 MRI 1.8.7
  • 140. Throughput 200 150 100 50 0 Rails 2.3.11 Rails 3.2.8 MRI 1.8.7 MRI 1.8.7
  • 141. Throughput 200 150 100 50 0 Rails 2.3.11 Rails 3.2.8 Rails 3.2.8 MRI 1.8.7 MRI 1.8.7 MRI 1.9.3
  • 142. Throughput 200 150 100 50 0 Rails 2.3.11 Rails 3.2.8 Rails 3.2.8 Rails 3.2.8 MRI 1.8.7 MRI 1.8.7 MRI 1.9.3 JRuby 1.7.2
  • 143. Throughput 200 a rk 150 c hm ben n o 100 50 0 Rails 2.3.11 Rails 3.2.8 Rails 3.2.8 Rails 3.2.8 MRI 1.8.7 MRI 1.8.7 MRI 1.9.3 JRuby 1.7.2
  • 144. Throughput 200 a rk 150 c hm ben n o 100 50 0 Rails 2.3.11 Rails 3.2.8 Rails 3.2.8 Rails 3.2.8 MRI 1.8.7 MRI 1.8.7 MRI 1.9.3 JRuby 1.7.2
  • 145. Throughput 200 a rk 150 c hm ben n o 100 multi threaded 50 0 Rails 2.3.11 Rails 3.2.8 Rails 3.2.8 Rails 3.2.8 MRI 1.8.7 MRI 1.8.7 MRI 1.9.3 JRuby 1.7.2
  • 146. Throughput 200 a rk 150 c hm ben tuning n o 100 multi threaded 50 0 Rails 2.3.11 Rails 3.2.8 Rails 3.2.8 Rails 3.2.8 MRI 1.8.7 MRI 1.8.7 MRI 1.9.3 JRuby 1.7.2
  • 147. Throughput 200 cpu a rk saturation 150 c hm ben tuning n o 100 multi threaded 50 0 Rails 2.3.11 Rails 3.2.8 Rails 3.2.8 Rails 3.2.8 MRI 1.8.7 MRI 1.8.7 MRI 1.9.3 JRuby 1.7.2
  • 148. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd
  • 149. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd
  • 150.
  • 151.
  • 152.
  • 153. NEW OLD
  • 154. NEW OLD
  • 155. NEW OLD
  • 156. NEW OLD
  • 158. app
  • 159. app
  • 161. servlet archiver app
  • 162. servlet archiver User app Registry
  • 163. servlet archiver User app Registry S3
  • 164. servlet archiver User app Registry SQL Rd S3
  • 165. servlet archiver User app Registry SQL Rd S3
  • 166. servlet archiver User app Registry World SQL Rd Data S3
  • 167. Load Balancer servlet archiver User app Registry World SQL Rd Data S3
  • 168. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd rd rd rd
  • 169. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd rd rd rd rd
  • 171. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL sql sql sql sql sql sql Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd rd rd rd rd rd rd
  • 172. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL SQL sql sql Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd
  • 173. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL sql sql Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd
  • 174. Enjoy
  • 175. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL SQL sql sql Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd
  • 176. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app SQL SQL sql Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd
  • 177. lb lb lb lb app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app app Rd Rd Rd Rd Rd Rd rd rd rd rd rd rd
  • 181. What is the right software stack?
  • 182.
  • 183.
  • 184. What is the right software stack?
  • 185. What is the right software stack?
  • 186. What kind of application are we building?
  • 187. User
  • 189. User Cus- Avatar tomer
  • 190. User Cus- Avatar Garden tomer
  • 191. User Cus- Avatar Garden tomer Deco- Tiles rations
  • 192. User Cus- Avatar Garden tomer Deco- Tiles rations
  • 193. User User Cus- Cus- Avatar Garden Avatar Garden tomer tomer Deco- Deco- Tiles Tiles rations rations
  • 194. User User Cus- Cus- Avatar Garden Avatar Garden tomer tomer Deco- Deco- Tiles Tiles rations rations
  • 200. What kind of application are we building?
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 207.
  • 209. Lesson 3: Software is easy, data is hard!
  • 210. Lesson 2: You will make mistakes!
  • 211. Lesson 1: Always check back on reality!
  • 212. Lesson 1: Always check back on your assumptions!
  • 214. Jesper Richter-Reichhelm @jrirei woo.ga/backend wooga.com/jobs
  • 215. Jesper Richter-Reichhelm @jrirei wooga.com/jobs woo.ga/backend