SlideShare a Scribd company logo
Getting real with erlang
    From the idea to a live system

      Knut Nesheim @knutin
     Paolo Negri @hungryblank
Social Games
Flash client (game)                                        HTTP API




          http://www.flickr.com/photos/theplanetdotcom/4879421344
Social Games
                            HTTP API



• @ 1 000 000 daily users
• 5000 HTTP reqs/sec
• more than 90% writes
November 2010

• At the erlang user group!
• Learn where/how erlang is used
• 0 lines of erlang code across all
  @wooga code base
Why looking into
               erlang?
                             HTTP API



• @ 1 000 000 daily users
• 5000 HTTP reqs/sec
• around 60000 queries/sec
60000 qps

• Most maintenance effort in databases
• mix of SQL / NoSQL
• Already using in RAM data stores (REDIS)
• RAM DB are fast but expensive / high
  maintenance
Social games data

• User data self contained
• Strong hot/cold pattern - gaming session
• Heavy write load (caching is ineffective)
User session               User data

 1. start session   1. load all
 2. game actions    2. read/update many times
 3. end session     3. data becomes cold
User session         Erlang process

 1. start session   1. start (load state)

 2. game actions    2. responds to messages
                       (use state)
 3. end session
                    3. stop (save state)
User session DB usage

                                 Stateful server
                Stateless server
                                    (Erlang )
start session   load user state load user state
game actions     many queries

end session                      save user state
Erlang process

• Follows session lifecycle
• Contains and defends state (data)
• Acts as a lock/serializer (one message
  at a time)
December 2010
   • Prototype
                          erlang
user1   user2    user3   process   = user session


user4   user5   user6



user7   user8   userN
January 2011
• erlang team goes from 1 to 2 developers
             Open topics
• Distribution/clustering
• Error handling
• Deployments
• Operations
Architecture
Architecture goals
• Move data into the applica4on server
• Be as simple as possible
• Graceful degrada4on when DBs go down
• Easy to inspect and repair state of cluster
• Easy to add more machines for scaling out




                                                15
Session
 Session
  Session




            16
Worker
Session
 Session
  Session




            17
Worker      Worker      Worker
Session
 Session    Session
             Session    Session
                         Session
  Session     Session     Session




                                    18
Worker
                Worker
                 Worker
              Session
               Session
               Session
                Session
                Session
                 Session
                  Session

Coordinator
Coordinator


                            19
Worker
                Worker
                 Worker
              Session
               Session
               Session
                Session
                Session
                 Session
                  Session

Coordinator
Coordinator                 Lock


                                   20
Worker
                Worker
                 Worker
              Session
               Session
               Session
                Session
                Session
                 Session
                  Session

Coordinator
Coordinator                 Lock

                 DBs
                                   21
New user comes online


                  Worker
                   Worker
                    Worker
                 Session
                  Session
                  Session
                   Session
                   Session
                    Session
                     Session
Coordinator

                                      Lock

                     DBs
                                             22
New user comes online


                              Worker
                               Worker
    Flash calls ”setup”
                                Worker
                             Session
                              Session
                              Session
                               Session
                               Session
                                Session
                                 Session
Coordinator

                                                  Lock

                                 DBs
                                                         22
New user comes online


                              Worker
                               Worker
    Flash calls ”setup”
                                Worker
                             Session
                              Session
                              Session
                               Session
                               Session
                                Session
                                 Session
Coordinator
  session:start(Uid)
  on suitable worker                              Lock

                                 DBs
                                                         22
New user comes online


                              Worker
                               Worker
    Flash calls ”setup”
                                Worker
                             Session
                              Session
                              Session
                               Session
                               Session
                                Session
                                 Session
Coordinator
  session:start(Uid)                s3:get(Uid)
  on suitable worker                              Lock

                                 DBs
                                                         22
New user comes online


                              Worker
                               Worker
    Flash calls ”setup”
                                Worker
                             Session
                              Session
                              Session
                               Session
                               Session
                                Session
                                 Session          lock:acquire(Uid)
Coordinator                                       test‐and‐set


  session:start(Uid)                s3:get(Uid)
  on suitable worker                                   Lock

                                 DBs
                                                                      22
New user comes online

                                                         Game ac4ons 

                              Worker
                                                         from Flash

                               Worker
                                Worker
    Flash calls ”setup”
                             Session
                              Session
                              Session
                               Session
                               Session
                                Session
                                 Session          lock:acquire(Uid)
Coordinator                                       test‐and‐set


  session:start(Uid)                s3:get(Uid)
  on suitable worker                                   Lock

                                 DBs
                                                                      22
User goes offline (session 4mes out)


                            Worker
                             Worker
                              Worker
gen_server 4meout
                           Session
                            Session
                            Session
                             Session
                             Session
                              Session
                               Session         lock:release/1



                                  s3:put/1
       Coordinator                                   Lock

                               DBs
                                                                23
Implementa4on of game logic
Dream game logic

Fast              Safe


          +




                         25
Dream game logic




                   26
Dream game logic
• We want high throughput (for scaling)
  – Try to spend as li[le CPU 4me as possible
  – Avoid heavy computa4on
  – Try to avoid crea4ng garbage
• ..and simple and testable logic (correctness)
  – Func4onal game logic makes thinking about code easy
  – Single entry point, gets ”request” and game state
  – Code for happy case, roll back on game‐related excep4on



                                                              27
How we avoid using CPU
• Remove need for DB serializa4on by storing data in 
  process
• Game is designed to avoid heavy licing in the backend, 
  very simple game logic
• Op4mize hot parts on the cri4cal path, like collision 
  detec4on, regrowing of forest
• Generate erlang modules for read‐heavy configura4on 
  (~1 billion reads/1 write per week)
• Use NIFs for parsing JSON (jiffy)

                                                       28
How to find where CPU is used
• Profile (eprof, fprof, kprof[1])
• Measure garbage collec4on (process_info/1, gcprof[2])
• Conduct experiment: change code, measure, repeat
• Is the increased performance worth the increase in 
  complexity?
• Some4mes a radically different approach is needed..


 [1]: github.com/knu4n/kprof
 [2]: github.com/knu4n/gcprof

                                                          29
Opera4ons
August 2011 ‐ ...
Opera4ons
• At wooga, developers also operate the game
• Most developers are ex‐sysadmins
• Simple tools:
 –remsh for deployments, maintenance, debugging
 –automa4on with chef
 –syslog, tail, cut, awk, grep
 –verbose crash logs (SASL)
 –alarms only when something really bad happens

                                                  31
Deployments
• Goal: upgrade without annoying users
• Soc purge
• Set system quiet (webserver & coordinator)
• Reload
• Open the flood gates
• Migrate process memory state on‐demand
• Total 4me not answering game requests: < 1s

                                                32
How we know what’s going on
• Event logging to syslog
  – Session start, session end (process memory, gc, game stats)
  – Game‐related excep4ons
• Latency measurement within the app
• Use munin to pull overall server stats
  – CPU and memory usage by beam.smp
  – Memory used by processes, ets tables, etc
  – Throughput of app, dbs
  – Throughput of coordinator, workers, lock


                                                                  33
How we know what’s going on




Game error: The game ac4on is not allowed with the current server state and configura4on




                                                                                          34
How we know what’s going on




Half‐word emulator




                              35
How we know what’s going on




                              36
How we know what’s going on




                              37
How we know what’s going on




                              38
How we know what’s going on




                              39
Conclusions
Conclusions ‐ database
         Ruby Stateless           Erlang Stateful

30000
22500
15000
 7500                                   700
    0
                    queries/sec



                                                    41
Conclusions
           Db maintenace
        AWS S3 as a main datastore
            one document/user
         0 maintenance/setup cost

Redis for the derived data (leaderboard etc.)
   load very far from Redis max capacity

                                            42
Conclusions
               data locality

• average game call < 1ms
• no db roundtrip at every request
• no need for low latency network
• efficient setup for cloud environment



                                        43
Conclusions
                 data locality

• finally CPU bound
• no CPU 4me for serializing/deserializing data 
  from db
• CPU only busy transforming data (minimum 
  possible ac4vity)



                                                   44
Conclusions
                 CPU usage

• 300K daily users
• 1000 h[p req/sec (game ac4ons)
• 4 m1.large AWS instances (dual core 8GB RAM)
• 2 instances (coordinators) 5% CPU load
• 2 instances (workers) 20% CPU load


                                                 45
Conclusions
     extra benefits

en4re user state in one process
               +
         immutability
               =
    Transac4onal behavior


                                  46
Conclusions
         extra benefits

One user session ‐> one erlang process
  The erlang VM is aware of processes
                  =>
the erlang VM is aware of user sessions



                                          47
Conclusions

      Thanks to VM process introspec4on
   process reduc4ons ‐> cost of a game ac4on
process used memory ‐> memory used by session

We gained a lot of knowledge about a fundamental 
                 ”business” en4ty

                                              48
Conclusions

• a radical change was made possible by a radically 
  different tool (erlang)




                                                   49
Conclusions

• a radical change was made possible by a radically 
  different tool (erlang)
• erlang can be good for data intensive/high 
  throughput applica4ons




                                                   49
Conclusions

• a radical change was made possible by a radically 
  different tool (erlang)
• erlang can be good for data intensive/high 
  throughput applica4ons
• stateful is not necessarily hard/dangerous/
  unmaintainable

                                                   49
Conclusions

• november 2010: 0 lines of erlang @wooga
• november 2011: 1 erlang game server live

...with more erlang coming, join us




                                             50
Q&A
  Knut Nesheim @knutin
 Paolo Negri @hungryblank


h[p://wooga.com/jobs

                            51

More Related Content

Viewers also liked

Erlang OTP
Erlang OTPErlang OTP
Erlang OTP
Zvi Avraham
 
Why your Spark job is failing
Why your Spark job is failingWhy your Spark job is failing
Why your Spark job is failing
Sandy Ryza
 
700 Queries Per Second with Updates: Spark As A Real-Time Web Service
700 Queries Per Second with Updates: Spark As A Real-Time Web Service700 Queries Per Second with Updates: Spark As A Real-Time Web Service
700 Queries Per Second with Updates: Spark As A Real-Time Web Service
Spark Summit
 
Sa introduction to big data pipelining with cassandra &amp; spark west mins...
Sa introduction to big data pipelining with cassandra &amp; spark   west mins...Sa introduction to big data pipelining with cassandra &amp; spark   west mins...
Sa introduction to big data pipelining with cassandra &amp; spark west mins...
Simon Ambridge
 
Top 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsTop 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark Applications
Spark Summit
 
How to deploy Apache Spark 
to Mesos/DCOS
How to deploy Apache Spark 
to Mesos/DCOSHow to deploy Apache Spark 
to Mesos/DCOS
How to deploy Apache Spark 
to Mesos/DCOS
Legacy Typesafe (now Lightbend)
 
Real-Time Anomaly Detection with Spark MLlib, Akka and Cassandra
Real-Time Anomaly Detection  with Spark MLlib, Akka and  CassandraReal-Time Anomaly Detection  with Spark MLlib, Akka and  Cassandra
Real-Time Anomaly Detection with Spark MLlib, Akka and Cassandra
Natalino Busa
 
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Databricks
 
Four Things to Know About Reliable Spark Streaming with Typesafe and Databricks
Four Things to Know About Reliable Spark Streaming with Typesafe and DatabricksFour Things to Know About Reliable Spark Streaming with Typesafe and Databricks
Four Things to Know About Reliable Spark Streaming with Typesafe and Databricks
Legacy Typesafe (now Lightbend)
 
Top 5 Mistakes to Avoid When Writing Apache Spark Applications
Top 5 Mistakes to Avoid When Writing Apache Spark ApplicationsTop 5 Mistakes to Avoid When Writing Apache Spark Applications
Top 5 Mistakes to Avoid When Writing Apache Spark Applications
Cloudera, Inc.
 
Tuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkTuning and Debugging in Apache Spark
Tuning and Debugging in Apache Spark
Patrick Wendell
 
Tuning tips for Apache Spark Jobs
Tuning tips for Apache Spark JobsTuning tips for Apache Spark Jobs
Tuning tips for Apache Spark Jobs
Samir Bessalah
 

Viewers also liked (12)

Erlang OTP
Erlang OTPErlang OTP
Erlang OTP
 
Why your Spark job is failing
Why your Spark job is failingWhy your Spark job is failing
Why your Spark job is failing
 
700 Queries Per Second with Updates: Spark As A Real-Time Web Service
700 Queries Per Second with Updates: Spark As A Real-Time Web Service700 Queries Per Second with Updates: Spark As A Real-Time Web Service
700 Queries Per Second with Updates: Spark As A Real-Time Web Service
 
Sa introduction to big data pipelining with cassandra &amp; spark west mins...
Sa introduction to big data pipelining with cassandra &amp; spark   west mins...Sa introduction to big data pipelining with cassandra &amp; spark   west mins...
Sa introduction to big data pipelining with cassandra &amp; spark west mins...
 
Top 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsTop 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark Applications
 
How to deploy Apache Spark 
to Mesos/DCOS
How to deploy Apache Spark 
to Mesos/DCOSHow to deploy Apache Spark 
to Mesos/DCOS
How to deploy Apache Spark 
to Mesos/DCOS
 
Real-Time Anomaly Detection with Spark MLlib, Akka and Cassandra
Real-Time Anomaly Detection  with Spark MLlib, Akka and  CassandraReal-Time Anomaly Detection  with Spark MLlib, Akka and  Cassandra
Real-Time Anomaly Detection with Spark MLlib, Akka and Cassandra
 
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
 
Four Things to Know About Reliable Spark Streaming with Typesafe and Databricks
Four Things to Know About Reliable Spark Streaming with Typesafe and DatabricksFour Things to Know About Reliable Spark Streaming with Typesafe and Databricks
Four Things to Know About Reliable Spark Streaming with Typesafe and Databricks
 
Top 5 Mistakes to Avoid When Writing Apache Spark Applications
Top 5 Mistakes to Avoid When Writing Apache Spark ApplicationsTop 5 Mistakes to Avoid When Writing Apache Spark Applications
Top 5 Mistakes to Avoid When Writing Apache Spark Applications
 
Tuning and Debugging in Apache Spark
Tuning and Debugging in Apache SparkTuning and Debugging in Apache Spark
Tuning and Debugging in Apache Spark
 
Tuning tips for Apache Spark Jobs
Tuning tips for Apache Spark JobsTuning tips for Apache Spark Jobs
Tuning tips for Apache Spark Jobs
 

Similar to Getting real with erlang

Gearman: A Job Server made for Scale
Gearman: A Job Server made for ScaleGearman: A Job Server made for Scale
Gearman: A Job Server made for Scale
Mike Willbanks
 
Software Testen mit Visual Studio Lab Management
Software Testen mit Visual Studio Lab ManagementSoftware Testen mit Visual Studio Lab Management
Software Testen mit Visual Studio Lab Management
Nico Orschel
 
Peter wood – the ethical hacker
Peter wood – the ethical hackerPeter wood – the ethical hacker
Peter wood – the ethical hacker
responsedatacomms
 
1006 Z2 Intro Complete
1006 Z2 Intro Complete1006 Z2 Intro Complete
1006 Z2 Intro Complete
Henning Blohm
 
Activiti in Action (Devoxx 2010)
Activiti in Action (Devoxx 2010)Activiti in Action (Devoxx 2010)
Activiti in Action (Devoxx 2010)
Joram Barrez
 
Introduction to Activiti
Introduction to ActivitiIntroduction to Activiti
Introduction to Activiti
yunshui
 
Abc zabbix performance tuning
Abc zabbix performance tuningAbc zabbix performance tuning
Abc zabbix performance tuning
serrauri
 
Zabbix Performance Tuning
Zabbix Performance TuningZabbix Performance Tuning
Zabbix Performance Tuning
Ricardo Santos
 
Gearman - Northeast PHP 2012
Gearman - Northeast PHP 2012Gearman - Northeast PHP 2012
Gearman - Northeast PHP 2012
Mike Willbanks
 
Workshop OSGI PPT
Workshop OSGI PPTWorkshop OSGI PPT
Workshop OSGI PPT
Summer Lu
 
Solving the C20K Problem: PHP Performance and Scalability
Solving the C20K Problem: PHP Performance and ScalabilitySolving the C20K Problem: PHP Performance and Scalability
Solving the C20K Problem: PHP Performance and Scalability
webhostingguy
 
Solving the C20K Problem: PHP Performance and Scalability
Solving the C20K Problem: PHP Performance and ScalabilitySolving the C20K Problem: PHP Performance and Scalability
Solving the C20K Problem: PHP Performance and Scalability
webhostingguy
 
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
SQLExpert.pl
 
Creative Sharepoint's All about Azure
Creative Sharepoint's All about AzureCreative Sharepoint's All about Azure
Creative Sharepoint's All about Azure
Creative Sharepoint
 
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
manssandstrom
 
Curso de JBPM5
Curso de JBPM5Curso de JBPM5
Curso de JBPM5
Oscar V
 
Introducing PaaS in a Box - Scalable, Flexible, Portable PHP in the Cloud
Introducing PaaS in a Box - Scalable, Flexible, Portable PHP in the CloudIntroducing PaaS in a Box - Scalable, Flexible, Portable PHP in the Cloud
Introducing PaaS in a Box - Scalable, Flexible, Portable PHP in the Cloud
Zend by Rogue Wave Software
 
You suck at Memory Analysis
You suck at Memory AnalysisYou suck at Memory Analysis
You suck at Memory Analysis
Francisco Ribeiro
 
MySQL Binary Log API Presentation - OSCON 2011
MySQL Binary Log API Presentation - OSCON 2011MySQL Binary Log API Presentation - OSCON 2011
MySQL Binary Log API Presentation - OSCON 2011
Mats Kindahl
 
Plugin-able POS Solutions by Javascript @HDM9 Taiwan
Plugin-able POS Solutions by Javascript @HDM9 TaiwanPlugin-able POS Solutions by Javascript @HDM9 Taiwan
Plugin-able POS Solutions by Javascript @HDM9 Taiwan
Rack Lin
 

Similar to Getting real with erlang (20)

Gearman: A Job Server made for Scale
Gearman: A Job Server made for ScaleGearman: A Job Server made for Scale
Gearman: A Job Server made for Scale
 
Software Testen mit Visual Studio Lab Management
Software Testen mit Visual Studio Lab ManagementSoftware Testen mit Visual Studio Lab Management
Software Testen mit Visual Studio Lab Management
 
Peter wood – the ethical hacker
Peter wood – the ethical hackerPeter wood – the ethical hacker
Peter wood – the ethical hacker
 
1006 Z2 Intro Complete
1006 Z2 Intro Complete1006 Z2 Intro Complete
1006 Z2 Intro Complete
 
Activiti in Action (Devoxx 2010)
Activiti in Action (Devoxx 2010)Activiti in Action (Devoxx 2010)
Activiti in Action (Devoxx 2010)
 
Introduction to Activiti
Introduction to ActivitiIntroduction to Activiti
Introduction to Activiti
 
Abc zabbix performance tuning
Abc zabbix performance tuningAbc zabbix performance tuning
Abc zabbix performance tuning
 
Zabbix Performance Tuning
Zabbix Performance TuningZabbix Performance Tuning
Zabbix Performance Tuning
 
Gearman - Northeast PHP 2012
Gearman - Northeast PHP 2012Gearman - Northeast PHP 2012
Gearman - Northeast PHP 2012
 
Workshop OSGI PPT
Workshop OSGI PPTWorkshop OSGI PPT
Workshop OSGI PPT
 
Solving the C20K Problem: PHP Performance and Scalability
Solving the C20K Problem: PHP Performance and ScalabilitySolving the C20K Problem: PHP Performance and Scalability
Solving the C20K Problem: PHP Performance and Scalability
 
Solving the C20K Problem: PHP Performance and Scalability
Solving the C20K Problem: PHP Performance and ScalabilitySolving the C20K Problem: PHP Performance and Scalability
Solving the C20K Problem: PHP Performance and Scalability
 
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
 
Creative Sharepoint's All about Azure
Creative Sharepoint's All about AzureCreative Sharepoint's All about Azure
Creative Sharepoint's All about Azure
 
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
 
Curso de JBPM5
Curso de JBPM5Curso de JBPM5
Curso de JBPM5
 
Introducing PaaS in a Box - Scalable, Flexible, Portable PHP in the Cloud
Introducing PaaS in a Box - Scalable, Flexible, Portable PHP in the CloudIntroducing PaaS in a Box - Scalable, Flexible, Portable PHP in the Cloud
Introducing PaaS in a Box - Scalable, Flexible, Portable PHP in the Cloud
 
You suck at Memory Analysis
You suck at Memory AnalysisYou suck at Memory Analysis
You suck at Memory Analysis
 
MySQL Binary Log API Presentation - OSCON 2011
MySQL Binary Log API Presentation - OSCON 2011MySQL Binary Log API Presentation - OSCON 2011
MySQL Binary Log API Presentation - OSCON 2011
 
Plugin-able POS Solutions by Javascript @HDM9 Taiwan
Plugin-able POS Solutions by Javascript @HDM9 TaiwanPlugin-able POS Solutions by Javascript @HDM9 Taiwan
Plugin-able POS Solutions by Javascript @HDM9 Taiwan
 

More from Paolo Negri

Turning the web stack upside down rethinking how data flows through systems
Turning the web stack upside down  rethinking how data flows through systemsTurning the web stack upside down  rethinking how data flows through systems
Turning the web stack upside down rethinking how data flows through systems
Paolo Negri
 
AWS Lambda in infrastructure
AWS Lambda in infrastructureAWS Lambda in infrastructure
AWS Lambda in infrastructure
Paolo Negri
 
Erlang introduction geek2geek Berlin
Erlang introduction geek2geek BerlinErlang introduction geek2geek Berlin
Erlang introduction geek2geek Berlin
Paolo Negri
 
Erlang as a cloud citizen, a fractal approach to throughput
Erlang as a cloud citizen, a fractal approach to throughputErlang as a cloud citizen, a fractal approach to throughput
Erlang as a cloud citizen, a fractal approach to throughput
Paolo Negri
 
Erlang factory 2011 london
Erlang factory 2011 londonErlang factory 2011 london
Erlang factory 2011 london
Paolo Negri
 
Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"
Paolo Negri
 
Scaling Social Games
Scaling Social GamesScaling Social Games
Scaling Social Games
Paolo Negri
 
Mongrel2, a short introduction
Mongrel2, a short introductionMongrel2, a short introduction
Mongrel2, a short introduction
Paolo Negri
 
RabbitMQ with python and ruby RuPy 2009
RabbitMQ with python and ruby RuPy 2009RabbitMQ with python and ruby RuPy 2009
RabbitMQ with python and ruby RuPy 2009
Paolo Negri
 
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Paolo Negri
 
SimpleDb, an introduction
SimpleDb, an introductionSimpleDb, an introduction
SimpleDb, an introduction
Paolo Negri
 
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
Paolo Negri
 

More from Paolo Negri (12)

Turning the web stack upside down rethinking how data flows through systems
Turning the web stack upside down  rethinking how data flows through systemsTurning the web stack upside down  rethinking how data flows through systems
Turning the web stack upside down rethinking how data flows through systems
 
AWS Lambda in infrastructure
AWS Lambda in infrastructureAWS Lambda in infrastructure
AWS Lambda in infrastructure
 
Erlang introduction geek2geek Berlin
Erlang introduction geek2geek BerlinErlang introduction geek2geek Berlin
Erlang introduction geek2geek Berlin
 
Erlang as a cloud citizen, a fractal approach to throughput
Erlang as a cloud citizen, a fractal approach to throughputErlang as a cloud citizen, a fractal approach to throughput
Erlang as a cloud citizen, a fractal approach to throughput
 
Erlang factory 2011 london
Erlang factory 2011 londonErlang factory 2011 london
Erlang factory 2011 london
 
Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"
 
Scaling Social Games
Scaling Social GamesScaling Social Games
Scaling Social Games
 
Mongrel2, a short introduction
Mongrel2, a short introductionMongrel2, a short introduction
Mongrel2, a short introduction
 
RabbitMQ with python and ruby RuPy 2009
RabbitMQ with python and ruby RuPy 2009RabbitMQ with python and ruby RuPy 2009
RabbitMQ with python and ruby RuPy 2009
 
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
 
SimpleDb, an introduction
SimpleDb, an introductionSimpleDb, an introduction
SimpleDb, an introduction
 
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
 

Recently uploaded

Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 

Recently uploaded (20)

Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 

Getting real with erlang