Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Qudoを使ったJob queue system
Search
shibayu36
March 18, 2012
Technology
2
2.3k
Qudoを使ったJob queue system
Kyoto.pm Tech Talks #01で
shibayu36
March 18, 2012
Tweet
Share
More Decks by shibayu36
See All by shibayu36
今の生産性改善活動で大切にしている考え方
shibayu36
8
8.5k
エンジニアメンター制度の効果的な運用を目指して/improve-mentor-system
shibayu36
27
10k
グレードイメージ具体化のため昇格理由を公開する
shibayu36
8
5.8k
新機能作成時に開発ブランチに細かくmergeしていく戦略/merge-strategy-for-new-feature
shibayu36
6
17k
一から始めるJavaScriptユニットテスト/js-unit-test-from-scratch
shibayu36
8
33k
技術ブログを書くことについて/writing-tech-blog
shibayu36
17
26k
はてなと技術研修
shibayu36
1
6.4k
はてなブログチームの開発フローとGitHub
shibayu36
145
76k
課題をテストで解決する
shibayu36
2
2.3k
Other Decks in Technology
See All in Technology
17年のQA経験が導いたスクラムマスターへの道 / 17 Years in QA to Scrum Master
toma_sm
0
420
大規模アジャイル開発のリアル!コミュニケーション×進捗管理×高品質
findy_eventslides
0
580
Security response for open source ecosystems
frasertweedale
0
100
ひまプロプレゼンツ 「エンジニア格付けチェック 〜春の公開収録スペシャル〜」
kaaaichi
0
150
Vision Language Modelを活用した メルカリの類似画像レコメンドの性能改善
yadayuki
9
1.3k
3/26 クラウド食堂LT #2 GenU案件を通して学んだ教訓 登壇資料
ymae
1
210
Road to SRE NEXT@仙台 IVRyの組織の形とSLO運用の現状
abnoumaru
0
400
非エンジニアにも伝えるメールセキュリティ / Email security for non-engineers
ykanoh
13
4k
Agile TPIを活用した品質改善事例
tomasagi
0
350
Go製のマイグレーションツールの git-schemalex の紹介と運用方法
shinnosuke_kishida
1
410
Explainable Software Engineering in the Public Sector
avandeursen
0
370
OPENLOGI Company Profile
hr01
0
61k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Cult of Friendly URLs
andyhume
78
6.3k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
We Have a Design System, Now What?
morganepeng
51
7.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
12
610
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.5k
KATA
mclloyd
29
14k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
GitHub's CSS Performance
jonrohan
1030
460k
Documentation Writing (for coders)
carmenintech
69
4.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
Transcript
2VEPΛͬͨ KPCRVFVFTZTUFN id:shiba_yu36 2012/03/17 Kyoto.pm Tech Talks #01 20123݄18༵
ࣗݾհ 20123݄18༵
TIJCB@ZV TIJCBZV PSFUD 20123݄18༵
!גࣜձࣾͯͳ • ՝ۚλΠϜϥΠϯͳͲϓϥοτ ϑΥʔϜ෦Λ୲ • ֎෦αʔϏε࿈ܞ • ςετڥඋ 20123݄18༵
QFSM w,ZPUPQN w$1"/ w8FC4FSWJDF#JUMZ w%#*Y%BUB'BDUPSZ w1SF1"/ͨ·ʹखͬͯ·͢ 20123݄18༵
1SF1"/։ൃͰKPCRVFVFTZTUFNΛ ͏ػձ͕͋ͬͨͷͰɺͦͷΈͱ 2VEPʹΑΔ࣮Λհ͠·͢ɻ 20123݄18༵
ΞδΣϯμ wKPCRVFVFTZTUFN w2VEPΛ࣮ͬͨ wͬͯΈͯ ͋·ΓKPCRVFVFTZTUFNΛ ͬͨ͜ͱͷͳ͍ਓ͚ 20123݄18༵
20123݄18༵
KPCRVFVFTZTUFNʁ ΞϓϦέʔγϣϯͷόοΫάϥϯ υଆͰඇಉظͰॲཧΛ࣮ߦ͢ΔͨΊ ͷΈ 20123݄18༵
ϝϦοτ wॲཧΛޙճ͠ wϦΞϧλΠϜੑ͕ඞཁͳ͍ͷ wΤϥʔϋϯυϦϯά wϦτϥΠ wεέʔϧ 20123݄18༵
KPCRVFVFTZTUFNͷߏ w+PCΛFORVFVF͢Δ෦ DMJFOU w+PCͷॲཧຊମ XPSLFS w+PCͷ࣮ߦͷཧ XPSLFSNBOBHFS 20123݄18༵
Ұྫ 20123݄18༵
QFSMͰͷ KPCRVFVFTZTUFN w(FBSNBO wதؒEBFNPOར༻ w5IF4DIXBSU[ w3%#.4Λ͏ wଟ͘ͷ࣮͕͋Δ 20123݄18༵
QFSMͰͷ KPCRVFVFTZTUFN w 2VEP OFLPLBL͞Μ NBTBSU[͞Μ w ܰྔKPCRVFVFTZTUFN w +POL
w ࠷ݶͷKPCRVFVF"1*Λ࣮ w $MVUDI w EJTUSJCVUFEKPCRVFVF w DMJFOU͕ॲཧ͢ΔXPSLFSΛܾఆ 20123݄18༵
2VEPΛ࣮ͬͨ 20123݄18༵
ͳͥ2VEP w1SF1"/ͰNPEVMF͕ߘ͞ΕͨΒɺ͍ ͍ײ͡ʹ௨͍ͨ͠ wHJUIVCͷϑΥϩʔ wΩʔϫʔυʹϚονͰ௨ wॲཧ͕গ͠ॏ͍ͷͰɺ·ͣKPCRVFVF TZTUFNΛಋೖ͔ͨͬͨ͠ 20123݄18༵
ͳͥ2VEP w5IF4DIXBSU[ΦʔόʔεϖοΫײ wͨ͘͞ΜΧελϚΠζ͍ͨ͠Θ͚Ͱ ͳ͍ 2VEP͕ͪΐ͏ͲΑͦ͞͏ 20123݄18༵
%#४උ RVEPECRVEPVTFSSPPU SECNTNZTRMVTF@JOOPEC 20123݄18༵
$MJFOU 20123݄18༵
$MJFOU package Sample::Qudo::Client; use parent qw(Qudo); sub new { my
($class, $args) = @_; $class->SUPER::new( databases => [+{ dsn => 'dbi:mysql:qudo_sample', username => 'root', password => '', }], default_hooks => ['Qudo::Hook::Serialize::JSON'], ); } 20123݄18༵
$MJFOU $qudo->enqueue( "Sample::Qudo::Worker::Echo", { arg => {message => 'hoge'} },
); 20123݄18༵
8PSLFS 20123݄18༵
8PSLFS package Sample::Qudo::Worker::Echo; use parent qw(Qudo::Worker); sub work { my
($self , $job ) = @_; my $arg = $job->arg; my $message = $arg->{message}; sleep 2; # heavy task... warn $message; $job->completed(); # or $job->abort } 20123݄18༵
8PSLFS.BOBHFS 20123݄18༵
8PSLFS.BOBHFS # worker.pl my $qudo = Qudo->new( databases => [+{
dsn => 'dbi:mysql:qudo_sample', username => 'root', password => '', }], default_hooks => ['Qudo::Hook::Serialize::JSON'], manager_abilities => [qw/Sample::Qudo::Worker::Echo/], ); $qudo->work; 20123݄18༵
8PSLFS.BOBHFS QBSBMMFM my $manager = Qudo::Parallel::Manager->new( databases => ..., default_hooks
=> ..., manager_abilities => ..., work_delay => 5, max_workers => 3, min_spare_workers => 3, auto_load_worker => 1, ); $manager->run; 20123݄18༵
%FNP XPSLFSNBOBHFS QBSBMMFM XPSLFSJOTFSU͞ΕͨใΛXBSO͢Δ͚ͩ 20123݄18༵
EFQMPZ QFSMXPSLFSQM 20123݄18༵
EFQMPZ EBFNPOUPPMT # run.sh #!/bin/sh exec 2>&1 cd /path/Sample-Worker ||
exit 1 exec setuidgid app /usr/bin/perl worker.pl svc -u /etc/service/Sample-Worker #start svc -d /etc/service/Sample-Worker #stop 20123݄18༵
ͬͯΈͯ 20123݄18༵
ಛ ͱʹ͔͘؆୯ ͙͢ʹKPCRVFVFͷΈΛ ͬͯΈ͍ͨͳΒ࠷ద 20123݄18༵
ͨͩ͠ wΘΕ͍ͯΔͱ͜Ζͦ͜·Ͱଟ͘ͳ ͍ w5IF4DIXBSU[ͱ͔ w+PCཧͷΈࣗମΛΧελϚΠζ͠ Α͏ͱ͢Δͱ͍͠ w+POLͱ͔ 20123݄18༵
wKPCRVFVFTZTUFNͱ͔ͬͨ͜ͱແ ͍ wखܰʹKPCRVFVFTZTUFNΛͬͯΈ ͍ͨ Ұ2VEPΛͬͯΈΔͱྑ͍Ͱ͢ʂ 20123݄18༵
20123݄18༵
·ͱΊ wKPCRVFVFTZTUFNͷ؆୯ͳઆ໌ w2VEPͰͷ࣮ͱͦͷಛͷհ wͱʹ͔͘؆୯ w৴པੑ5IF4DIXBSU[ wΧελϚΠζ+POL 20123݄18༵