デブサミ2008レポート第2弾。
AP4RはRubyで書かれた非同期メッセージングライブラリ。以前、どこかでプレゼン資料だけ見かけて気になっていたので、セッションに参加してみた。
作者のお二人は、はてなダイアリーを持っているらしい(id:kiwamuさんとid:ita-wasaさん)。
AP4Rの使いどころ
- あとでやればいい処理を別サーバーに任せてしまう
- メール送信とか集計処理とか
- 重たい処理を切り出して非同期で実行できるので、ユーザーに対してすばやいレスポンスが返せる
- 別サーバに切り出しておけば、その部分のスケールアウトがしやすい
AP4Rの良いところ
- 「軽量」かつ「堅牢」
- 軽量さは「使いやすさ」と「テストや運用までサポートしたAll in one」
- 非同期処理の呼び出し方がシンプルすぐる。AP4Rのサーバーを経由して別Actionを呼び出すとか、素晴らしいアイデアだと思いました。
- 異常時にこそ真価を発揮する堅牢性
サンプルコード
非同期処理に切り出していない状態
def order o = Order.new(:name => params[:name]) o.save! payment(o.id) redirect_to .. end def payment(order_id) Payment.new(:order_id => order_id).save! end
paymentを非同期処理として切り出す場合
def order o = Order.new(:name => params[:name]) o.save! ap4r.async_to({:action => "payment"}, {:order_id => o.id}) redirect_to .. end def payment Payment.new(:order_id => params[:order_id]).save! render :text => true end
こんだけ!すげー。
使ってみたいな〜と思っているシーン
- 登録処理や更新処理のパラメータを非同期で別サーバーにも投げて、データをリアルタイムにバックアップ
- メール送信には使いたい
メッセージングのことをあまり分かってないので、不適切かもしれませんがw