SlideShare uma empresa Scribd logo
1 de 117
Baixar para ler offline
Asynchronous Processing
               Jonathan Dahl




              (and RailSpikes,
                    Slantwise,
                    Zencoder,
                          etc.)
I.
    What is it, and
why should I care?
Wife:   What are you talking about at
        RailsConf this year?

Jon:    Asynchronous Processing


Wife:   [changes subject]
important
     tool
(ahem...)
Related Concepts

• Background Processing
• Parallel Processing
• Distributed Processing
has_attachment :storage => :s3
Image Upload   (   15 seconds)



 Send to S3


  Browser
 Response
Image Upload



 Send to S3    (   15 seconds)


  Browser
 Response
Image Upload



 Send to S3


  Browser
               (   3 seconds)
 Response
Image Upload



 Send to S3


  Browser
 Response
has_attachment :storage => :file_system
Image Upload   (   15 seconds)


  Browser
 Response


 Send to S3
Image Upload


  Browser
               (   3 seconds)
 Response


 Send to S3    (   who cares?)
has_attachment :storage => :s3,
               :thumbnails => {
                 :thumb => '100x100!',
                 :small => '240x180>',
                 :medium => '500x500>' }
Image Upload

Generate 3 Thumbnails

Send Thumbnail A to S3

Send Thumbnail B to S3

Send Thumbnail C to S3

  Send Original to S3

  Browser Response
Image Upload

Generate 3 Thumbnails

Send Thumbnail A to S3

Send Thumbnail B to S3

Send Thumbnail C to S3

  Send Original to S3

  Browser Response
Image Upload

Generate 3 Thumbnails

Send Thumbnail A to S3

Send Thumbnail B to S3

Send Thumbnail C to S3

  Send Original to S3

  Browser Response
Image Upload

Generate 3 Thumbnails

Send Thumbnail A to S3

Send Thumbnail B to S3

Send Thumbnail C to S3

  Send Original to S3

  Browser Response
Image Upload

Generate 3 Thumbnails

Send Thumbnail A to S3

Send Thumbnail B to S3

Send Thumbnail C to S3

  Send Original to S3

  Browser Response
Image Upload

Generate 3 Thumbnails

Send Thumbnail A to S3

Send Thumbnail B to S3

Send Thumbnail C to S3

  Send Original to S3

  Browser Response
Image Upload

Generate 3 Thumbnails

Send Thumbnail A to S3

Send Thumbnail B to S3

Send Thumbnail C to S3

  Send Original to S3

  Browser Response
II.
When do I need it?
Time
Request

• Method (GET, POST)
• URI (host, port, path)
• Parameters
Response

• Status (200, 404, 500)
• Metadata (content type, server info,
  etc.)

• Body (xml, html, file)
Resources
Trigger
HTTP trigger - browser request
HTTP trigger - API request

      GET /photos/1.xml HTTP/1.1
      Host: example.com:80
Human trigger - capistrano

      cap staging deploy
Human trigger - rake

      rake db:migrate
Human trigger - console
     $ script/console production
     Loading production environment
     (Rails 2.0.2)
     >> Photo.destroy_all
No trigger?



    - Send email in 2 hours
    - Sync data at 3:00am PST
    - Notify admin when disk is 90% full
    - Expire sessions that are inactive
    - Archive records that exceed quota
1. Time
2. Resources
3. Trigger
Concrete examples
• Sending mail
• Transcoding video/audio
• Storing images on S3
• Receiving email
• Synching with outside database
• Complex computations
class Emailer < ActionMailer::ARMailer
Zencoder
             User



         Video Sharing
            Website

                                  Data Storage
                                  (Amazon S3)
             Zencoder
             Manager

Worker                   Worker

   Worker           Worker
class Photo < ActiveRecord::Base
  after_create :background_s3_upload
  def background_s3_upload
    Bj.submit quot;./script/runner ./jobs/send_to_s3.rb #{self.id}quot;
  end
end
III.
     So how do you
decide what to use?
be seamless
how reliable?
when should it run?
dependencies and
system complexity
scaling
   and/or
performance
IV.
The simple solution:
      fork or thread
Parallel vs. Background
1. Stay within one
     request
2. thread.join
3. ActiveRecord
ActiveRecord::Base.allow_concurrency = true
fire and forget
Spawn


spawn(:method => :fork) do
  # do something
end
1. Time
2. Resources
  3. Trigger
V.
More robust
  solutions
Task Storage
Task Trigger
Task Storage

• task details (what happens?)
• priority
• when to run
Task Trigger

• worker pulling jobs
• time-based
• execute immediately
Task Storage   Task Trigger
   Database       daemon
Message Queue      cron
Task Storage   Task Trigger
   Database       daemon
Message Queue      cron
create_table   quot;jobsquot; do |t|
  t.text       quot;commandquot;
  t.integer    quot;priorityquot;
  t.integer    quot;pidquot;
  t.datetime   quot;submitted_atquot;
  t.datetime   quot;started_atquot;
  t.datetime   quot;finished_atquot;
  t.text       quot;resultquot;
end
create_table   quot;photosquot; do |t|
  t.string     quot;filenamequot;
  t.datetime   quot;created_atquot;
  t.datetime   quot;processed_atquot;
end
create_table   quot;photosquot; do |t|
  t.string     quot;filenamequot;
  t.datetime   quot;created_atquot;
  t.datetime   quot;processed_atquot;
end
Task Storage   Task Trigger
   Database       daemon
Message Queue      cron
Task Storage   Task Trigger
   Database       daemon
Message Queue      cron
• Amazon SQS
• Websphere MQ
• Starling
• JMS
• beanstalkd
queue = SQS.get_queue(quot;task_listquot;)
put message


queue.send_message quot;process:2872quot;
receive message


message = queue.receive_message
Starling


starling -h 192.168.1.1 -d
require 'memcache'
starling = MemCache.new('192.168.1.1:22122')

# Put messages onto a queue:
starling.set('my_queue', 12345)

# Get message from the queue:
starling.get('my_queue')
Task Storage   Task Trigger
   Database       daemon
Message Queue      cron
storage choice?


• queue: optimized for performance
• database: you’ve already got one
Task Storage   Task Trigger
   Database       daemon
Message Queue      cron
daemon
#!/usr/bin/env ruby
class JobRequester < SimpleDaemon::Base
  def self.start
    loop { Job.process_next }
  end
end

JobRequester.daemonize
Task Storage   Task Trigger
   Database       daemon
Message Queue      cron
0 6 * * * script/runner jobs/send_emails.rb
cronedit
require 'cronedit'

CronEdit::Crontab.Add quot;send-emailsquot;, {
  :minute => 0,
  :hour => 6,
  :command => quot;script/runner jobs/send_emails.rbquot;
}

CronEdit::Crontab.Remove 'old-task'
trigger choice


• process: always running
• cron: as reliable as your operating
  system
BackgroundDRb
class BillingWorker < BackgrounDRb::MetaWorker
  set_worker_name :billing_worker
  def create(args = nil)
    # this method is called when worker is loaded for the first time
  end

  def charge_customer(customer_id = nil)
    logger.info 'charging customer now'
  end
end

MiddleMan.worker(:billing_worker).charge_customer(current_customer.id)
:backgroundrb:
  :ip: 0.0.0.0

:development:
  :backgroundrb:
    :port: 11111
    :log: foreground

:production:
  :backgroundrb:
    :port: 22222
    :lazy_load: true
    :debug_log: false

./script/backgroundrb start
AP4R
def MyController
  def queue
    ap4r.async_to({:action => 'download'}, {:story =>
story.id, :url => params[:url]})
  end

  def download
    # long-running task
  end
end
Bj


Acronym
create_table   quot;bj_jobquot;, :primary_key => quot;bj
  t.text       quot;commandquot;
  t.text       quot;statequot;
  t.integer    quot;priorityquot;
  t.text       quot;tagquot;
  t.integer    quot;is_restartablequot;
  t.text       quot;submitterquot;
  t.text       quot;runnerquot;
  t.integer    quot;pidquot;
  t.datetime   quot;submitted_atquot;
  t.datetime   quot;started_atquot;
  t.datetime   quot;finished_atquot;
  t.text       quot;envquot;
Bj.submit quot;./script/runner ./jobs/task.rbquot;
after_create :bj_send_to_s3

def bj_send_to_s3
  Bj.submit quot;./script/runner ./jobs/send.rb #{id}quot;
end
Workling

# environment config
Workling::Remote.dispatcher =
 Workling::Remote::Runners::StarlingRunner.new
# task class
class ImageWorker < Workling::Base
  def send_to_s3(options = {})
    # put file to S3
  end
end
# trigger asynchronous job
ImageWorker.asynch_send_to_s3(:image_id => 2927)
script/workling_starling_client start
Pitfalls
race conditions
alive, but stalled
VI.
         some
recommendations
general purpose


      Bj
distributed processing


         SQS
  (+ custom worker)
time-scheduled


      cron
(+ rake or script)
speed + scalability


Starling/Workling
Thanks!
 Jonathan Dahl



Slides at RailSpikes
http://railspikes.com

Mais conteúdo relacionado

Mais procurados

Scaling Twitter
Scaling TwitterScaling Twitter
Scaling TwitterBlaine
 
Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Fastly
 
Faster PHP apps using Queues and Workers
Faster PHP apps using Queues and WorkersFaster PHP apps using Queues and Workers
Faster PHP apps using Queues and WorkersRichard Baker
 
Service Worker Presentation
Service Worker PresentationService Worker Presentation
Service Worker PresentationKyle Dorman
 
Real World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker CachingReal World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker CachingChris Love
 
HTTP caching with Varnish
HTTP caching with VarnishHTTP caching with Varnish
HTTP caching with VarnishDavid de Boer
 
Going crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyGoing crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyDavid de Boer
 
Single page apps with drupal 7
Single page apps with drupal 7Single page apps with drupal 7
Single page apps with drupal 7Chris Tankersley
 
0-60 with Goliath: Building High Performance Ruby Web-Services
0-60 with Goliath: Building High Performance Ruby Web-Services0-60 with Goliath: Building High Performance Ruby Web-Services
0-60 with Goliath: Building High Performance Ruby Web-ServicesIlya Grigorik
 
Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript FrameworkAll Things Open
 
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...Alexander Lisachenko
 
PWA 與 Service Worker
PWA 與 Service WorkerPWA 與 Service Worker
PWA 與 Service WorkerAnna Su
 
Mad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not GoogleMad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not GoogleAbel Muíño
 
Service Workers for Performance
Service Workers for PerformanceService Workers for Performance
Service Workers for PerformancePatrick Meenan
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a ManifestPuppet
 
Migraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sitesMigraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sitesdrupalindia
 
Ruby/rails performance and profiling
Ruby/rails performance and profilingRuby/rails performance and profiling
Ruby/rails performance and profilingDanny Guinther
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHPKing Foo
 
Docker and jvm. A good idea?
Docker and jvm. A good idea?Docker and jvm. A good idea?
Docker and jvm. A good idea?Christopher Batey
 
PowerShell: Automation for everyone
PowerShell: Automation for everyonePowerShell: Automation for everyone
PowerShell: Automation for everyoneGavin Barron
 

Mais procurados (20)

Scaling Twitter
Scaling TwitterScaling Twitter
Scaling Twitter
 
Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015
 
Faster PHP apps using Queues and Workers
Faster PHP apps using Queues and WorkersFaster PHP apps using Queues and Workers
Faster PHP apps using Queues and Workers
 
Service Worker Presentation
Service Worker PresentationService Worker Presentation
Service Worker Presentation
 
Real World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker CachingReal World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker Caching
 
HTTP caching with Varnish
HTTP caching with VarnishHTTP caching with Varnish
HTTP caching with Varnish
 
Going crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyGoing crazy with Varnish and Symfony
Going crazy with Varnish and Symfony
 
Single page apps with drupal 7
Single page apps with drupal 7Single page apps with drupal 7
Single page apps with drupal 7
 
0-60 with Goliath: Building High Performance Ruby Web-Services
0-60 with Goliath: Building High Performance Ruby Web-Services0-60 with Goliath: Building High Performance Ruby Web-Services
0-60 with Goliath: Building High Performance Ruby Web-Services
 
Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript Framework
 
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
Handling 10k requests per second with Symfony and Varnish - SymfonyCon Berlin...
 
PWA 與 Service Worker
PWA 與 Service WorkerPWA 與 Service Worker
PWA 與 Service Worker
 
Mad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not GoogleMad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not Google
 
Service Workers for Performance
Service Workers for PerformanceService Workers for Performance
Service Workers for Performance
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a Manifest
 
Migraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sitesMigraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sites
 
Ruby/rails performance and profiling
Ruby/rails performance and profilingRuby/rails performance and profiling
Ruby/rails performance and profiling
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHP
 
Docker and jvm. A good idea?
Docker and jvm. A good idea?Docker and jvm. A good idea?
Docker and jvm. A good idea?
 
PowerShell: Automation for everyone
PowerShell: Automation for everyonePowerShell: Automation for everyone
PowerShell: Automation for everyone
 

Destaque

Agri Innovation by Carl Fletcher, OMAFRA
Agri Innovation by Carl Fletcher, OMAFRAAgri Innovation by Carl Fletcher, OMAFRA
Agri Innovation by Carl Fletcher, OMAFRAInvest in Middlesex
 
Redis: An introduction
Redis: An introductionRedis: An introduction
Redis: An introductionĐặng Thảo
 
CYNTHIA L STOEBICH Jan 2016
CYNTHIA L STOEBICH Jan 2016CYNTHIA L STOEBICH Jan 2016
CYNTHIA L STOEBICH Jan 2016Cynthia Stoebich
 
P&G 2002 Annual Report
P&G 2002 Annual ReportP&G 2002 Annual Report
P&G 2002 Annual Reportfinance3
 
INFORME FORO PARTICIPATIVO. PUERTO DE BARBATE.
INFORME FORO PARTICIPATIVO. PUERTO DE BARBATE.INFORME FORO PARTICIPATIVO. PUERTO DE BARBATE.
INFORME FORO PARTICIPATIVO. PUERTO DE BARBATE.inmamine
 
fmc technologies 2002ar
fmc technologies 2002arfmc technologies 2002ar
fmc technologies 2002arfinance50
 
Eco brasil indigena_mma+funai_ecoturismoti_resumo_jun1998
Eco brasil indigena_mma+funai_ecoturismoti_resumo_jun1998Eco brasil indigena_mma+funai_ecoturismoti_resumo_jun1998
Eco brasil indigena_mma+funai_ecoturismoti_resumo_jun1998Brazil Ecotravel
 
PalmaActiva: Presentacio eureka 2012 - dossier de premsa
PalmaActiva: Presentacio eureka 2012 - dossier de premsaPalmaActiva: Presentacio eureka 2012 - dossier de premsa
PalmaActiva: Presentacio eureka 2012 - dossier de premsaPalmaActiva
 
El rol del docente en ead
El rol del docente en eadEl rol del docente en ead
El rol del docente en eadjulia_martinez
 
19. salmo 19 cómo conocer a dios
19.  salmo 19 cómo conocer a dios19.  salmo 19 cómo conocer a dios
19. salmo 19 cómo conocer a diosComparte la Biblia
 
Zwinnie i pod kontrolą - SCRUM vs COBIT
Zwinnie i pod kontrolą - SCRUM vs COBITZwinnie i pod kontrolą - SCRUM vs COBIT
Zwinnie i pod kontrolą - SCRUM vs COBITPrzemek Wysota
 
Alineamiento Estratégico de las Tecnologías de Información
Alineamiento Estratégico de las Tecnologías de InformaciónAlineamiento Estratégico de las Tecnologías de Información
Alineamiento Estratégico de las Tecnologías de InformaciónWalter Edison Alanya Flores
 

Destaque (20)

Agri Innovation by Carl Fletcher, OMAFRA
Agri Innovation by Carl Fletcher, OMAFRAAgri Innovation by Carl Fletcher, OMAFRA
Agri Innovation by Carl Fletcher, OMAFRA
 
Redis: An introduction
Redis: An introductionRedis: An introduction
Redis: An introduction
 
CYNTHIA L STOEBICH Jan 2016
CYNTHIA L STOEBICH Jan 2016CYNTHIA L STOEBICH Jan 2016
CYNTHIA L STOEBICH Jan 2016
 
P&G 2002 Annual Report
P&G 2002 Annual ReportP&G 2002 Annual Report
P&G 2002 Annual Report
 
INFORME FORO PARTICIPATIVO. PUERTO DE BARBATE.
INFORME FORO PARTICIPATIVO. PUERTO DE BARBATE.INFORME FORO PARTICIPATIVO. PUERTO DE BARBATE.
INFORME FORO PARTICIPATIVO. PUERTO DE BARBATE.
 
fmc technologies 2002ar
fmc technologies 2002arfmc technologies 2002ar
fmc technologies 2002ar
 
Eco brasil indigena_mma+funai_ecoturismoti_resumo_jun1998
Eco brasil indigena_mma+funai_ecoturismoti_resumo_jun1998Eco brasil indigena_mma+funai_ecoturismoti_resumo_jun1998
Eco brasil indigena_mma+funai_ecoturismoti_resumo_jun1998
 
PalmaActiva: Presentacio eureka 2012 - dossier de premsa
PalmaActiva: Presentacio eureka 2012 - dossier de premsaPalmaActiva: Presentacio eureka 2012 - dossier de premsa
PalmaActiva: Presentacio eureka 2012 - dossier de premsa
 
201217 es es
201217 es es201217 es es
201217 es es
 
El rol del docente en ead
El rol del docente en eadEl rol del docente en ead
El rol del docente en ead
 
Perseus
PerseusPerseus
Perseus
 
Psicodelia
PsicodeliaPsicodelia
Psicodelia
 
19. salmo 19 cómo conocer a dios
19.  salmo 19 cómo conocer a dios19.  salmo 19 cómo conocer a dios
19. salmo 19 cómo conocer a dios
 
Intro to Angel.co | Tandem
Intro to Angel.co | TandemIntro to Angel.co | Tandem
Intro to Angel.co | Tandem
 
Teoría de señales
Teoría de señalesTeoría de señales
Teoría de señales
 
Resiliencia Organizacional
Resiliencia OrganizacionalResiliencia Organizacional
Resiliencia Organizacional
 
Zwinnie i pod kontrolą - SCRUM vs COBIT
Zwinnie i pod kontrolą - SCRUM vs COBITZwinnie i pod kontrolą - SCRUM vs COBIT
Zwinnie i pod kontrolą - SCRUM vs COBIT
 
Mi primer día en la Guardería: apoyar la adaptación y promover seguridad en e...
Mi primer día en la Guardería: apoyar la adaptación y promover seguridad en e...Mi primer día en la Guardería: apoyar la adaptación y promover seguridad en e...
Mi primer día en la Guardería: apoyar la adaptación y promover seguridad en e...
 
Mini Diccionario español - japonés
Mini Diccionario español -  japonésMini Diccionario español -  japonés
Mini Diccionario español - japonés
 
Alineamiento Estratégico de las Tecnologías de Información
Alineamiento Estratégico de las Tecnologías de InformaciónAlineamiento Estratégico de las Tecnologías de Información
Alineamiento Estratégico de las Tecnologías de Información
 

Semelhante a Asynchronous Processing: Why and How to Use It in Rails Apps

Scaling python webapps from 0 to 50 million users - A top-down approach
Scaling python webapps from 0 to 50 million users - A top-down approachScaling python webapps from 0 to 50 million users - A top-down approach
Scaling python webapps from 0 to 50 million users - A top-down approachJinal Jhaveri
 
Building Efficient and Reliable Crawler System With Sidekiq Enterprise
Building Efficient and Reliable Crawler System With Sidekiq EnterpriseBuilding Efficient and Reliable Crawler System With Sidekiq Enterprise
Building Efficient and Reliable Crawler System With Sidekiq EnterpriseGary Chu
 
Performance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsPerformance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsSerge Smetana
 
MongoDB World 2019: Becoming an Ops Manager Backup Superhero!
MongoDB World 2019: Becoming an Ops Manager Backup Superhero!MongoDB World 2019: Becoming an Ops Manager Backup Superhero!
MongoDB World 2019: Becoming an Ops Manager Backup Superhero!MongoDB
 
Christoph Stoettner - Save my time using scripts
Christoph Stoettner - Save my time using scriptsChristoph Stoettner - Save my time using scripts
Christoph Stoettner - Save my time using scriptsLetsConnect
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup PerformanceJustin Cataldo
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the CloudWesley Beary
 
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013Amazon Web Services
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)Wesley Beary
 
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014Amazon Web Services
 
Talk at NCRR P41 Director's Meeting
Talk at NCRR P41 Director's MeetingTalk at NCRR P41 Director's Meeting
Talk at NCRR P41 Director's MeetingDeepak Singh
 
Systems Bioinformatics Workshop Keynote
Systems Bioinformatics Workshop KeynoteSystems Bioinformatics Workshop Keynote
Systems Bioinformatics Workshop KeynoteDeepak Singh
 
Heavy Web Optimization: Backend
Heavy Web Optimization: BackendHeavy Web Optimization: Backend
Heavy Web Optimization: BackendVõ Duy Tuấn
 
Monitoring with Syslog and EventMachine (RailswayConf 2012)
Monitoring  with  Syslog and EventMachine (RailswayConf 2012)Monitoring  with  Syslog and EventMachine (RailswayConf 2012)
Monitoring with Syslog and EventMachine (RailswayConf 2012)Wooga
 
Asynchronous Personalization at Groupon - JSConf 2011
Asynchronous Personalization at Groupon - JSConf 2011Asynchronous Personalization at Groupon - JSConf 2011
Asynchronous Personalization at Groupon - JSConf 2011jonpliske
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardSV Ruby on Rails Meetup
 
"Load Testing Distributed Systems with NBomber 4.0", Anton Moldovan
"Load Testing Distributed Systems with NBomber 4.0",  Anton Moldovan"Load Testing Distributed Systems with NBomber 4.0",  Anton Moldovan
"Load Testing Distributed Systems with NBomber 4.0", Anton MoldovanFwdays
 
Streaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via StreamingStreaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via StreamingAll Things Open
 

Semelhante a Asynchronous Processing: Why and How to Use It in Rails Apps (20)

Performance patterns
Performance patternsPerformance patterns
Performance patterns
 
Scaling python webapps from 0 to 50 million users - A top-down approach
Scaling python webapps from 0 to 50 million users - A top-down approachScaling python webapps from 0 to 50 million users - A top-down approach
Scaling python webapps from 0 to 50 million users - A top-down approach
 
Building Efficient and Reliable Crawler System With Sidekiq Enterprise
Building Efficient and Reliable Crawler System With Sidekiq EnterpriseBuilding Efficient and Reliable Crawler System With Sidekiq Enterprise
Building Efficient and Reliable Crawler System With Sidekiq Enterprise
 
Performance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsPerformance Optimization of Rails Applications
Performance Optimization of Rails Applications
 
MongoDB World 2019: Becoming an Ops Manager Backup Superhero!
MongoDB World 2019: Becoming an Ops Manager Backup Superhero!MongoDB World 2019: Becoming an Ops Manager Backup Superhero!
MongoDB World 2019: Becoming an Ops Manager Backup Superhero!
 
Christoph Stoettner - Save my time using scripts
Christoph Stoettner - Save my time using scriptsChristoph Stoettner - Save my time using scripts
Christoph Stoettner - Save my time using scripts
 
Presentation Tier optimizations
Presentation Tier optimizationsPresentation Tier optimizations
Presentation Tier optimizations
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup Performance
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
 
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
 
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
 
Talk at NCRR P41 Director's Meeting
Talk at NCRR P41 Director's MeetingTalk at NCRR P41 Director's Meeting
Talk at NCRR P41 Director's Meeting
 
Systems Bioinformatics Workshop Keynote
Systems Bioinformatics Workshop KeynoteSystems Bioinformatics Workshop Keynote
Systems Bioinformatics Workshop Keynote
 
Heavy Web Optimization: Backend
Heavy Web Optimization: BackendHeavy Web Optimization: Backend
Heavy Web Optimization: Backend
 
Monitoring with Syslog and EventMachine (RailswayConf 2012)
Monitoring  with  Syslog and EventMachine (RailswayConf 2012)Monitoring  with  Syslog and EventMachine (RailswayConf 2012)
Monitoring with Syslog and EventMachine (RailswayConf 2012)
 
Asynchronous Personalization at Groupon - JSConf 2011
Asynchronous Personalization at Groupon - JSConf 2011Asynchronous Personalization at Groupon - JSConf 2011
Asynchronous Personalization at Groupon - JSConf 2011
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
 
"Load Testing Distributed Systems with NBomber 4.0", Anton Moldovan
"Load Testing Distributed Systems with NBomber 4.0",  Anton Moldovan"Load Testing Distributed Systems with NBomber 4.0",  Anton Moldovan
"Load Testing Distributed Systems with NBomber 4.0", Anton Moldovan
 
Streaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via StreamingStreaming Way to Webscale: How We Scale Bitly via Streaming
Streaming Way to Webscale: How We Scale Bitly via Streaming
 

Mais de Jonathan Dahl

The impact of encoding on content delivery: four ways to optimize video quality
The impact of encoding on content delivery: four ways to optimize video qualityThe impact of encoding on content delivery: four ways to optimize video quality
The impact of encoding on content delivery: four ways to optimize video qualityJonathan Dahl
 
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano Model
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano ModelDesigning Great APIs: Learning from Jony Ive, Orwell, and the Kano Model
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano ModelJonathan Dahl
 
Advanced API Design: how an awesome API can help you make friends, get rich, ...
Advanced API Design: how an awesome API can help you make friends, get rich, ...Advanced API Design: how an awesome API can help you make friends, get rich, ...
Advanced API Design: how an awesome API can help you make friends, get rich, ...Jonathan Dahl
 
Advanced API Design: how an awesome API can attract friends, make you rich, a...
Advanced API Design: how an awesome API can attract friends, make you rich, a...Advanced API Design: how an awesome API can attract friends, make you rich, a...
Advanced API Design: how an awesome API can attract friends, make you rich, a...Jonathan Dahl
 
Programming and Minimalism: Lessons from Orwell and the Clash
Programming and Minimalism: Lessons from Orwell and the ClashProgramming and Minimalism: Lessons from Orwell and the Clash
Programming and Minimalism: Lessons from Orwell and the ClashJonathan Dahl
 
Aristotle and the Art of Software Development (Agile 2009)
Aristotle and the Art of Software Development (Agile 2009)Aristotle and the Art of Software Development (Agile 2009)
Aristotle and the Art of Software Development (Agile 2009)Jonathan Dahl
 
Rails and alternative ORMs
Rails and alternative ORMsRails and alternative ORMs
Rails and alternative ORMsJonathan Dahl
 
Aristotle and the Art of Software Development
Aristotle and the Art of Software DevelopmentAristotle and the Art of Software Development
Aristotle and the Art of Software DevelopmentJonathan Dahl
 
EC2, MapReduce, and Distributed Processing
EC2, MapReduce, and Distributed ProcessingEC2, MapReduce, and Distributed Processing
EC2, MapReduce, and Distributed ProcessingJonathan Dahl
 

Mais de Jonathan Dahl (9)

The impact of encoding on content delivery: four ways to optimize video quality
The impact of encoding on content delivery: four ways to optimize video qualityThe impact of encoding on content delivery: four ways to optimize video quality
The impact of encoding on content delivery: four ways to optimize video quality
 
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano Model
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano ModelDesigning Great APIs: Learning from Jony Ive, Orwell, and the Kano Model
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano Model
 
Advanced API Design: how an awesome API can help you make friends, get rich, ...
Advanced API Design: how an awesome API can help you make friends, get rich, ...Advanced API Design: how an awesome API can help you make friends, get rich, ...
Advanced API Design: how an awesome API can help you make friends, get rich, ...
 
Advanced API Design: how an awesome API can attract friends, make you rich, a...
Advanced API Design: how an awesome API can attract friends, make you rich, a...Advanced API Design: how an awesome API can attract friends, make you rich, a...
Advanced API Design: how an awesome API can attract friends, make you rich, a...
 
Programming and Minimalism: Lessons from Orwell and the Clash
Programming and Minimalism: Lessons from Orwell and the ClashProgramming and Minimalism: Lessons from Orwell and the Clash
Programming and Minimalism: Lessons from Orwell and the Clash
 
Aristotle and the Art of Software Development (Agile 2009)
Aristotle and the Art of Software Development (Agile 2009)Aristotle and the Art of Software Development (Agile 2009)
Aristotle and the Art of Software Development (Agile 2009)
 
Rails and alternative ORMs
Rails and alternative ORMsRails and alternative ORMs
Rails and alternative ORMs
 
Aristotle and the Art of Software Development
Aristotle and the Art of Software DevelopmentAristotle and the Art of Software Development
Aristotle and the Art of Software Development
 
EC2, MapReduce, and Distributed Processing
EC2, MapReduce, and Distributed ProcessingEC2, MapReduce, and Distributed Processing
EC2, MapReduce, and Distributed Processing
 

Último

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 

Último (20)

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 

Asynchronous Processing: Why and How to Use It in Rails Apps