tokuhirom's Blog

Gearman の使いどころについて

「Gearman って gearmand がおちたら、キューにはいってるジョブがふっとんじゃうんでしょ?」とか「ワーカーがしんだらジョブきえちゃうんでしょ?」とかいう話があるわけですが、そもそもそういう風にきえてこまる用途につかうものじゃないのかな、とおもってます。

gearman はそもそもが、distributed remote function call server なので、ジョブキュー的なつかいかたは、「たまたまできる」程度にとらえるのが妥当ではないかとおもいます。

remote function call が主用途だから、基本的にはリアルタイムに処理して、caller は処理がおわるのを待つのが基本です。だから、処理が失敗したら、caller 側でエラー処理をすればいいという設計思想なのかなーとおもってる。
もともと gearmand って「gearmand - Gearman client/worker connector.」なんですよね。

元々の用途的にはたとえば、「Djabbered のような I/O multiplexing をもちいたプロセスの中でブロッキング処理の部分だけ外にだしたい」とか、「Imager を httpd でロードするとメモリをくうから、Imager gearman worker cluster を構成した方がメモリ効率がいい」とかそういう用途なのかなーと。

だから、たとえばメール配信のような、ジョブがロストしたり重複したりしたらこまるようなものに gearman をつかうのはそもそもまちがいなんじゃないかとおもいます。


で、一応 C で re-implementation されたものをつくってる人らがいて、それは gearmand がおちても大丈夫なように RDBMS にジョブデータをいれられるようになっています。それがそもそも信用できるのかどうかはしりませんけど。