これ僕.com:行動分析学マニアがおくる行動戦略

意図と行動のギャップから生じる「不自由さ」への挑戦。果たして僕たちに自由はあるのか?

デブサミ2008 レポート: AP4R 〜 id:kiwamuさん、id:ita-wasaさん

デブサミ2008レポート第2弾。
AP4RRubyで書かれた非同期メッセージングライブラリ。以前、どこかでプレゼン資料だけ見かけて気になっていたので、セッションに参加してみた。
作者のお二人は、はてなダイアリーを持っているらしい(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