Introduction to Resque

koshigoe 1,753 views 24 slides Nov 20, 2009
Slide 1
Slide 1 of 24
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24

About This Presentation

社内勉強会での発表に使ったスライドです。
GitHub で使われているジョブキューシステムの Resque について、簡単に説明しています。


Slide Content

Introduction to
Resque
Nov. 20, 2009 (Fri.)
Feedforce, Inc.
[email protected]

Resque
GitHub wÌ¿«¬å¢ïÅ rg;©á”
Ruby pî÷
´ãÒ‹ Ruby
JobObj.perform(*args)
Ô»Õ”µt Redis ›>;
git://github.com/defunkt/resque.git
ÞÇ»æï¬; WEB žÓ曉

Redis
Key-Value Store w°
http://code.google.com/p/redis/
ANSI C pî÷
POSIX ³µÂÜ Ípwˆ^›²
ìQ—ô—žÄÛ¿«—String, List, Set
ôSs‰—èÓæ­”³ãï—sr
Ý ïÔ»Õ”µq`o‹b;Dó

Redis
$telnet localhost 6379
SET keyname 3
bar
+OK
GET keyname
$3
bar

Redis
http://w.koshigoe.jp/study/

GitHub wAE
ìQ
4;¤´ãÒw¬Ý
4;¤´ãÒwË ý
»¬
ŒS
ôs push/pop
ë”§”w Ý6(run/fin)
æ`h´ãÒw¬Ý
ë”§”w 4ƒ
fat, old, too long
ì$së”§”
æ`h´ãÒxfw‡‡
6‰zrL`sM

\•sœi
žÄÛ¿«tO(1)p push/pop
ô
‘s`t ïµÄ”çpV”
ôTpV” Ruby «å žïÄ
Ú™wÈ»›¨òpV”
T:§¢ï»›–Q”
ìQ
Úµ»—µè”ÒwèÓæ­”³ãï
É¿Ä딫

Resque + Redis
A. Resis
©á”wðJ› Redis tÚd”
ë”§”wðJt ¯:›po”
D¹Qz ôTQz Ý6¹

Resque UeZÛOÄ
´ãÒwîæ
ë”§”—´ãÒ›¹b” WEB  ï»Ñ£”µ
tQówhŠw  fork ÞÃç
¦õDós曌’d”Ì¿«¤ïÅ
Hoptoad qT
„TzRedis wÍë”›¬d

DEMO
$ sudo gem install redis redis-namespace yajl-ruby \
--source=http://gemcutter.org
$ sudo gem install sinatra
$ git clone git://github.com/defunkt/resque.git
$ cd resque/examples/demo
$ rackup config.ru
$ open http://localhost:9292/

DEMO
$ VERBOSE=true QUEUE=default rake resque:work

DEMO
$ VVERBOSE=true QUEUE=default rake resque:work

DEMO
$ open http://localhost:9292/resque/

´ãҁ
class Archive
@queue = :file_serve
def self.perform(repo_id, branch = 'master')
repo = Repository.find(repo_id)
repo.create_archive(branch)
end
end

©á”t´ãÒ›
class Repository
def async_create_archive(branch)
Resque.enqueue(Archive, self.id, branch)
end
end

´ãÒ› “ Z`o
klass, args = Resque.reserve(:file_serve)
klass.perform(*args) if klass.respond_to? :perform

ë”§”Iˆ
$ cd app_root
$ QUEUE=file_serve rake resque:work

´ãÒw¾:x JSON
{
'class': 'Archive',
'args': [ 44, 'masterbrew' ]
}

´ãÒwæ›èŒ
´ãÒU«Ž›C\^dh’
é¬tGå`
Resque::Failure Þ´á”çtI^•”
æx Redis TwÌ¿«¤ïÅtI^•”
Resque x Hoptoad ›±Ù”Ä`oM”
http://www.hoptoadapp.com/pages/home

Resque vs DelayedJob
rj’TU ×t•oM”qMOépxsM
›Q›úr`z;Mt ao¬Rb‚V

Resque ›¬‚V
ó:w©á”UžA
:‹t‘”ŒSxÆA
Ruby ¦Ò´£«Äw‡‡¾:tIbžAUsM
‡ ×tŠGs©á”›{O
?UIVoM”T›¬Ý`hM
XwæÁŸ ‚›²q`oM”
Redis ›·¿Äž¿ÓpV”
RAM U –^bWsM

DelayedJob ›¬‚V
:‹t‘”ŒS›·‰
–Ô‡ ×tXw´ãÒ›îæb”˜ZpsM
©á”U –^XzbYtíX
XwæÁŸ ‚›²q`sM
ot?p‹©á”td[ˆhM
Redis w·¿Äž¿Ó›l‡sM

?q?
?lh?xsMZ?rz??????U?"
GitHub qMO(x$t G?s)?wUK?
Ruby ???swp(??w)q ?tÛ??M
Redis xAÏ‘M>U`oM”(?s`)
jlqiZ Ä`X → http://w.koshigoe.jp/study/
Resque
Redis

]ZÌzK“UqO]_M‡`h{