Contenu connexe Similaire à Background processing (20) Plus de Kerry Buckley (20) Background processing2. Why?
• Sending e-mail, SMS, tweets etc
• Resizing images
• Generating large PDFs
• Updating search indexes
• etc
3. Approaches
• Process/thread based
• Spawn
• Database-backed
• BackgroundDRb, BackgroundJob,
DelayedJob, JobFu, Background-Fu
• Queue-backed
• Sparrow, Starling, Kestrel, RabbitMQ,
ActiveMQ, SQS, Beanstalkd, Resque
6. Delayed::Job
• Extracted from Shopify
• Daemon runs with Rails environment
• Use collectiveidea’s fork
• 2.0 for Rails 2.x
• 2.1RC (from GitHub) for Rails 3
• ActiveRecord/MongoMapper/DataMapper
12. Custom Jobs
class NewsletterJob < Struct.new(:text, :emails)
def perform
emails.each do |e|
NewsletterMailer.deliver_text_to_email(text, e)
end
end
end
emails = Customers.all.collect(&:email)
Delayed::Job.enqueue NewsletterJob.new(text, emails)
15. Resque
• Created by GitHub
• Jobs persisted to Redis as JSON
• Multiple queues
• Parent/child forking architecture
• Web monitoring interface
17. Delaying methods
class Archive
@queue = :file_serve
def self.perform(repo_id, branch = 'master')
repo = Repository.find(repo_id)
repo.create_archive(branch)
end
end
Resque.enqueue(Archive, repository.id, branch)
18. Running queues
$ QUEUE=queue_name rake resque:work
$ QUEUES=file_serve,warm_cache rake resque:work
$ QUEUES=critical,high,low rake resque:work
$ QUEUE=* rake resque:work
$ COUNT=5 QUEUE=* rake resque:workers