Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

キューを使用したWindows Azureストレージプログラミング

正式リリースされたWindows Azureの力(3)

  • LINEで送る
  • このエントリーをはてなブックマークに追加

 前回は、Windows Azureに含まれるストレージサービスであるWindows Azureストレージについて解説し、ブロブとテーブルの2つのストレージを使用したサンプルを作成しました。今回は、残るストレージであるキューを用いて、Windows AzureのWebロールとWorkerロールを連携させるサンプルを作成します。

目次

はじめに

 前回は、Windows Azureに含まれるストレージサービスである、Windows Azureストレージについて解説しました。さらに、ブロブとテーブルの2つのストレージを使用したサンプルを作成しました。今回は、残るストレージであるキューを用いて、Windows AzureのWebロールとWorkerロールを連携させるサンプルを作成してみます。

対象読者

  • クラウド技術に興味がある方
  • Windows Azureに興味がある方
  • Windows Azureストレージに興味がある方
  • Windows Azureストレージを使用したアプリケーション開発に興味がある方

Windows Azureストレージの簡単なおさらい

 まずはWindows Azureストレージについて、簡単に振り返っておきましょう。

 Windows Azureストレージは、次の表1にあるように、3種類のストレージをサポートしています。用途や扱うデータにより、どのストレージを使用するかが異なってきます。前回のサンプルでは、このうちブロブとテーブルを使用したアプリケーションを作成しました。

表1:Windows Azureストレージの種類
ストレージ 目的 構造
ブロブ データ保存 バイナリデータを保存のために使用。コンテナとブロブで構成
テーブル データ保存 分散Key-Valueストア。エンティティとプロパティで構成。PartitionKey、RowKey、Timestampの3つのシステム予約プロパティが定義されている
キュー メッセージ交換 非同期のメッセージ交換のために使用。キューとメッセージで構成

キューの概要

 それでは、今回扱うキューについて、もう少し詳しく見て行きましょう。

キューの使用目的

 先程の表1にあるように、ブロブとテーブルが主にデータ保存のために使用されるのに対して、キューはメッセージ交換のために用いられます。

 キューの使用例として、フロントエンドのWebロールで受け付けたHTTPリクエストにより、データの一括更新のような処理に長時間かかるプロセスを実行する、というようなケースについて考えてみましょう。

 もしWebロール上でプロセスを実行するなら、処理に時間がかかり結果としてタイムアウトエラーになる恐れがあります。このような長時間かかるプロセスの場合、バックグラウンドで動作するWorkerロールに処理を委ねることができます。Webロールからプロセスの実行を指示するメッセージをキューに作成します。Workerロールは一定期間ごとにキューを見張っており、キューにメッセージが届くならメッセージを取得しプロセスを実行します。最後にメッセージをキューから削除します。

 このようにキューは、WebロールやWorkerロール間でのメッセージ交換のために使用します。

キューの構造

 次の図1にあるように、Windows Azureストレージのルートの概念であるストレージアカウントの下に、キューとメッセージからなる2階層でキューストレージは構成されています。

図1:キューの階層構造
図1:キューの階層構造

 図が示すとおり、ストレージアカウントの下に、複数のキューを作成できます。各キューに格納されるメッセージ数に制限はありません。各メッセージのサイズは最大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(英文)」をご覧ください。

表2:Windows Azureストレージクライアントライブラリ(Microsoft.WindowsAzure.StorageClient名前空間)の代表的なクラス
クラス 扱うストレージ 説明
CloudBlobClient ブロブ ブロブストレージ
CloudBlobContainer ブロブ コンテナ
CloudBlob ブロブ ブロブ
CloudTableClient テーブル テーブルストレージ
TableServiceEntity テーブル エンティティ
CloudQueueClient キュー キューストレージ
CloudQueue キュー キュー
CloudQueueMessage キュー メッセージ

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

  • WINGSプロジェクト 広瀬 嘉久(株式会社ジェイテックジャパン)(ヒロセ ヨシヒサ )

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2017年5月時点での登録メンバは52名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

バックナンバー

連載:正式リリースされたWindows Azureの力
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5