D-7 <altijd in beweging>

Day to day life of a Perl/Go/C/C++/whatever hacker. May include anything from tech, food, and family.

2012年03月

balancer.png
至極簡単なハックなんだけど、q4m-balancerというスクリプト書いてみた。シナリオとしては、(1) q4mが複数あって、(2)それぞれに繋がってるワーカーの数・処理能力にバランスの不整合があって (3) キューの中身について処理順番等が関係ない、という状況においてq4mに入っているメッセージの数にかたよりが見られている状態をある程度改善するスクリプト。

入っているメッセージ数が最大のキューと最小のキューの差が 最大 > 最小 * 2 だった場合に最大のほうのキューの中身を40%最小のほうに移す、ってだけ。グラフを見れば分かるとおり、右側のほうにグラフの内容がイーブンになっているのが見えると思う。これを定期的に動かす事によって処理能力の高いワーカーのほうにより処理を任せられる。

まぁくだらないっちゃくだらないですが、ワーカーを遊ばせておくのもあほらしいのでちょっと書いてみた次第。
    このエントリーをはてなブックマークに追加 mixiチェック

ZeroMQ.pmをつい相続してしまってから本家libzmqの変更についていけず大分悩んだんだけど、ここのところ直してリクエストが多かったので一念発起してlibzmqのPerlバインディングを大幅リニューアルしました。まだ正式リリースは出してないので、何か文句を言うなら今のうち!英語での解説はこちら

いままでlibzmqの直接バインディング、定数、Perlっぽいシンタックスシュガーのラッパーを全部同じディストリビューションにいれていたのをばらしました。これまでZeroMQ::Raw とされていたのは ZMQ::LibZMQ2 ならびに ZMQ::LibZMQ3 となりました。ZMQはこれらのバインディングをうまいことオブジェクト風味にするPPモジュール。ZMQ::Constantsはlibzmqのバージョン毎にやたらと変わるので別モジュールで切り出しました。あとすごくざっくりですが CZMQのラッパも書きました。こちらはZMQ::CZMQというもの。

なおZeroMQ → ZMQの変更についてはlibzmqのメンテナから名前を変えてくださいという半強制的なお願いが出ていたので名前の変更はもう大分前から予定してました。


というわけでお父ちゃん疲れたよ。
    このエントリーをはてなブックマークに追加 mixiチェック

STFではキューへのジョブ挿入は基本的にはエラーが起ころうとなんだろうと無視して次の処理に移るように最初から書いていたけど、挿入時にDBが接続を受け付けるけどそこでブロックしてしまった場合の考慮をしてなかったので、厳しめのタイムアウトを設定するとともに、そういうエラーが起こった際にキューがSPOFにならないようにkazeburoさんのアドバイスの元 複数のキューに書き込みをできるようにしました

現時点ではこの機能はQ4MだけでTheSchwartzはまだ実装してない。ドキュメント書かないとな・・・
    このエントリーをはてなブックマークに追加 mixiチェック

このページのトップヘ