はじめに
前回は、Windows Azureに含まれるストレージサービスである、Windows Azureストレージについて解説しました。さらに、ブロブとテーブルの2つのストレージを使用したサンプルを作成しました。今回は、残るストレージであるキューを用いて、Windows AzureのWebロールとWorkerロールを連携させるサンプルを作成してみます。
対象読者
- クラウド技術に興味がある方
- Windows Azureに興味がある方
- Windows Azureストレージに興味がある方
- Windows Azureストレージを使用したアプリケーション開発に興味がある方
Windows Azureストレージの簡単なおさらい
まずはWindows Azureストレージについて、簡単に振り返っておきましょう。
Windows Azureストレージは、次の表1にあるように、3種類のストレージをサポートしています。用途や扱うデータにより、どのストレージを使用するかが異なってきます。前回のサンプルでは、このうちブロブとテーブルを使用したアプリケーションを作成しました。
ストレージ | 目的 | 構造 |
ブロブ | データ保存 | バイナリデータを保存のために使用。コンテナとブロブで構成 |
テーブル | データ保存 | 分散Key-Valueストア。エンティティとプロパティで構成。PartitionKey、RowKey、Timestampの3つのシステム予約プロパティが定義されている |
キュー | メッセージ交換 | 非同期のメッセージ交換のために使用。キューとメッセージで構成 |
キューの概要
それでは、今回扱うキューについて、もう少し詳しく見て行きましょう。
キューの使用目的
先程の表1にあるように、ブロブとテーブルが主にデータ保存のために使用されるのに対して、キューはメッセージ交換のために用いられます。
キューの使用例として、フロントエンドのWebロールで受け付けたHTTPリクエストにより、データの一括更新のような処理に長時間かかるプロセスを実行する、というようなケースについて考えてみましょう。
もしWebロール上でプロセスを実行するなら、処理に時間がかかり結果としてタイムアウトエラーになる恐れがあります。このような長時間かかるプロセスの場合、バックグラウンドで動作するWorkerロールに処理を委ねることができます。Webロールからプロセスの実行を指示するメッセージをキューに作成します。Workerロールは一定期間ごとにキューを見張っており、キューにメッセージが届くならメッセージを取得しプロセスを実行します。最後にメッセージをキューから削除します。
このようにキューは、WebロールやWorkerロール間でのメッセージ交換のために使用します。
キューの構造
次の図1にあるように、Windows Azureストレージのルートの概念であるストレージアカウントの下に、キューとメッセージからなる2階層でキューストレージは構成されています。
図が示すとおり、ストレージアカウントの下に、複数のキューを作成できます。各キューに格納されるメッセージ数に制限はありません。各メッセージのサイズは最大8KBです。メッセージにはバイナリや文字列などを自由に格納でき、取得時にはBase64でエンコードされた形でデータが返されます。
キューから取得したメッセージは、明示的に削除しない限り、いつまでもキューに留まり続けます。キューからメッセージを取得すると、まずそのメッセージはデフォルト値で30秒間(最大で2時間)キュー内で見えない状態になります。この一定時間内に、メッセージの処理がシステム障害などの何らかの理由で失敗し、システム側で明示的にメッセージが削除されなかった場合には、一定時間経過後にそのメッセージが再びキュー内で見える状態になり、再取得することが可能になります。このようにキューには、エラー時のリトライの仕組みが備わっています。
開発環境を整える
それでは、Windows Azureストレージを使用してプログラミングを行うための環境を整えましょう。
シリーズ第1回、第2回を参考にして、Windows Azureの開発環境のインストール、さらにクラウド環境に配置するために必要なWindows Azure Platformの購入を行ってください。
キューを使用したWindows Azureストレージプログラミング概要
前回に説明したとおり、Windows Azureストレージにアクセスする方法は主に2種類あります。REST APIを直接呼び出す方法と、Windows Azure SDKに含まれているWindows Azureマネージライブラリを使用する方法です。
.NET環境の場合には、Windows Azureマネージライブラリを使用する方が簡単かつ直感的にWindows Azureのストレージにアクセスできるため、お勧めです。今回のサンプルでも、ライブラリを使用してキューにアクセスします。
前回も述べましたが、改めてWindows Azureストレージを操作するための代表的なクラスを確認しておきましょう。Windows Azureマネージライブラリには、Windows Azureストレージを操作するためのストレージクライアントライブラリ(Microsoft.WindowsAzure.StorageClient名前空間)が含まれています。表2を見ると、ブロブ、テーブル、キューの各ストレージの階層構造に合わせてクラスが設計されていることが分かります。例えば、キューを扱いたい場合には、CloudQueueClient、CloudQueue、CloudQueueMessageなどのクラスを使用するとよいことが理解できるでしょう。
Windows Azureマネージライブラリの詳細については、前回の記事や、MSDNライブラリの「Windows Azure Managed Library Reference(英文)」をご覧ください。
クラス | 扱うストレージ | 説明 |
CloudBlobClient | ブロブ | ブロブストレージ |
CloudBlobContainer | ブロブ | コンテナ |
CloudBlob | ブロブ | ブロブ |
CloudTableClient | テーブル | テーブルストレージ |
TableServiceEntity | テーブル | エンティティ |
CloudQueueClient | キュー | キューストレージ |
CloudQueue | キュー | キュー |
CloudQueueMessage | キュー | メッセージ |