QueueとしてGearmanとかQ4MとかResqueとかRabbitMQとかZeroMQとかまあたくさんあるけど、なにかを使っていると思う。Perlの人だとQudoとかTheSchwartzとかをつかっている人も多いと思う。preforkなworkerを実装するとなるとSignal処理とかをちゃんとやるのが意外と難しい。下の2つのスライドを読むと難しいんだなぁという事がなんとなくわかるとおもう。restartとかは欲しいし、max_reqs_per_child的なこともしたいし、時間が掛かり過ぎているjobはリトライして新しいworkerで処理させたいとかそういう要求がある。そこで、そのへんが共通化されたプロダクトがあると良いのではないかと考えた。Dainamoについてなお、perlにおいては似ている既成のプロジェクトとしてDainamoというものがある。*1これは以下のような事ができて、以下のようなメリットがある。Queueの種類をあまり考慮せずにコードが書けるサーバー毎にworker数を設定し、Profileという単位でweightをかけてworker数をバランスするサーバー毎のプロセス数をスペックに合わせて管理しやすいProfileを1つのプロジェクトで複数つくって即処理したいものはweightを多めにするといったこともできる設定ファイルからProfile::Group(Profileをまとめたもの)を複数読み込み、全てのworkerを起動できる複数プロジェクトが同居するケースとかのセットアップが楽これは業務で運用しているが、とても便利な反面、困ったこともいくつかでてきた。dainamo毎にworker数を設定し、Profileという単位でweightをかけてworker数をバランスする実際にProfileに割り当てられるプロセス数が分かりにくい。他のProfileの影響を受けてProfileのworker数が変化するので複数Projectの同居などを慎重に検討しなければならない。processだけゾンビってるとかが稀にあるWorkmanについてというわけで、もっとシンプルなものが欲しいと思っていた。いうプロジェクトを開始した。frameworkと銘打っている。だいたい以下のような事が出来る事を目標にしている。Queueに移行するときとかにあまりめんどくさい事考えたくない。Queueに特有の機能は使いにくくなるがそれは許容する。Queueバインディングの仕様を満たすためのテストを提供してQueueバインディングを開発しやすくする。process単位でサーバーを立てる。複数建てたければ建てればいい上に挙げた2つのスライドのノウハウを取り入れるシグナルハンドリングの不具合とかを心配したくない。サポートする1つだけ時間がかかっているjobがあったとしても他のworkerはすぐrestartして欲しいかといっていつまでも死なないのも困るのでgraceful_shutdown_timeoutを超えたら強制終了させるgraceful_shutdown_timeoutを過ぎて強制終了させるときにSIGABRTを送るworker内ではWorkman::Server::Exception::ForceKilledがthrowされるのでそれを好きにゴニョるon_abortというhookがあるので再enqueueなどの処理を書いてあげるmax_reqs_per_childしてくれるあたりまえのようにサポートしてほしいdaemonizeをサポートしないupstartとかdaemontoolsとか使うテストを充実させる特にシグナル処理の安全性やWorkerのライフサイクルとかは手動で動作確認とか結構厳しいし自動化するべきであるCodeRefを簡単にworkerにしたいちょっとしたプロジェクトとかだとあると便利なはず。Amon2::Lite的な発想。sugar用意してもいいかも。classとしてもタスクを定義出来るようにする。実は、だいたいコア部分はできている。テストがコケる事はあるが、sleepとか絡むので仕方ないのかなともおもう。以下のような感じで書くともうだいたい動く。$profile)->run();set_task_loaderはWorkerプロセスで実行されるのがミソ。メモリを節約したいなら先に読んでおいてCoWを効かせてメモリを節約することもできる。重いモジュールは先に読ませておくとかそういう小手先の諸々ができる。1..10000;こんなかんじで、共通化のインターフェースでenqueueできる。serverを立ち上げるためのコマンドとかはこれからという段階だが、なんとなく雰囲気は伝わるかなと思う。2013の15日目の記事です。前夜祭では昨年のLTソンと同じくらいの熱気が会場を沸か...2012-01-08正月発火村に行って来た。さりげなくないけど今年初bloggingです。あけましておめでとう...2011-05-20Perlの標準モジュールだけで比較的速いsleep_sort書いたむっちゃ適当。Entries最近の人気記事Archiveはてなブログをはじめよう!karupaneruraさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。