SlideShare a Scribd company logo
Building MapAttack: A
                          real-time geolocation
                                   game
                                Kyle Drake
Sunday, February 12, 12
geoloqi.com




                           What is Geoloqi?




geoloqi.com




 Sunday, February 12, 12
geoloqi.com




                                Real-world solutions
                          for thousands around the globe



Sunday, February 12, 12
geoloqi.com




                           Real-Time Location Tracking


                          Real-World Interactive Experiences



Sunday, February 12, 12
geoloqi.com




                          Personal Location


Sunday, February 12, 12
geoloqi.com




                          Location-Based Notes




Sunday, February 12, 12
geoloqi.com



                          YOUR GPS GETS WEIRD.




                               WE HELP FIX THAT.

Sunday, February 12, 12
geoloqi.com




                          Real-Time Applications


Sunday, February 12, 12
geoloqi.com




Sunday, February 12, 12
geoloqi.com




   First Hackathon Attempt
                 Layer in Geoloqi

       Updates to MapAttack server
  via HTTP REST API

       Processing through Geoloqi’s
  persistent store

                 Finished in a weekend

                A lot of fun!
Sunday, February 12, 12
Sunday, February 12, 12
Sunday, February 12, 12
Sunday, February 12, 12
Sunday, February 12, 12
geoloqi.com




   There were some kinks
      Used an REST HTTP service for
   APNS (worked, but not “real-time”)

        Server was getting backed up
   (updates were not async)




Sunday, February 12, 12
geoloqi.com




               MapAttack Server Issues
            Blocking IO (requests to Geoloqi API held
       everything up)

                      Lots of concurrent traffic

             Events had to be broadcast to all phones/
       clients in the game synchronously




Sunday, February 12, 12
geoloqi.com




                 HOW WE
                DEALT WITH
                    IT
Sunday, February 12, 12
geoloqi.com




Sunday, February 12, 12
geoloqi.com




               A key-value store, and so much more

               A great implementation of PUBLISH/SUBSCRIBE

                So simple, you can actually understand it

               Very fast and reliable

                Robust library support

Sunday, February 12, 12
geoloqi.com




Sunday, February 12, 12
geoloqi.com




Sunday, February 12, 12
geoloqi.com




Sunday, February 12, 12
geoloqi.com




Sunday, February 12, 12
geoloqi.com




                 HOW WE USE NODE JS


    • Phones:
    Custom binary protocol over UDP

    • Web Browsers:
    Web Sockets via Socket.IO




Sunday, February 12, 12
geoloqi.com




                          Socket.IO is awesome
                           Adapter Pattern for realtime

                           Web Sockets, Flash, Long Polling!

                           One interface for everything

                           Easy to implement: ~100 LOC
Sunday, February 12, 12
geoloqi.com




Sunday, February 12, 12
geoloqi.com




                          Geoloqi API
                ASYNC FTW!

                Delayed updates when possible

                Messages queues: Beanstalk

                Workers pick tasks off the stack

                Process data outside of the persistent store

                Simpler than AMQP

Sunday, February 12, 12
geoloqi.com




Sunday, February 12, 12
geoloqi.com



                            The Reactor Pattern
                      “The reactor design pattern is a concurrent
                       programming pattern for handling service
                      requests delivered concurrently to a service
                      handler by one or more inputs” - Wikipedia
             My simplest description: Takes your blocking IO
              operation, shoves it into its own kernel thread
            behind the scenes, uses Unix kernel magic to make
                it rejoin the reactor queue when it’s ready.
                                    Linux: epoll(4)
                                    BSD: kqueue/kevent
Sunday, February 12, 12
geoloqi.com



                          Concurrent IO is a common problem
                          All programming languages have trouble with it
                          The Reactor pattern is a tool to resolve it
                          Most languages have the Reactor pattern!

                          JavaScript              Node.js

                           Python                 Twisted

                            Ruby         EventMachine (libem, C)

                             Java              JBoss_Netty

                            PHP                  None yet
Sunday, February 12, 12
geoloqi.com



                                 MapAttack Server
                            (or: How to make Ruby ROFLscale)

                          MRI Ruby has a global interpreter lock

                          But MRI Ruby does not block on IO

                          JRuby and Rubinius 2: Native Threads

                          And it has a reactor pattern, just like Node JS



Sunday, February 12, 12
geoloqi.com




                    Sinatra::Synchrony
                             kyledrake.net/sinatra-synchrony

                          Implements EventMachine with Fibers

                          The result: NO CALLBACKS

                          < 100 LOC

                          Only coding change is to use EM libs and fibers

                          DON’T USE IT.
Sunday, February 12, 12
geoloqi.com




                    Sinatra::Synchrony




Sunday, February 12, 12
geoloqi.com




Sunday, February 12, 12
geoloqi.com




                      Let’s Talk Performance.




Sunday, February 12, 12
geoloqi.com




                          Database = your real
                          persistence problem




Sunday, February 12, 12
geoloqi.com




                      Make the relevant data
                      stay outside of the slow
                         persistence store.



Sunday, February 12, 12
geoloqi.com




    If you’re trying to solve a problem by
      ROFLscaling your persistent store,
             you’re doing it wrong.




Sunday, February 12, 12
geoloqi.com




                          Examples of doing it wrong
               “Let’s rewrite everything to use TrendDB”

                Using EC2 for a single-master DB “because it scales”

                Buying something from Oracle

     “Ruby/PHP/JS is too slow for this, let’s rewrite it in
 TrendLang”

      Many NoSQL solutions have problems you don’t
 know about. Global write locks, single write master, et
 cetera
Sunday, February 12, 12
geoloqi.com




     If you must speed up your persistent
        store, here’s my practical advice.




Sunday, February 12, 12
geoloqi.com



                          Real Hardware FTW?
                   Single master database? Get a real server! Really!

                   Cloud is only as fast as the fastest available HDD

                   EBS performance is not great, even in RAID0 stripe
    See orion.heroku.com/past/2009/7/29/io_performance_on_ebs
    and perfcap.blogspot.com/2011/03/understanding-and-using-amazon-ebs.html
    and blog.dt.org/index.php/2010/06/amazon-ec2-io-performance-local-emphemeral-disks-vs-raid0-
    striped-ebs-volumes/
    and endevver.com/2010/03/cost-analysis-of-an-amazon-ec2-deployment.html
    and mysqlperformanceblog.com/2011/02/21/death-match-ebs-versus-ssd-price-performance-and-
    qos
    and google.com/search?q=heroku+ebs+performance


                   High end Xeon, 32GB ECC, fast 220GB SSD: ~$2K
Sunday, February 12, 12
geoloqi.com



                          Real Hardware FTW?
       The paradigm is diversifying, and the reason is SSD.

       Say hello to the Fusion-io ioDrive Octal.
       PCIe x16 slot
       5.12TB
       6.0 GB/s read
       4.4 GB/s write
       1.19 MILLION IOPS

       Cost: $100,000 (plus $10 S&H).
       It’s a steal at this price.. but it will get cheaper.

Sunday, February 12, 12
geoloqi.com



                          Real Hardware FTW?
                            $500 PCIe SSD drives:
                                  220GB
                               >100,000 IOPS
                               ~700MB/s R/W

                            15,000 RPM SAS drives:
                                    2TB+
                                ~175-210 IOPS
                                <150MB/s R/W



Sunday, February 12, 12
geoloqi.com



                                     Long Term
                          Multi-master experiment (Brewer’s CAP)

                          Riak is my current favorite

                      Cloud companies providing real hardware
                 performance

                          Map/Reduce != Database




Sunday, February 12, 12
geoloqi.com




                          In Summary




Sunday, February 12, 12
geoloqi.com




            Geo-location games
                 are FUN!




Sunday, February 12, 12
geoloqi.com



            Use the Geoloqi API to make
           geolocation games! We did the
                 hard work for you.




Sunday, February 12, 12
geoloqi.com



                     MapAttack is open source!
                          github.com/geoloqi/MapAttack




Sunday, February 12, 12
geoloqi.com



                          Other uses of Geoloqi




Sunday, February 12, 12
geoloqi.com




                          Thanks!


Sunday, February 12, 12

More Related Content

KEY
Building MapAttack
KEY
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
KEY
Hybrid concurrency patterns
PPTX
Rubykaigi 2017-nishimotz-v6
PDF
Ruby in office time reboot
PDF
Concurrent Ruby Application Servers
PPTX
My month with Ruby
PPTX
Event Driven Architecture - MeshU - Ilya Grigorik
Building MapAttack
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
Hybrid concurrency patterns
Rubykaigi 2017-nishimotz-v6
Ruby in office time reboot
Concurrent Ruby Application Servers
My month with Ruby
Event Driven Architecture - MeshU - Ilya Grigorik

What's hot (20)

PPTX
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...
PDF
Infrastructure as code might be literally impossible part 2
PPTX
Ruby Proxies for Scale, Performance, and Monitoring
PDF
Puppet Camp LA 2/19/2015
PDF
Package manages and Puppet - PuppetConf 2015
PDF
Torquebox OSCON Java 2011
PDF
Torquebox @ Raleigh.rb - April 2011
ODP
PDF
Building a private CI/CD pipeline with Java and Docker in the cloud as presen...
PDF
Chef Conf 2015: Package Management & Chef
PDF
TorqueBox - Ultrapassando a fronteira entre Java e Ruby
PDF
Getting Git Right
PDF
Gemification for Ruby 2.5/3.0
PDF
Lessons Learned Setting Up the OSM Stack Workshop SotM US 2013
PDF
Go After 4 Years in Production - QCon 2015
PDF
Connecting the Worlds of Java and Ruby with JRuby
PDF
Big app design for Node.js
PDF
Architecting large Node.js applications
PDF
An introduction and future of Ruby coverage library
KEY
Plone Deployment Secrets & Tricks
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...
Infrastructure as code might be literally impossible part 2
Ruby Proxies for Scale, Performance, and Monitoring
Puppet Camp LA 2/19/2015
Package manages and Puppet - PuppetConf 2015
Torquebox OSCON Java 2011
Torquebox @ Raleigh.rb - April 2011
Building a private CI/CD pipeline with Java and Docker in the cloud as presen...
Chef Conf 2015: Package Management & Chef
TorqueBox - Ultrapassando a fronteira entre Java e Ruby
Getting Git Right
Gemification for Ruby 2.5/3.0
Lessons Learned Setting Up the OSM Stack Workshop SotM US 2013
Go After 4 Years in Production - QCon 2015
Connecting the Worlds of Java and Ruby with JRuby
Big app design for Node.js
Architecting large Node.js applications
An introduction and future of Ruby coverage library
Plone Deployment Secrets & Tricks
Ad

Similar to NodePDX Slides (20)

PPT
Coming of Age: The positive legacy of FOSS GIS
PDF
Geobliki: A Platform For Emergency Response
PDF
Geoinformatics Cyberinfrastructure for the Solid Earth Sciences 1st Edition G...
PDF
Geoinformatics Cyberinfrastructure for the Solid Earth Sciences 1st Edition G...
PDF
OSDC 2018 | The Computer science behind a modern distributed data store by Ma...
PDF
The computer science behind a modern disributed data store
PDF
From Digital Earth to the Internet of Places for Management of Risks and Emer...
PDF
Laboratory manual for seismic data processing courses using the seismic unix
PDF
Open GeoSocial API
PDF
BarCamp Melbourne 2012: Internet of Things
PDF
The Computer Science Behind a modern Distributed Database
PPT
Seismic sensor
PPTX
Virtual Appliances, Cloud Computing, and Reproducible Research
PDF
Building A Scalable Open Source Storage Solution
PPTX
Live Geoinformation with Standardized Geoprocessing Services
PDF
Amber Case - Location as an Invisible Interface - Sony Ericsson.pptx
PPTX
g-Social - Enhancing e-Science Tools with Social Networking Functionality
PPT
GeoNode Motivation, Design, and Challenges
PDF
We are the music makers and we are the dreamers of dreams
PDF
GFOSS DAY 2012 GeoNetwork Presentation
Coming of Age: The positive legacy of FOSS GIS
Geobliki: A Platform For Emergency Response
Geoinformatics Cyberinfrastructure for the Solid Earth Sciences 1st Edition G...
Geoinformatics Cyberinfrastructure for the Solid Earth Sciences 1st Edition G...
OSDC 2018 | The Computer science behind a modern distributed data store by Ma...
The computer science behind a modern disributed data store
From Digital Earth to the Internet of Places for Management of Risks and Emer...
Laboratory manual for seismic data processing courses using the seismic unix
Open GeoSocial API
BarCamp Melbourne 2012: Internet of Things
The Computer Science Behind a modern Distributed Database
Seismic sensor
Virtual Appliances, Cloud Computing, and Reproducible Research
Building A Scalable Open Source Storage Solution
Live Geoinformation with Standardized Geoprocessing Services
Amber Case - Location as an Invisible Interface - Sony Ericsson.pptx
g-Social - Enhancing e-Science Tools with Social Networking Functionality
GeoNode Motivation, Design, and Challenges
We are the music makers and we are the dreamers of dreams
GFOSS DAY 2012 GeoNetwork Presentation
Ad

Recently uploaded (20)

PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
sap open course for s4hana steps from ECC to s4
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Electronic commerce courselecture one. Pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
cuic standard and advanced reporting.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
Cloud computing and distributed systems.
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPT
Teaching material agriculture food technology
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Big Data Technologies - Introduction.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Encapsulation_ Review paper, used for researhc scholars
sap open course for s4hana steps from ECC to s4
MYSQL Presentation for SQL database connectivity
Electronic commerce courselecture one. Pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Approach and Philosophy of On baking technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
cuic standard and advanced reporting.pdf
Programs and apps: productivity, graphics, security and other tools
Cloud computing and distributed systems.
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
“AI and Expert System Decision Support & Business Intelligence Systems”
Reach Out and Touch Someone: Haptics and Empathic Computing
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Teaching material agriculture food technology
20250228 LYD VKU AI Blended-Learning.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Big Data Technologies - Introduction.pptx

NodePDX Slides

  • 1. Building MapAttack: A real-time geolocation game Kyle Drake Sunday, February 12, 12
  • 2. geoloqi.com What is Geoloqi? geoloqi.com Sunday, February 12, 12
  • 3. geoloqi.com Real-world solutions for thousands around the globe Sunday, February 12, 12
  • 4. geoloqi.com Real-Time Location Tracking Real-World Interactive Experiences Sunday, February 12, 12
  • 5. geoloqi.com Personal Location Sunday, February 12, 12
  • 6. geoloqi.com Location-Based Notes Sunday, February 12, 12
  • 7. geoloqi.com YOUR GPS GETS WEIRD. WE HELP FIX THAT. Sunday, February 12, 12
  • 8. geoloqi.com Real-Time Applications Sunday, February 12, 12
  • 10. geoloqi.com First Hackathon Attempt Layer in Geoloqi Updates to MapAttack server via HTTP REST API Processing through Geoloqi’s persistent store Finished in a weekend A lot of fun! Sunday, February 12, 12
  • 15. geoloqi.com There were some kinks Used an REST HTTP service for APNS (worked, but not “real-time”) Server was getting backed up (updates were not async) Sunday, February 12, 12
  • 16. geoloqi.com MapAttack Server Issues Blocking IO (requests to Geoloqi API held everything up) Lots of concurrent traffic Events had to be broadcast to all phones/ clients in the game synchronously Sunday, February 12, 12
  • 17. geoloqi.com HOW WE DEALT WITH IT Sunday, February 12, 12
  • 19. geoloqi.com A key-value store, and so much more A great implementation of PUBLISH/SUBSCRIBE So simple, you can actually understand it Very fast and reliable Robust library support Sunday, February 12, 12
  • 24. geoloqi.com HOW WE USE NODE JS • Phones: Custom binary protocol over UDP • Web Browsers: Web Sockets via Socket.IO Sunday, February 12, 12
  • 25. geoloqi.com Socket.IO is awesome Adapter Pattern for realtime Web Sockets, Flash, Long Polling! One interface for everything Easy to implement: ~100 LOC Sunday, February 12, 12
  • 27. geoloqi.com Geoloqi API ASYNC FTW! Delayed updates when possible Messages queues: Beanstalk Workers pick tasks off the stack Process data outside of the persistent store Simpler than AMQP Sunday, February 12, 12
  • 29. geoloqi.com The Reactor Pattern “The reactor design pattern is a concurrent programming pattern for handling service requests delivered concurrently to a service handler by one or more inputs” - Wikipedia My simplest description: Takes your blocking IO operation, shoves it into its own kernel thread behind the scenes, uses Unix kernel magic to make it rejoin the reactor queue when it’s ready. Linux: epoll(4) BSD: kqueue/kevent Sunday, February 12, 12
  • 30. geoloqi.com Concurrent IO is a common problem All programming languages have trouble with it The Reactor pattern is a tool to resolve it Most languages have the Reactor pattern! JavaScript Node.js Python Twisted Ruby EventMachine (libem, C) Java JBoss_Netty PHP None yet Sunday, February 12, 12
  • 31. geoloqi.com MapAttack Server (or: How to make Ruby ROFLscale) MRI Ruby has a global interpreter lock But MRI Ruby does not block on IO JRuby and Rubinius 2: Native Threads And it has a reactor pattern, just like Node JS Sunday, February 12, 12
  • 32. geoloqi.com Sinatra::Synchrony kyledrake.net/sinatra-synchrony Implements EventMachine with Fibers The result: NO CALLBACKS < 100 LOC Only coding change is to use EM libs and fibers DON’T USE IT. Sunday, February 12, 12
  • 33. geoloqi.com Sinatra::Synchrony Sunday, February 12, 12
  • 35. geoloqi.com Let’s Talk Performance. Sunday, February 12, 12
  • 36. geoloqi.com Database = your real persistence problem Sunday, February 12, 12
  • 37. geoloqi.com Make the relevant data stay outside of the slow persistence store. Sunday, February 12, 12
  • 38. geoloqi.com If you’re trying to solve a problem by ROFLscaling your persistent store, you’re doing it wrong. Sunday, February 12, 12
  • 39. geoloqi.com Examples of doing it wrong “Let’s rewrite everything to use TrendDB” Using EC2 for a single-master DB “because it scales” Buying something from Oracle “Ruby/PHP/JS is too slow for this, let’s rewrite it in TrendLang” Many NoSQL solutions have problems you don’t know about. Global write locks, single write master, et cetera Sunday, February 12, 12
  • 40. geoloqi.com If you must speed up your persistent store, here’s my practical advice. Sunday, February 12, 12
  • 41. geoloqi.com Real Hardware FTW? Single master database? Get a real server! Really! Cloud is only as fast as the fastest available HDD EBS performance is not great, even in RAID0 stripe See orion.heroku.com/past/2009/7/29/io_performance_on_ebs and perfcap.blogspot.com/2011/03/understanding-and-using-amazon-ebs.html and blog.dt.org/index.php/2010/06/amazon-ec2-io-performance-local-emphemeral-disks-vs-raid0- striped-ebs-volumes/ and endevver.com/2010/03/cost-analysis-of-an-amazon-ec2-deployment.html and mysqlperformanceblog.com/2011/02/21/death-match-ebs-versus-ssd-price-performance-and- qos and google.com/search?q=heroku+ebs+performance High end Xeon, 32GB ECC, fast 220GB SSD: ~$2K Sunday, February 12, 12
  • 42. geoloqi.com Real Hardware FTW? The paradigm is diversifying, and the reason is SSD. Say hello to the Fusion-io ioDrive Octal. PCIe x16 slot 5.12TB 6.0 GB/s read 4.4 GB/s write 1.19 MILLION IOPS Cost: $100,000 (plus $10 S&H). It’s a steal at this price.. but it will get cheaper. Sunday, February 12, 12
  • 43. geoloqi.com Real Hardware FTW? $500 PCIe SSD drives: 220GB >100,000 IOPS ~700MB/s R/W 15,000 RPM SAS drives: 2TB+ ~175-210 IOPS <150MB/s R/W Sunday, February 12, 12
  • 44. geoloqi.com Long Term Multi-master experiment (Brewer’s CAP) Riak is my current favorite Cloud companies providing real hardware performance Map/Reduce != Database Sunday, February 12, 12
  • 45. geoloqi.com In Summary Sunday, February 12, 12
  • 46. geoloqi.com Geo-location games are FUN! Sunday, February 12, 12
  • 47. geoloqi.com Use the Geoloqi API to make geolocation games! We did the hard work for you. Sunday, February 12, 12
  • 48. geoloqi.com MapAttack is open source! github.com/geoloqi/MapAttack Sunday, February 12, 12
  • 49. geoloqi.com Other uses of Geoloqi Sunday, February 12, 12
  • 50. geoloqi.com Thanks! Sunday, February 12, 12