サイトを運営していると、ときどきメッセージキューで非同期に処理をしたいなという箇所がよくあります。EC2の併用など、異なるクラウド環境を使ったシステムをを扱っており、その連携方法を日々調査しています。使えばよいかと思うのですが、クラウド環境間の連携などを考えると、グローバルに利用できるメッセージ伝達方式の方が望ましいケースもあります。SQSに触手を伸ばし、入門してみました。今日は、その記録を残します。SQSの利用を申し込む」をすればOKです。課金はリクエスト数によるものととデータ転送量によるものの2系統です。SQSリクエストに付き0.01ドル。ほとんどお金かかりません。データ転送量は米国&欧州とアジア(シンガポール)で異なりますが、たとえば、米国&欧州では10TB(テラバイト!!)までのデータ受信で0.15ドル。同一RegionでEC2と送受信するものは課金されません。すごくすごく気軽に使える値段です。機能が少ないともいえますが、シンプルに使えます。だいたいのことはには、以下の4つを使ってできます。メッセージキューからメッセージを削除もちろん、他にもAPIはいろいろありますが、ちょっと試すだけならばこれでOKです。キューを作成したあと、以下の絵のような流れで処理をすることになります。SimpleDBなど外部のデータストアに置いておき、そのポインタをメッセージに入れるのがよいです。【メッセージ保存期間と視認性について】メッセージは4日間、キューに保存されます。同一のメッセージが見えなくなります。見えなくなる時間(視認できなくなる時間)はAPI経由で設定でき、30秒から12時間まで設定できます。Aというクライアントがメッセージαを取得したあと、なにかしらの処理に失敗した場合、メッセージαは、一定期間(30秒~12時間)のあとに、他のクライアントから見えるようになります。そのAというクライアントが処理に成功し、メッセージ削除APIをキューに対して呼び出した場合は、その後、他のクライアントから見えなくなります。~Perlで実際に使ってみる~】PHP編やJava編はいずれ機会があったら書きます。Perlから使ってみます。先ほどの絵でいうところのSendMessageする側(Process1)が「メッセージ送信側」、ReceiveMessageする側が「メッセージ受信側」(Process2)とします。World」とします。World'とメッセージをいれ、メッセージ受信側はそのメッセージをキューから取得、画面に表示してキューからメッセージを削除しています。実運用ではメッセージは処理を依頼する内容やデータのポインタになります。メッセージ受信側では、時間がかかる処理をするなど、なにかしらの処理をします。Perlから使うにはモジュールのインストールが必要です。Amazon::SQS::SimpleというモジュールがCPANにありますので、サンプルプログラムを使うには以下のモジュールをインストールしてから実行する必要があります。Amazon::SQS::Simpleモジュール以下、サンプルプログラムです。SQSオブジェクトを作成します。作成済みの場合に実行してもそのままキューがある状態になります。キューにメッセージを送付します。SQSオブジェクトを作成します。キューオブジェクトを取得します。キューからメッセージを取得します。メッセージの内容を出力してみます。キューからメッセージを削除します。ReceiptHandleというのを使います。SQS並みの信頼性を保とうと思うとけっこう大変です。Q4MのようにMySQLを使うタイプのメッセージキューを自前で構築した場合、1台くらいサーバが落ちてもメッセージをロストすることなく、なおかつ、クライアントからのメッセージ送受信のリクエストをさばきつづける、となると、必要な構築コストはかなり大きいです。複数台のサーバが必要で、MySQLのレプリケーションをしたり、あるいはDRBDで複数台のデータを同期させたり・・・、とかとか。SQSはAmazonが複数のサーバやデータセンターで冗長化していて大量のリクエストが来ても、ちゃんと止まらずにさばいてくれます。いったメッセージキューシステムを自前で作らなくてもすぐに本番システムレベルの信頼性で使える、というのは場合によっては大幅なコスト削減になるんではないかと思います。パフォーマンス面など適合しないケースもあるかと思いますが、クラウドな環境ではひとつの選択肢になるのではないかと考えています。大きいデータの受け渡しが必要なときはS3などにデータをおき、そのポインタ情報(URL)をやりとりするように、ということがあります。同一のメッセージが複数回受信できてしまうことがある。メッセージはキューに入れた順番どおりには受信できない。SQSが複数のサーバや複数のデータセンターを使って運営されているためのようですが、注意が必要です。SimpleDBなど)にどこまでのメッセージ処理ができたか、などの情報を持っておく必要があります。その辺はシステムの要求などによりケースバイケースだと思いますが、注意が必要です。初期調査、入門だけなのに、記事が少しながくなってしまったので、今日はこれくらいにしておきます。SQSの調査の最終ゴールは当社が現在力を入れているSaleforceのシステムと連携させてみることです。連携できたらまた記事にしますので、待っていてください。Servicesに力を入れると同時に、Salesforce事業も展開中です。現在、こういったいろいろなクラウドプラットフォームを使ってお客様によいソリューションを提供したい、というエンジニアの方を大募集中です。興味のある方は以下からご連絡いただけると幸いです。SQSに入門してみましたこんにちは。