Qudoの発表について

Qudoの発表資料は
http://nekokak.org/presen/yapcasia2009-qudo/
こちらになります。

こちらも
ご意見などどしどしおまちしております。
nekokak _at_ gmail _dot_ com

ちなみにmiyagawaさんがLTまでの間にCPANAuthorの人はモジュールをCPANにアップすると
LTのデモでながれるかもよとおっしゃってたので、
Qudoをデベロッパーリリースしました。


で、Qudoの発表中に頂いたQAをここで書いてみます。
あと、補足したり。

              • -

Q:Jobを処理する順番はどうなってるのか?プライオリティーをつけることなどできるか?


A:現在のQudoのJob処理順は基本的にenqeueされた順番です。Job毎のプライオリティーはいまは設定できないので設定したいですね。

              • -

Q:jobをenqueueしてから間をおいて処理させることはできるのか?


A:jobをenqueueする時にrun_afterパラメータを指定することで秒単位でjobの開始時間を遅らせることは可能

              • -

Q:enqueueしたjobが開始される前にとりけせるの?


A:DBの1エントリなのでDBからレコード消せばキャンセルはできます。あと、Managerクラスにdequeueメソッドがあるので、それでJobを処理する事なく消す事ができます。

              • -

Q:qudoの性能はどうか?サーバ負荷や単位時間あたりにどの程度の処理ができるかなど?


A:会社でつかっているが、そこまで負荷のかかる使われ方はまだしてないので正確なことはわからないが、job managerは複数プロセス動かせるので横方向のスケールは可能。ただ現在のところDBサーバは1台しか使えないので、DBがボトルネックになってくる可能性はあると思う。
ちなみに1サーバでforkさせてmanagerを起動するサンプルが
http://github.com/nekokak/qudo/blob/082bb7ca559027941d96e20c48b41cc4148505c8/sample/init.d/qudo-worker-sample.pl
にあります。
参考までにどうぞ。

              • -

Q:jobの処理が失敗して、リトライするときにリトライするJobの実行順番はどうなるのか?Q4Mの場合は失敗したjobを先頭にもってきて優先的に処理するようになっているが。


A:Qudoでは失敗したjobのリトライは後にまわします。またworker毎にretry_delayを設定できるので、秒単位で実行開始時間を送らせる事が可能です。

              • -

ここまでが発表時間中の質問だったのですが、席に戻って昼飯いくかーと思ってたら、
perl hacks on vim
http://conferences.yapcasia.org/ya2009/talk/2254
の発表をされたMr. Lin You-An (‎c9s‎)から追加で質問されました。
(ちなみにLin You-Anさんが発表するときにMacのプロジェクタにつなぐアダプタかしてあげたから、
特に質問にきてくれたのかもと思った。)


英語だったので途中からよくわからなくなったのでエマーソンさんにたすけてもらいました。
エマーソンさんありがとございました。

質問の内容の概要としてはそれぞれ依存するworkerがあって、例えば、BのworkerはAのworkerが終わってないと処理できないなど
worker間の依存性は解決してくれるか。
たとえば、A,B,Cなど依存関係のJobが全部enqueueされてから3つのjobをforkしてまとめて実行したい。
forkするのはそれぞれのJobのステートを管理したいから。

と言った内容のことでした。

実際どういうような事を想定してるのかとか、途中でエマーソンさんが別件があるとのことで最後まではなせなかったのですが
Job間の依存問題はQudoでは何も対応してないので、なんか考えるねありがとーと握手しておきました。
なんとなくhirose31さんに似てる気がしたけど似てないかも。(どっちだ


で、ちょっと考えたんですが、
例えばA,B,CのJobがあってBはAの処理結果に依存している。CもAの処理結果に依存しているというのがあった場合だと、
関連jobが全てenqueueされるまで待ったとして、jobが溜まったら、Aを実行して、Aの処理が終了したら
B,Cのjobを実行させるとかそういうのでいいんかなぁとか。
forkさせるとかどうかはQudoとは関係ないんじゃないかなと思いました。


疲れて頭まわってないので、もうちと色々考えてみよう。


質問してくれたhirose31さん、danさん、刺身さん、Yappoさん、Lin You-Anさんありがとうございました。

勢い余ってCPANにアップもしたので今後ともQudoをよろしくお願いします。

(追記)
そういえばLin You-Anさんからはenqueueする時のargの情報はscalarだけしかつかえないの?と聞かれたのですが
scalar/arrayref/hashrefでも問題ないす。
ふと思い出したのでした。

(追記の追記)
そいえばプレゼン中Q4MMySQLにパッチ当てないとって言ってしまいましたが
hirose31さんから、「そんなことないよQ4MMySQL本体にパッチなしで使えますよー ひとつプラグインをインストールすればおkす」
と教えていただきました。

そうそう、walf443さんがおっしゃってるようなのをパッチと誤解してました。
http://wassr.jp/user/walf443/statuses/R5Zp78GAhk