reliable-msgとの違い

  • これ日記なん? - ap4r と reliable-msgの違い?

http://bangbangshoot.sakura.ne.jp/tdiary/?date=20060902#p02

さっそくお試しいただきありがとうございます。

...永続化層にreliable-msgを使っているとのことだが、正直reliable-msgとの違いがよくわからない。reliable-msgにもrails supportは含まれてるみたいだし。realiable-msgの上にレイヤーを作ってSOAP, XMLRPCサポートを追加したものなのかな?

ご指摘のとおり、reliable-msgにもRails supportは含まれており、キューやトピックをコントローラ上で簡単に扱えるようになっています。違いをはっきりさせるために、ここで処理Aと処理Bの連携を考えてみます。


 1.処理Aを実行
 2.キューへ(連携用の)メッセージの書き込み
 3.キューからメッセージの取り出し
 4.処理Bを実行


3.で誰かがキューからメッセージを取り出し、処理Bを実行する必要があるのですが、このトリガーがreliable-msgにはありません。cron等でたたくことを想定しているようです。
AP4Rではキューから指定されたメッセージを取り出し、Webサーバに再送するスレッドを加えることでこのトリガー部分を提供しています。結果、アプリケーションの開発者はトリガー部分を別途開発/意識する必要がなく、処理AとBを同じように開発できることになります。

Rindaで処理エージェントを複数待機させておいて、処理メッセージをいくつかtupplespaceに放り込むと、それこそえさに群がる池の鯉のように処理エージェントが処理しまくるので見てて楽しいのだけど、Rindaでつなぐとお互いのRubydrubyのバージョンをあわせないといけないから、こういうライブラリのほうがいいってことなのかな?


あまりRindaのことをよく分かっていないので間違っているかもしれませんが、、、
メッセージの配送保障がないと、トランザクショナルなデータのやりとりが困難です。AP4Rでは、Exactly once(すべてのメッセージが、必ず 1 回、重複なしに配信されること)を提供していく予定です。
バージョン0.1.0では、まだ十分な実装にはなっていませんが... (^^;


また非同期処理の多いシステムでは、メッセージの永続化部分がボトルネックになる可能性があります。Rindaの例だとひとつの池にえさが集中する感じです。鯉を増やせばなんとかなりそうですが、それも池のひろさ(コンピュータリソース?)に限界があります。そこで、池の数を増やしてスケールアウトが可能であれば、適切なえさの量と鯉の数を維持できそうです。AP4Rではこの思想のもと、メッセージをルーティングさせて複数AP4Rプロセス間で協調動作可能なようにもしています。