CSF のアプリケーション要求ルーティング処理
このポストは、10 月 31 日に投稿された Application Request Routing in CSF の翻訳です。
編集メモ : 今回は、Windows Azure 顧客アドバイス チームの Christain Maritnez が執筆した記事をご紹介します。
アプリケーション要求ルーティング処理 (ARR、英語) は、Windows Azure Web サイトや Outlook.com などの大容量で中核的なアプリケーションに利用されています。マイクロソフト全体で使用されているテクノロジの中でも非常に重要であるにもかかわらず、最も話題になりにくいテクノロジであると言えます。それは無理もないことですが、ARR を Windows Azure アプリケーションで直接使用するという話は、さらに話題に上りません。マイクロソフトでは、Cloud Service Fundamentals (CSF) が示すパターンの 1 つに、複数のクラウド サービスに作業を分割し、ユーザーに基づいてクラウド サービスへのアフィニティを透過的に作成するというものがあるため、このテクノロジを CSF で使用しました。この手法は、クラウド サービスをスケール単位として使用しローカル データを大量に保持している (データがそれを使用するコードと近い場所にある) 大企業のお客様においてパフォーマンス上で有利だったという、過去の経験に基づいています。ARR がこの要件を満たすうえで適しているのは、自然なことと言えます。
複数のクラウド サービスと聞くと、最初は戸惑い、複数のクラウド サービスを使用する代わりに Windows Azure トラフィック マネージャー (WATM) を使用すればよいのではないかと思うかも知れません。実際、パフォーマンスや業務継続性を考慮して複数のクラウド サービスで処理を分割するためにルーティングを行うときは、ほとんどの場合、WATM が適切です。しかし今回のような場合は、WATM では要件を満たすことができません。WATM の負荷分散の手法には、次の3 つ (英語) があります。
- パフォーマンス
- フェールオーバー
- ラウンド ロビン
どれも素晴らしい手法ですが、Cookie による定義に従ってユーザーを識別し、クラウド サービスへ送信するという要件を満たすことはできません。
ARR を使用するには、下記の 4 つが必要です。
- ARR をホストする Web ロールを持つ Windows Azure クラウド サービス
- ARR のインストールと構成を実行するスクリプト
- ARR ルールの構成
- ユーザーが前回訪問時の Cookie を保持していない場合の対応方法
それぞれの詳細とコードについては、すべてこちらのページ (英語) からご確認いただけます。これらの手順は、Azure で ARR を利用するすべてのソリューションで一般的なので、ここでは CSF に特有の次の 2 つの点についてのみご説明します。
- Cookie に基づくルーティングのルール – ARR のルーティング ルールは、CSF では何に相当するのか。
- Cookie が存在しない場合 – Cookie が存在しない場合はどうするのか。また、それをどのように実行するのか。
Cookie に基づくルーティングのルール
Cookie を使用してユーザーのルーティングを実行するロジックは、次のとおりです。
ルールの構成はある程度複雑 (英語) になる場合もありますが、上記のロジックの意味はだいたい以下のとおりです。
要求が SSL 経由で送信され、相対パスで、userpod=(任意の数) という形でユーザーの Cookie を保持している場合は、等号の後ろの Cookie 部分を取得し、送信先 URL をこの取得した値で書き換えます。
皆様にはあまり馴染みのないものかも知れませんが、すぐに慣れていただけると思います。
Cookie が存在しない場合
Cookie が検出されなかった場合は、どうすればよいでしょうか? 解決策はいくつか考えられますが、マイクロソフトは、IRewriteProvider および IProviderDescriptor (英語) の 2 つのインターフェイスを実装するクラスを作成しました。1 つ目のインターフェイスでは、要求の入力に応じてカスタム URL を返すコードを使用できます。2 つ目では、カスタマイズされた入力の構成を簡単に実施できます。プロバイダー向けのコードは、Cookie がない要求を受け取ったときには、毎回単純に構成済みのポッドを取得し、ラウンド ロビン方式でその中から選択します。このコードはそれほど大したものではなく、整数を 1 ずつ増加させて、最後のスポットに行き当たると最初に戻るだけです。
構成用のコードはもう少し興味深いものですが、こちらもそれほどではありません。
この結果、URL に入力可能なポッドが 2 次元行列として得られます。このため Cookie が存在しない場合、実質的にはアドレスに設定済みの番号で構成可能なコードを使用することになります。
まとめ
ARR はマイクロソフトで広く使用されている強力なツールです。この記事では、マイクロソフトが CSF シナリオで ARR を使用している理由をご説明しました。このシナリオでは、ARRの機能を簡単に紹介しただけに過ぎません。一般的な例としては、ルーティングと負荷分散を希望する方法で使用するために、これをクラウド サービスの「内部で」使用するというものがあります。WATM や他の構築済みのサービスがお客様のニーズを満たす場合は問題ありませんが、そうでない場合は、ここでご紹介したこの強力で柔軟なオプションをお試しください。