Hatena::ブログ(Diary)

Hatena::Diary::Neko::kak 500 Internal Server Error このページをアンテナに追加 RSSフィード

2009-09-11

[][]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

[][]DBIx::Skinnyの発表について

Skinnyの発表資料は

http://nekokak.org/presen/yapcasia2009-dbix-skinny/

こちらになります。

ご意見などどしどしおまちしております。

nekokak _at_ gmail _dot_ com

で本日の発表の補足をば。


Skinnyの発表の時にも言いましたが、

Skinnyの発表前のYappoさんのData::Modelの発表の中で、

「SkinnyはSQLをパーズして云々だからバグバグぽい部分がありそげ。」

とおっしゃってましたが、現在のSkinnyはSQLのパーズをしておりません。

昔はSQL::Parserでパーズするのを試している事があったのですが、

SQL::Parserが複雑なSQLをパーズできないので捨てました。

----------

Skinnyでは現在install_utf8_columnsというfunctionでutf8flagの処理をするべきカラムを定義する事ができるのですが

最近のDBD::*系ではmysql_enable_utf8などのutf8周りのオプションを有効にすればDBDレベルでflagの処理をしてくれるので

対応DBDを使っている場合は特に設定しなくてもよいはずです。

最近のDBD::mysqlではこのパラメータがあるのはしってたのですが、SQLiteなどなどでも対応してるよと

typesterさんに教えていただきました。typester++

ただ、プロダクション環境のDBD::*を簡単に差し替える事ができない事も有るかと思いますので、

install_utf8_columnsは残します。

----------

Skinny開発の初期段階に社内でやったプレゼン資料が

http://nekokak.org/presen/mf01/

にアップされてるのですが、これは現在のSkinnyに当てはまらない部分があるので

参考にしないでください。

----------

以上簡単にまとめでした。

明日はQudoの発表をします。

Qudoは私とid:masartzとでつくったjob queue管理の仕組みです。

最近でた

4Gbpsを超えるWebサービス構築術
伊勢 幸一 池邉 智洋 栗原 由樹 山下 拓也 谷口 公一 井原 郁央
ソフトバンククリエイティブ
売り上げランキング: 202
おすすめ度の平均: 5.0
5 しばらくスタンダードになり得る本

で、TheScheartzの事が書かれていましたが、TheSchwartzを置き換える勢いで作ったプロダクトなので

job queue系に興味が有る人はぜひお越し下さいませ。

明日もよろしくお願いしまっす。