AP4R,Rubyで非同期メッセージング

第4回 システムは稼働してからがはじまり

この記事を読むのに必要な時間:およそ 7 分

まとめ

全4回に渡ってAP4Rの解説をしてきました。AP4Rの概説にはじまり,キーワードとして「軽量」かつ「堅牢」をあげました。そして,それらを通じてアプリケーションを気軽に,かつ安心して非同期拡張することができることを,サンプルアプリケーションの作成を例にお話してきました。最後に,簡単なまとめをして連載の締めくくりとしたいと思います。

AP4Rとは

AP4Rとは,Asynchronous Pocessing for Rubyの略で,Rubyで非同期処理を実現するためのライブラリです。AP4Rをアプリケーションに適用することで,⁠重い」処理を非同期に切り離し,ユーザーへの素早い応答が可能になります。また,疎結合化されることで処理の分散もしやすくなり,負荷増大時のスケーラビリティにもつながります。

「軽量」かつ「堅牢」

AP4RはRubyで書かれています。Rubyのもつ簡潔さ,柔軟さをうまくいかし,設定やAPIができるだけ使いやすいものになることを目指しています。そして,実装/テスト/運用をオールインワンでサポートした,導入しやすいライブラリとなるよう開発を進めています。

一方,簡単に導入できるライブラリでありながら,SAF機能により確実なメッセージの配送を実現しています。予期せずシステムを襲う異常時にもメッセージを死守する。これが信頼性のあるメッセージングに求められる必須要件となります。

シンプルなAPI

メッセージ送信の async_to と,SAF機能のための transaction の2つのAPIのみで非同期処理を組み込むことが可能です。また,引数の指定方法では,RubyやRailsとの親和性を考え,直感的に使えることを狙っています。

堅牢性の要,SAF機能

AP4RのメッセージングとしてのQoS(Quality of Service)は,at-least-onceです。すなわち,メッセージを生成するRailsプロセス(Producer)と,そのメッセージを処理するRailsプロセス(Consumer)の間で,最低でも 1回は処理が実行されることを保証します。データベースやネットワークの障害,プロセスの突然のダウンが発生してもメッセージが失なわれることがありません。AP4RではSAF(Store and Forward)という仕組みを通じて,このQoSを実現しています。

非同期でもテストはしっかり

非同期処理を含むアプリケーションでも,網羅的なテストが(比較的)簡単に実行できることは重要です。メッセージング処理では,複数のプロセスが関係することと,ネットワーク通信により時間がかかることの2点を考慮する必要があります。そこで,AP4Rでは,2つのテスト方法を用いて,テストしやすさと,網羅性を補完的に実現しています。メッセージのキューイングをスタブ化し素早く実行するfunctionalテストと,実際の通信も含め実動作となるべく近い環境で行うasyncテストです。

柔軟なシステム構成

AP4Rを利用した典型的なシステムの構成は,ウェブサーバ,Railsプロセス群,そしてAP4Rプロセスとなります。AP4Rを複数用意することでメッセージング層の負荷分散を図ったり,非同期処理用のプロセス群を分割することも出来ます。その一方,非同期メッセージ処理のリクエストは,HTTPなど,標準的なプロトコルを用いて送信されていますので,Railsに限らず,HTTPで受け付けているサービスと連携することも可能です。連携先は,URL変換フィルタの機能を利用して柔軟に対応できます。

また,様々な負荷分散のための設定を調整することで,処理量の増大に備えたスケールアウトや,メッセージの種類に応じた流量制御も可能です。

いざというときのリカバリ

稼動しはじめたシステムは,予期せぬエラーに見舞われることがあります。メッセージの通信中における障害や,データの不整合による処理の異常終了などです。こうした場合に備え,メッセージを復旧,再送する手だてが必要となります。AP4Rでは,SAFリカバリとDLQリカバリの方法を提供しています。

図9 軽量さと堅牢さのバランス

図9 軽量さと堅牢さのバランス

最後に

AP4Rでは今後の拡張として,Capistrano用管理レシピ,Stompプロトコルのサポート,統合監視ツールへの対応などを予定しています。興味を持たれた方は,ユーザー向けのメーリングリストがありますので,そちらで意見や質問,使い勝手のフィードバック,こんな機能が欲しいという要望などを頂ければと思います。筆者らのブログにトラックバックを飛ばしてもらうのでもOKです。

本連載に最後までお付き合いいただき,ありがとうござました。AP4Rについての理解が深まり,皆さんが立ちあげているサービスや手がけているプロジェクトで採用していただけたら幸いです。

AP4R関連リンク

RubyForge
開発者ブログ
その他

著者プロフィール

加藤究(かとうきわむ)

フューチャーアーキテクト株式会社,シニアコンサルタント。土木専攻だった大学時代には,道路や橋の建設について学んできたが,社会に出てからは Javaのメッセージングミドルウェアの開発/保守などに従事。昨年,Rubyで書いたメッセージングライブラリ,AP4Rでオーンソースの世界に仲間入り。現在は,AP4Rの開発/導入サポート中。

URLhttp://d.hatena.ne.jp/kiwamu/


篠原俊一(しのはらしゅんいち)

フューチャーアーキテクト株式会社,シニアコンサルタント。大学時代は物理学を専攻,素粒子論を研究,10次元の世界に住んでいた。入社後まもなく,Martin FowlerのblikiでRubyを知り,"The Ruby Way"に学ぶ。 Rubyとオープンソースが大好きなプログラマとして,AP4Rを開発中。

URLhttp://d.hatena.ne.jp/ita-wasa/