0
Helping your customers to cut costs in their web APIs.
   16 years in Software Development   From S/390 to Android   In love with Ruby since 2006   Working in      @eljuanc...
   Set of programming components and    standards.   Open up your app to the world.   Integration!
   Mobile social game (iOS & Android)   Video upload & encoding   JSON API   AWS -> EC2/S3
Autoscale with  Scalr.com
   Find a way to cut costs and improve    performance.   Provide a very easy way to scale the new    solution.   Mainta...
   Inspiration: Draw Something –    http://goo.gl/hi7a6   Goliath   Beanstalk   Couchbase   HAProxy as load balancer....
   Asynchronous (non-blocking) web server framework.     Based on EventMachine     Lightweight     Rack API & middlewa...
   Very simple, very fast work queue.       Saves memory (lots of it).       Multiple queues.       Generic interface....
   Ruby implementation of the Reactor Pattern     Highly scalable     Performance optimized     Mature & stable     E...
 October 1995 by Douglas Schmidt AKA Dispatcher or Notifier Handle requests delivered to an application by one  or more...
EM.run {   EM::HttpRequest.new(‘http://www.example.com’).get.callback {   |http|       puts http.response   }}
EM::HttpRequest.new(first_url).get.callback {|http|   second_url = extract_next_url(http.response)  EM::HttpRequest.new(se...
require em-synchrony/em-httphttp = EM::HttpRequest.new(first_url).getsecond_url = extract_next_url(http.response)http2 = E...
   https://github.com/igrigorik/em-synchrony   https://github.com/eventmachine/eventmachine/wiki/protoc    ol-implementa...
   Latest version has no built-in routing system.   Ilya Grigorik (Goliath’s creator) suggests to    start multiple Goli...
   Routing was done thru convention over    configuration with a little of Ruby’s reflection    abilities mixed with some...
   Goliath: add processes or servers and    configure them in HAProxy.   Couchbase: add servers to the cluster.   Done!...
   From ~450 req/s to ~1300 req/s.   From 4 to 1 EC2 application servers.   Triple performance while reducing costs.  ...
   Contact Juan Pablo     @eljuanchosf   Contact Altoros Systems http://altoros.com/contact_us.html
Where is my scalable api?
Upcoming SlideShare
Loading in...5
×

Where is my scalable api?

709

Published on

Initially delivered at LA RubyConf 2013, this presentation describes how cutting-edge technology helped to triple performance and drastically cut costs in a mobile social game. Juan Pablo Genovese, a Ruby Architect from Altoros Systems Argentina, explains how, despite the extremely tight budget, the customer managed to:

- go from ~450 req/s to ~1300 req/s
- reduce the number of EC2 application servers from four to one
- provide fast and reliable video uploading and processing
- achieve very easy scaling with automation

while maintaining all the functions of the original RoR app.

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
709
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Where is my scalable api?"

  1. 1. Helping your customers to cut costs in their web APIs.
  2. 2.  16 years in Software Development From S/390 to Android In love with Ruby since 2006 Working in @eljuanchosf Love to dance Tango and play Blues guitar
  3. 3.  Set of programming components and standards. Open up your app to the world. Integration!
  4. 4.  Mobile social game (iOS & Android) Video upload & encoding JSON API AWS -> EC2/S3
  5. 5. Autoscale with Scalr.com
  6. 6.  Find a way to cut costs and improve performance. Provide a very easy way to scale the new solution. Maintain all the RoR application functionality, focusing on APIs for the mobile clients. Tight, TIGHT budget.
  7. 7.  Inspiration: Draw Something – http://goo.gl/hi7a6 Goliath Beanstalk Couchbase HAProxy as load balancer. Varnish
  8. 8.  Asynchronous (non-blocking) web server framework.  Based on EventMachine  Lightweight  Rack API & middleware support  Very simple yet powerful configuration  Fully async processing  Websockets out of the box  No callbacks!!  Low memory footprint (only 65 KB!)  0.3 ms from top -> bottom!  http://postrank-labs.github.com/goliath/
  9. 9.  Very simple, very fast work queue.  Saves memory (lots of it).  Multiple queues.  Generic interface.  Several Ruby clients to choose from.  Send your Ruby object as a JSON.  Parallel and asynchronous.  Scales VERY easily.  http://kr.github.com/beanstalkd/
  10. 10.  Ruby implementation of the Reactor Pattern  Highly scalable  Performance optimized  Mature & stable  Eliminates the complexities of threaded network programming.  Active community Examples: Thin & Goliath.
  11. 11.  October 1995 by Douglas Schmidt AKA Dispatcher or Notifier Handle requests delivered to an application by one or more clients. Single threaded by definition Separates application logic from the reactor implementation Task switching = no multithreading!
  12. 12. EM.run { EM::HttpRequest.new(‘http://www.example.com’).get.callback { |http| puts http.response }}
  13. 13. EM::HttpRequest.new(first_url).get.callback {|http| second_url = extract_next_url(http.response) EM::HttpRequest.new(second_url).get.callback {|http2| puts http2.response }}
  14. 14. require em-synchrony/em-httphttp = EM::HttpRequest.new(first_url).getsecond_url = extract_next_url(http.response)http2 = EM::HttpRequest.new(second_url).get No callbacks and still asynchronous!!!
  15. 15.  https://github.com/igrigorik/em-synchrony https://github.com/eventmachine/eventmachine/wiki/protoc ol-implementations
  16. 16.  Latest version has no built-in routing system. Ilya Grigorik (Goliath’s creator) suggests to start multiple Goliath servers, each one with one endpoint and use HAProxy or any reverse proxy to route the requests. That’s kind of cumbersome, don’t you think?
  17. 17.  Routing was done thru convention over configuration with a little of Ruby’s reflection abilities mixed with some inheritance:  http://server/api/game/CreateGame was redirected to the api/game/create_game.rb controller: class CreateGame < APIController . . . . end
  18. 18.  Goliath: add processes or servers and configure them in HAProxy. Couchbase: add servers to the cluster. Done!(we used Scalar to automate this, too)
  19. 19.  From ~450 req/s to ~1300 req/s. From 4 to 1 EC2 application servers. Triple performance while reducing costs. Video upload and processing fast and reliable: ~250 jobs/s
  20. 20.  Contact Juan Pablo @eljuanchosf Contact Altoros Systems http://altoros.com/contact_us.html
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×