carriers について

ずいぶん前にトラバってもらっていましたが、、、

http://d.hatena.ne.jp/kiwamu/20070628/1183063085
とかから辿ったら、シンプルな使い方は凄い楽にできた。
便利便利。
普通にWEBアプリ書いてるだけで非同期処理にできる。


試していただき、ありがとうございます。
せっかく疑問点などのフィードバックをいただいていたのに、なかなか返せずすみませんでした。いまさらながらですが、お返事させてください。

drb,dispatchers,carriersをそれぞれ別のデフォルトと変えたときどんな動きするのかがよくわかってない。
WEBに公開されてる部分からプラグインを通してdrbにメッセージが行く。
drbはメッセージを受けてdbかfileに保存を行う。
carriersが上のdrbからメッセージを持ってくる。
carriersから処理を委譲されてdispatchersが適切なtargetに対してリクエストを投げかける。
ってことですよね…あってるのかな…


だいたいご指摘のとおりですが、carriers と dispatchers の理解が微妙に違います。
「上の drb からメッセージを持ってくる」のも dispatchers の役割です。
dispatcher は、ローカルのキューからメッセージを get して、指定の target に対してリクエストを投げます。


では、carriers は何をするのか..?
実は、別の AP4R プロセスの drb からメッセージを持ってきます。
つまり、リモートのキューからメッセージを get して、ローカルのキューにそのメッセージを put します。持ってくるメッセージは、dispatchers が targets で処理対象としているものです。
で、carriers と dispatchers がともに動くことで、複数の AP4R プロセスを経由してメッセージがルーティングされるように見えるはずです。


なんでこんなものがあるかというと、ある AP4R プロセスにメッセージがたくさん貯まってしまいなかなか処理が掃けない場合に、別の AP4R にメッセージを移動することでリバランシング(再分散)を可能にするためです。メッセージが貯まっているサーバの設定に手を入れる必要がないので、負荷がかかっている際にも、新しい AP4R を追加するだけで済むのは嬉しいかもしれません。


とはいえ、ポーリングでの実装ですし、ホップ数の制御やループの防止など、まだまだ実験的なものです。
なので、設定ファイル内ではコメントアウトしています。 (^^;
#dispatchers だけでもメッセージングはこなせますし..


carriersっていうからにはいくつか指定できたりしそうなんだけど、どんな感じでそれぞれ動くのか全然わかってない。
複数台でAP4Rを動かしたときにどんな設定にするのか、どんな動きするのか誰か教えて欲しい。


carriers を複数指定すると、複数のリモートキューからメッセージをもってくることになります。


また、dispatchers は targets で指定されたチャネルからメッセージを get して、宛先にリクエストします。このとき、リクエストの結果が返ってくるまで dispatcher スレッドは占有されます。したがって、リクエストを並列に実行するには、threads の値を増やします。(リバースプロキシ構成などをとっていて、リクエストを処理可能なプロセスが複数ある状況を想定しています。)

さらに、targets と threads のセットをいくつか設定することで、メッセージの種類ごとに処理の流量調整なんかもある程度はできると思います。


ひとまずこんなところで。