Approaches to Background Jobs
Wednesday, May 23, 12
Slide 2
Slide 2 text
Architectures
Wednesday, May 23, 12
Slide 3
Slide 3 text
“one soul, two bodies”
Wednesday, May 23, 12
Slide 4
Slide 4 text
Wednesday, May 23, 12
Slide 5
Slide 5 text
prenuptial agreement
Wednesday, May 23, 12
Slide 6
Slide 6 text
Wednesday, May 23, 12
Slide 7
Slide 7 text
Types of Jobs
Wednesday, May 23, 12
Slide 8
Slide 8 text
Run-once
(Resque, DelayedJob)
Wednesday, May 23, 12
Slide 9
Slide 9 text
Event occurs,
job enqueued
Worker
instantiate job
model Load AR
object(s)
model Create AR
object(s)
Hit API
job
{id, token}
job goes away
Wednesday, May 23, 12
Slide 10
Slide 10 text
Recurring jobs
(Recursive queuing)
Wednesday, May 23, 12
Slide 11
Slide 11 text
Event occurs,
job enqueued
Worker
instantiate job
model Load AR
object(s)
model Create AR
object(s)
Hit API
job
{id, token}
Wait 90s
re-enqueue
self
Wednesday, May 23, 12
Slide 12
Slide 12 text
Scheduled jobs
(resque-scheduler, cron)
Wednesday, May 23, 12
Slide 13
Slide 13 text
Event occurs,
job scheduled
Worker
instantiate job
model Load AR
object(s)
model Create AR
object(s)
Hit API
job
{id, token}
job goes away
90s
enqueue job
Wednesday, May 23, 12
models,
views,
controllers
jobs, client
libraries
message queue
m
“User 123 linked twitter account with token ‘abc’”
Wednesday, May 23, 12
Slide 31
Slide 31 text
models,
views,
controllers
jobs, client
libraries
message queue
m
“User 123 linked twitter account with token ‘abc’”
Wednesday, May 23, 12
Slide 32
Slide 32 text
models,
views,
controllers
jobs, client
libraries
message queue
m
Consumes
messages,
acts
Wednesday, May 23, 12
Slide 33
Slide 33 text
models,
views,
controllers
jobs, client
libraries
message queue
m
Consumes
messages,
acts
Wednesday, May 23, 12
Slide 34
Slide 34 text
models,
views,
controllers
jobs, client
libraries
message queue
m
“Every 30 seconds, I’ll hit the twitter api with token
‘abc’ and then the feed engine api for user 123”
Wednesday, May 23, 12
Slide 35
Slide 35 text
Wednesday, May 23, 12
Slide 36
Slide 36 text
pros:
increased flexibility & control
horizontal scaling
smaller apps
fewer specs per app
cons:
burden of complexity on you
Wednesday, May 23, 12