Windows Azure Page Blob の活用 ~ クラウドカバー Episode 57
57回目を迎えた Wade と Steve による Channle 9 の人気番組クラウドカバー。
今回は MVP の Brent Stineman をゲストに迎え、Windows Azure の Page Blob に関するお話です。
Windows Azure の Page Blob は Azure Drive の基盤テクノロジーとして使用されているため、多くの方が知らずとつかっている場合も多いかと思いますが、今回は Azure Drive だけじゃもったいない、の精神で Page Blob の活用方法を議論していきます。
まずはいつものようにニュースから。
◆ Accessing a Service on the Windows Azure Service Bus from Windows Phone 7
最初の話題は Windows Phone 7 から、Windows Azure の Service Bus に接続するためのコーディング紹介のブログ。
通常、Windows Azure の Service Bus を利用する際には Microsoft.ServiceBus な名前空間のライブラリを活用することで、簡単にサービス接続を実現できるわけですが、Microsoft.ServiceBus.dll を利用できない環境などで、どのように Service Bus への接続を行うかが今回の記事でのポイント。
主に ACS につないで認証トークンを受け取る方法と、そのトークンを使って実際に Service Bus に接続するための方法が解説されています。
◆ Autoscaling Windows Azure Applications
現在 PAG(発音は「パグ」。正式名称は Patterns And Practices Group)チームでは Enterprise Library の一環として Windows Azure 用のアプリケーションブロックの開発を進めています。
今回紹介するブログエントリでは、Windows Azure のオートスケールに関する実際のアプリケーションブロックや、 コーディングサンプルを紹介しているのではありませんが、現在開発中(※)のオートスケールのためのアプリケーションブロックの概要を紹介しています。
※その後、Windows Azure Autoscaling Application Block (WASABi) としてプレビュー版が公開されています。是非お試しください!
◆ Building and Deploying Windows Azure Projects Using MSBuild and TFS 2010
MSBuild を使った Windows Azure プロジェクトのビルドとデプロイに関するウォークスルーなドキュメントです。Azure SDK 1.4 から登場したコンフィギュレーションファイルの分割(デバッグ用とリリース用で設定を変える etc)への対応や、Windows Azure 環境へのアプリケーションのデプロイ、またその際のこまごまとした設定や、Blob ストレージにビルド成果物を保存する方法など、詳細な手法が紹介されています。
ビルド環境にデプロイを組み込んでおきたい!というときに是非。
◆ Sogeti Creates the Windows Azure Privilege Club
本日のゲスト Brent が所属する Sogeti 社がホストする Windows Azure Privilege Club の紹介です。クライアント企業同士のナレッジ交換を目的としたソーシャルな会のようです。
ということで、いよいよ本日の本題 Page Blob のお話。
きっかけは、Brent が Azure のトレーニング講師をした際に、「Page Blob デモが見たい」というリクエスト。
それを元に解説を書いたのがこちらのエントリ「A Page at a Time (Page Blobs - Year of Azure Week 7)」と、「Page, After Page, After Page (Year of Azure Week 8) 」。
画像ファイルの受け渡し(アップロードと、ダウンロード)に Page Blob を用いたサンプルです。「数百メガバイトのファイルを受け渡しする際に、アップロードに5、10分、ダウンロードにも5、10分と待つのはちょっと、、、」、ということで、Page Blob の特性であるランダムアクセスに強いところを生かしつつ、並列性を持たせたサンプルになっています。
ということで、早速 Brent のデモへ。
2つの Viusal Studio が立ち上がっていますが、左がファイルを送る Transmitter (アップロードを行う側)で、右がファイルを受け取る Reciver (ダウンロードを行う側)です。
まず、Transmitter 側では、Page Blob を作成し、保存領域を確保します。
今回は 23552 バイトを確保しています。これは今回必要な領域の倍程度の領域。
|
デモではブレークポイントを仕掛けて、ここまでの実行で一旦ストップ。
実際に Blob 領域を見ると、23KB のファイルが作られていますが、中身を確認しても何も表示されません(領域確保だけされている状態)。
引き続きアップロードを行うためのコードを確認しつつ、部分的にアップロードを行った(繰り返し分を数回実行した)後に、Azure の Storage 領域にアップロードされた先ほどのファイルの中身を確認すると、以下のように、、、
ここまでにアップロードされた情報のみが表示されます。
このデータを受け取る Reciver 側のコードもほぼ同様のコードになっています。
ここで、ひとつ Tips.
|
Brent の友人で MVP の Neil Mackenzie が Azure Development Cookbook で書いていた Tips で、コンテナから Blob データを受け取る際に、OfType で CloudPageBlob のインスタンスのみを取り出すことができるというもの。
さて、Reciver 側も Page Blob を使いながら、分割したファイルをダウンロードするようにできています。
実際に Page Blob からデータを読み取る際に、最初に行っているのが PageRange で、Page Blob のうちで有効なデータが含まれている範囲を確認しています。下記は 512B のページを4ページ分送信したのちに、Receiver 側でデータを取りに行った際の状況(PageRange のバイト範囲が 2048 バイト分を指し示している)です。
これで Transmitter 側がデータを途中までしかアップロードしていないような場合でも、そこまでのデータを読みこむことが可能になっています。
具体的には、今回のデモではデータは 25ページの領域を使用して、一つの画像ファイルを保存していますが、Transmitter 側も、Reciver 側も、この25個のデータを一括でまとめて受け渡し、という形ではなく、一つ一つ順次受け渡しているイメージになります(これにより、受け渡しのパフォーマンスが向上するというわけです)。
今回の Cloud Cover で利用したサンプルコードは以下の Brent のブログから入手できますので、さくっと試してみたい方はぜひ(Azure のアカウント設定等なしに、ローカル実行で試せます)。
A Page at a Time (Page Blobs - Year of Azure Week 7)
Page, After Page, After Page (Year of Azure Week 8)
ということで、ポーカー好きな Smarx による、Tips of the Week。
今回は Counting にまつわるお話し、ということで、「テーブルの行数のカウント」に関して。
この話題はマイクロソフト社内の Distribution List(DL。メーリングリスト)でもよく話題に上がるトピックです。
テーブルにおける行数のカウントは、たとえば ODATA で .Count を使ったり $Count オペレーター等により実行できる、とお思いかもしれませんが、Windows Azure Table Storage ではそういった操作はありません。Table Storge に行数に関する問い合わせはできないのです。
そこで、これを実現するための手法として 2 つほど思いつきます。
一つ目は自分で数える方法です。
具体的には Table Service Query として .Execute を行うことです。.Execute により、クエリがクラウドに発行されクエリ処理が行われます。実際に行数を数える際には .Count を使用します。
この手法を用いる場合、.toList でもできますがお勧めしません。 .toList では一番最初にすべてのデータをローカルにダウンロードしたうえで、カウントを実行するためです。
.Execute であればレイジーロードでの実行になります。処理の実行に必要なページのみダウンロードを行い、次に処理を行う必要がある領域に達すれば次のページをダウンロードする、といった動作になります。
ただいずれにせよすべてのテーブルデータをローカルにダウンロードすることになります。
(※ OfType のところでも出てきた MVP な Neil Mackenzie が書いたブログ「Queries in Azure Tables」もご参考にどうぞ)
そこで取り得るもう一つの方法として、他のテーブルで行数を数えておくという方法が出てきます。
この場合、そのデータはアトミックに操作する必要があるので、SQL Azure やキューを使う、あるいは Scalable Counter(以前のクラウドカバーで Apathy Button として実装を紹介したことがあります) のような実装を必要とすることに注意してください。
ということで、今回のクラウドカバー Episode 57、Windos Azure の Page Blob の活用は終了です。
Enjoy Cloud Development!