1.はじめに
4月になりました。新しくITビジネスの世界に飛び込んできた人もいらっしゃるのではないかと思います。
このブログでは主にWindows Azureについて取り上げておりますが、Windows Azureは多彩な機能を備えているだけでなく、各機能の強化のスピードもたいへん速いサービス群であったりもします。
そうした背景もあって、最近ではなかなか書籍化しづらいという事情があります。
そのため、あるサービスに関して纏まった情報を入手しづらいという事もあるのでは?・・・と思っております。
また、最近は比較的新しめのサービスである仮想マシンやWebサイト、メディアサービス、モバイルサービスといった情報の発信が中心となり、なかなかクラウドサービスに脚光が浴びないような気がしてなりません。
そこで、クラウドサービスに関する情報を改めて整理してみようと思い、何回かに分けてこのテーマに関する記事をアップさせて頂きます。
#自分のブログですから書きたいテーマで書けるわけです。
今後、以下のような内容でご紹介していく予定です。
・クラウドサービスの概要と2つのロール
・Webロールを作ってみる
・Workerロールを作ってみる
・クラウドサービスでストレージを利用する(Storage Client 2.0編)
・WebロールとWorkerロールの連携(疎結合編)
・WebロールとWorkerロールの連携(密結合編)
・2つの構成ファイルを極める
・キャッシュサービスの利用
・スタートアップスクリプトによる環境構築
ある意味、私自身のナレッジの棚卸的意味合いを持っている内容にもなっております。
できれば毎週アップできるようにしたいと思います。
・・・と、これだけで終わらせてしまうのも何なので、最初の概要編を続けたいと思います。
2.クラウドサービスの概要と2つのロール
Windows Azureの歴史を紐解くと、Windows Azureではクラウドサービス(古い記事ではコンピュートサービスやホステッドサービスと記述されているものもあります。) とストレージサービスの2種類のサービスがプレビューとして最初に公開されました。
元々、Windows AzureはPaaS (Platform as a
Services) 型のサービスとして提供されました。PaaS最大のメリットに「インフラの管理が簡略化できる」というものがあります。
OSやミドルウェアのパッチマネージメントや、侵入検知、死活状態の監視などといった管理を自動化できるため、ユーザはアプリケーションの開発や運用に集中することができます。
そのため、従来のWindows Serverユーザであれば、アプリケーション開発の知識だけで容易にサービスを開始することができます。
そうしたプラットフォームとしてクラウドサービスは位置づけられています。
また、クラウドという従来とは異なる実行環境に最適化するため、クラウドサービスでは従来とは少し異なるアーキテクチャモデルが採用されました。
具体的に何が異なるかというと、従来では実現することの難しいスケーラビリティ(利用者数や負荷に応じて性能や実行規模を伸縮すること)を確保することができる点が異なります。
Windows Azureでは数十万台規模のサーバによりデータセンタが構成されています。そのため、必要に応じて自由に利用したいサーバ台数を増減させることができます。
そのため、Windows Azureのクラウドサービスではサーバ台数を細かく調整できるようなアーキテクチャになっています。
そのアーキテクチャとは1つのアプリケーションを複数の役割に分けて実行するというものです。
この「役割」をロールと呼びます。
Windows Azureクラウドサービスでは、以下の2種類のロールに分類されます。
・Webロール
主に、Webアプリケーションのフロントエンド(ユーザとの対話を実行する部分)として利用します。
WebロールではIIS(Windows で実行されるWebサーバ)が利用できるようになっていて、ASP .NETやPHPで記述されたWebアプリケーションを実行することができます。
そのため、Webロールで実行可能なアプリケーションはWebアプリケーションであると理解して良いでしょう。
・Workerロール
バッチ型の処理や常駐型のサービスなどを実行することができるため、主にバックエンドとして利用します。
主に、データベースの更新やワークフロー、集計処理など、やや複雑な業務ロジックの実行に利用されることが多くあります。
また、WorkerロールではIISを含まないため、自由度の高いサービスを実行することができます。
たとえば、Windows Serverで実行可能なリレーショナルデータベースなどのミドルウェアを起動して実行することも可能です。
そのほかに、VMロール(仮想マシンロール)というロールも存在しますが、現在ではIaaS型サービスである仮想マシンが提供されていますので、仮想マシンを利用することをお勧めします。
WebロールおよびWorkerロールはそれぞれ独立した仮想マシン上で実行されます。そのため、必要に応じて各ロールの仮想マシンの台数や処理能力を調整することで、アプリケーションの実行能力を細かく調整することが可能です。
たとえば、Webアプリケーションへのアクセスが集中した場合にはWebロールを実行する仮想マシン台数を増やして負荷分散します。Webロールで受け付けたリクエストを一時的に保存しておいて、Workerロールで非同期に処理するようなアーキテクチャにしておけば、Workerロールの処理能力はそのままにしておくことができます。

一方、一定時間内にバックエンド処理を完了させなければならない場合には、Workerロールの台数だけ増やすことで処理能力を一時的に上げることができます。また、必要のない場合には処理能力を下げておくことで、最適な処理能力を常に維持することが可能です。
これには大きなメリットがあります。従来であればピーク時の処理能力に合わせてサーバを用意する必要がありました。そのため、ピーク時以外はサーバのリソースが余剰となり、無駄なコストになっていました。しかし、クラウドサービスであれば必要な時に必要な分だけサーバ台数を確保し、必要がなければ即座に解放することが可能であるため、運用コストを最適化することができるのです。
こうしたコストメリットを最大限に活かせるよう、WebロールとWorkerロールへ最適に役割を配置することがデザインのポイントになってきます。
そのため、役割の分割には平均的なトラフィックだけでなく、ピーク時のトラフィックと発生頻度、そして発生のタイミング(季節や時間帯など)を分析する必要があります。
たとえば、コンサートチケットの予約サービスを提供するようなシステムでは、予約受付のWebアプリケーションは予約開始日に受付処理がピークを迎えることが多くありますが、集計や代金の請求、チケットの発送指示等といったバックエンドの処理は発送日前に負荷が増大することが想定されます。そのために、これらの処理は分割して実行するようにデザインしておく・・・といった具合です。また、予約のキャンセルはいつでも確実に受け付けられるようにしておきたいですから、予約受付とは独立したWebアプリケーションで実行した方が良いでしょう。
このように、業務のニーズに合わせて最適にスケーラビリティを考慮できるというメリットがクラウドサービスにはあります。
Comments are closed here.