2006-09-10(Sun) [長年日記]
_ [Ruby]ap4r解説してもらっちゃった!
開発者の方に疑問について解説してもらいました。ありがとうございます。やっぱり書いてみるもんですね:-p
せっかくなので自分の理解を図にしてみました。
ap4rとreliable-msgの違いは2点。
- ap4rは自分自身が処理Bに投げる。
- 処理Aと処理BがそれぞれWebアプリの場合は両方ともhttpで待ち受けているので、確かにAとBが同じ枠組みでかけるなあ...なるほど。
- というか、ひとつのアプリで処理Aと処理Bを実装して、これから呼び出してもらう感じか。
- ap4rは別のap4rにroutingすることもできる。
- 永続化機能がそれなりに重そうだからこれは必要になりそう。
なるほどそういうことか。
reliable-msgは詳しくないので、とりあえずRindaについて書いてみる。 Rindaの場合は処理Bがtuplespaceからとってくる。 処理Bはgetするときに待ち合わせるので、処理B, 処理B',...と増やしていける。つまり、処理Bをいくつか起動しておいて、tuplespaceにタプル(処理メッセージ)を放り込むと処理Bが入れ食い状態で動くというわけ。 逆に処理Bがひとつで処理Aがたくさんある場合(もしくは処理Bが処理し終える前に処理Aがタプルを放りこまれてしまう場合)は、tuplespace上で待ち行列ができて、処理Bは順番に淡々と処理をこなしていく感じになる。
ap4rでもRindaみたいなモデルでの設定って可能なのかしら。 つまり投げる側が処理Bの負荷に応じて手加減(!)できるみたいな。ap4rからの呼び出しが同期式なら(配送を確実に行うなら呼び出しが完了するまで待つ気がするので)最大同時呼び出し数と呼び出しのタイムアウトの組み合わせで実現できるのかな、なんて思ったり。