Windows AzureのTactical StrategistであるSteve Marx氏は、MIX11にて「10 Things You Didn’t Know You Could Do with Windows Azure」というプレゼンテーションを行い、Windows Azureで実行可能だがノウハウ共有されていないものリストアップして紹介した。Steve Marx氏は、それら機能を利用することでWindows Azureが非常に柔軟になることをデモで示した。
Steve Marx氏の紹介したものは以下となる。
-
Windows Azureの単一ロールに対するマルチサイトのデプロイ
-
IISアプリケーションプールの設定
-
Windows Azureのロールに対するデータベース(CouchDB等)のインストールと利用
-
パフォーマンスカウンターのログ
-
WebロールとWorkerロールの組み合わせ
-
フォルダ共有の実施
コードサンプルが載せられている専用サイトを利用し、一覧表にそってこれらの説明がされた。
AppFabric、Startup Task、Blobのリース処理等について解説してもらうため、Steve氏と連絡を取った。
InfoQ:Windows Azureの一部であるAppFabricはクラウドのミドルウェアプラットフォームとして良く改善されていると思われますが、貴方は現在までAppFabricにまったく言及していません。AppFabric向けに共有できるサンプルやリソースは有りますか?
Steve:私自身がWindows Azure AppFabricについて話さなかったのは、プラットフォームの一部ですが自身としては触れていなかったからです。しかし、MIXではWindows Azure AppFabric向けに素晴らしい発表がされ、同発表はWindows Azure AppFabric チームブログで閲覧可能です。同ポストでは、新機能の詳細とリソースについて述べています。
InfoQ:VMロールの機能を使う方法と、他のロールを用いてバッチファイルやWeb PIコマンドラインツールを利用して必須ツール(PHP、Python、Ruby等)をStartup Taskでインストールする方法では、どちらの方法を推奨しますか。また、理由は何ですか?
Steve: VMロールを利用する方法と、Web/WorkerロールでStartup Taskを利用する方法、どちらを選ぶかはトレードオフとなります。WebロールやWorkerロールを利用する場合、Windows AzureのPlatform as a Serviceとしての利点(自動OSパッチの更新等)を得ることができます。必要コンポーネントのインストールや仮想マシンのカスタマイズを、各ロール実行前のStartup Taskで行うことは、非常に楽しいので個人的にはオススメの方法です。しかし、すべての処理を自動化できるわけではなく、いくつかの処理は非常に時間がかかります(こうしたことが毎回おこることを防ぐため、新規ロール・インスタンスを起動します)。そうした場合、VMロールを選択すべきです。一度だけ仮想マシンの設定を手動で行い、Windows Azureにアップロードすれば、必要な際に他多くのインスタンスと同様に開始できます。VMロールの欠点は、OSの管理を自分自身で行わないといけない点(OSパッチのインストール、変更分の差分VHDアップロード等)です。
InfoQ:ホストされた.NETアプリケーションが、現在のWindows Azureよりも簡単にデプロイ可能であるappharbor等の新興企業が存在します。Windows Azureもまたデプロイ手法が改善されてると考えていますか。また、既に利用可能なWindows Azureのデプロイ手法を改善するソリューションが存在しますか?
Steve:開発者が何を欲しているかを、我々は常にもっと学びたいと考えています。しかしながら、現時点で共有できる情報はありません。
InfoQ: 貴方は “Blobのリース処理” について言及し、正しい利用方法をブログに投稿しています。サンプル等を用いて、どの様なケースで特に有用かを紹介して頂けないでしょうか?
Steve:現在のWindows Azureで、最も明白なBlobのリース処理の用途は、Windows Azure Driveです。DriveはPage Blobで動作するNTFSです。NTFSで動作するため、一度に一か所からしかDriveを操作することはできません。これを保証するため、DriveをマウントしたインスタンスにBlobがリースされ、リース期間の間は排他アクセスが可能です。また、Blobのリースは、一般的なリース機構としても有用です。例えば、Windows Azureで読み込みインスタンスの選択を実装する場合、複数のインスタンスがBlobのリースを取得しようとします。リースを取得したインスタンスが、読み込みインスタンスになります。読み込みインスタンスがリースを暫く更新しない場合、Blobは再びアン・リースされ、別の読み込みインスタンスがリースを取得しようとします。分散システムでのリース処理は、非同期処理を取り扱う際には非常に重要な機構です。Blobストレージにリース処理が組み込まれているWindows Azureでは、様々な用途で同機構を利用することが可能です。
InfoQ:Windows Azureだけでなく、Amazon Web Servicesやfrom Google Appengineから提供されたEmailサービスを見たことがありません。代替としてサードパーティが提供するSendGrid等がありますが、Windows Azure等に比べて5倍~10倍程度の費用がかかり、ほとんどの開発者が必要としない機能に対しても課金します。Windows Azure上で動作するEmailを送付するアプリケーションに対して、コストメリットのあるソリューションは何かお勧めがありますか?
Steve: 公開しているロードマップには、Windows AzureにEmailサービスを統合するものはありません。利用者がサードパーティ製のEmailサービスを選択することに留意したいと思います。
InfoQ: WebとWorkerを一つのロールでホストする場合、Webロールを利用しRun()メソッドをオーバーライドしてバックグラウンド処理を実行する方法と、Workerロール上でIISを動作させる方法のどちらが良いでしょうか。また、その理由を教えて頂けますか?
Steve: 特に追加作業が不要であるため、WebロールでRun()メソッドのオーバーライドをした方が良いと思います。また、ServiceDefinition.csdefを利用することでWebアプリケーションを整形することができます。Workerロール上でIISを動作させる場合、自身で内部動作を理解する必要があり、そこにメリットがあるとは思えません。
WorkerロールでIISを動作させることを話す目的は、WebロールとWorkerロールが本質的には同じであるということを強調したいからです。Webロールは、自身で行う必要が無いIISの便利な自動設定を保持しています。WorkerロールでIISを動かす(単にWebロールを利用する代わりに)良い用途は思いついていませんが、非常に面白いと思います。