Smile Engineering blog ( スマイルエンジニアリング・ブログ )

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

Windows Azure Platform 事始め 第2回

2012-01-28 18:34:20 | Windows Azure
前回は、『クラウドコンピューティングについて』を掲載しました。今回は、『Windows Azure Platformについて』と『Azureプログラミングについて』を掲載します。


■2 Windows Azure Platformについて

(1)Windows Azure Platformとは
 前回述べたとおり、Window Azure Platform(以下、Window Azure)はPaaS形式のクラウドサービスです。パブリッククラウド向けのサービスであり、プライベートクラウド構築のために利用することはできません。Windows Azureはアプリケーションを開発・実行するプラットフォームに特化しています。
 Windows Azureの正体は、仮想化環境のHyper-V上で稼動するWindows Server 2008です。そこにユーザのアプリケーションを追加し、サービスが提供されることになります。Windows Azureは、いままでとは違った新しいOSや環境ではありません。



 ●ネイティブコードやPerlも実行可能  
  開発言語はC#とVisual Basicだけに限られたものではなく、.NETマネージコード(p/invoke)からのネイティブコード呼び出しが可能になっています。また、IISに組み込まれているFastCGIを用いた各言語のコード実行がサポートされているので、PHPやPerl、Javaのコードも実行可能です。
  各開発言語の実行環境が64bitのWindowsアプリケーションとして構築されていれば、その実行環境ごとパッケージングして配置することで、Windows Azure上で動作することが可能になります。
 
 ●オープンなインタフェース
  Windows Azureのリソースへのアクセス方法も、スタンダードな実装となっています。Windows AzureのStorage Service(後述)に対するアクセスでは、.NET Frameworkに含まれる既存ライブラリを活用することで、ADO.NETやADO.NET Data Services、LINQによる容易なプログラミングで行うことができます。また、インタフェースとしてはRESTを採用しているため、.NETだけではなくPHPやRuby、Java等からのアクセスも可能です。



(2)Windows Azureの内部構造
 Window Azureでは、Hosted ServicesとStorage Servicesという2つのコンポーネントに単純化され、提供されます。



 ●Hosted Services
  Window Azureに配置するアプリケーションは、Webロール、Workerロールといった、役割ごとにそのインスタンスを構成することになります。

  ・Webロール
   インターネットからのHTTP/HTTPSのリクエストを処理するWebアプリケーションやWebサービスで構成されています。実装技術としては、ASP.NETやWCF(Windows Communication Foundation:アプリケーション同士をネットワーク経由で接続する仕組み)などの.NET Frameworkテクノロジが利用されています。

  ・Workerロール
   インターネットへのエンドポイントは持たず、リクエストをストレージサービスのキューを経由して受け取り、バックエンドの処理を実行します。ストレージサービスは、インターネットからのアクセスも可能なので、たとえば、自社内のサーバーからストレージサービスのキューを介し、Workerロールへリクエストを送信することも可能です。

  各々のロールインスタンスは、仮想マシンに割り当てられているので、利用者側のコンフィギュレーション設定により、インスタンスを動的に変更できる仕組みを持っています。
  また、アプリケーションは、パッケージングし、Window Azureの管理ポータルへアップロードする仕組みになっています。一度、アップロードされたロールのパッケージは、内部的にイメージで管理され、インスタンスの追加の際には、そのイメージが展開される仕組みになっています。

 ●Storage Services
  Window Azureにおいては、既存のファイルシステムの形でストレージを提供するのではなく、拡張性や可用性を備えたサービスとしてストレージサービスを提供しています。つまり、既存環境では、利用者側がハードウェアの追加や運用によって拡張性や可用性を維持していたものが、マイクロソフトによって提供されることになります。

  1.SQL Azure Database
   SQL Serverの技術をベースにしてクラウド上にリレーショナルデータベース機能をオブションで提供するサービスです。

  2.Azure Storage Service
   拡張性の高いストレージ環境であり、特性に合わせて使い分けられる3つのデータストアの仕組み、テーブル、ブロブ、キューを標準で提供しています。

  ・ブロブ
   ブロブは、3種類のストレージのうち、もっともシンプルなものです。アカウント-コンテナ-ブログの3つの階層で構成されています。アカウントは、ファイルシステムにおけるドライブに該当し、コンテナは、ファイルシステムにおけるドライブ直下のフォルダに該当。ブロブは、画像ファイルや動画ファイルなどの実際のバイナリデータに該当します。ファイルシステムに近い使い方ができるで、単にデータを保存する用途に適しています。また、WebロールやWorkerロールのログもブロブに保存されます。

  ・テーブル
   テーブルは、いわゆるRDBのテーブルではなく、シンプルな、エンティティとプロパティの組み合わせを格納する仕組みであり、クラウドで広く利用されている「分散Key-Valueストア」であります。分散Key-Valueストアとは、「キー」と「値」のペアからなるストレージのことです。データ構造がシンプルなため、分散化や高可用性の実現に適しているが、逆にRDBが得意とする複雑な検索・集計やトランザクション処理は得意ではありません。

  ・キュー
   キューは、ブロブやテーブルとは異なり、データの保存ではなく、主にWebロールとWorkerロール間でのデータの受け渡しに使われます。サービス利用者からのリクエストをWebロールで受け取り、キューにデータを書き込み、Workerロールがそれを引き取って処理を行います。結果を再度キューに書き込みWebロールに戻すことも可能です。Webロール、Workerロール、キューをうまく組み合わせることで、一連の処理を非同期に効率よく行うことができます。

(3)Windows Azureサービス提供開始時の価格体系
 提供価格については、為替レートなどの影響もあり、変動要素が大きいので、常に最新の情報を確認する必要があります。



(4)開発エクスペリエンス
  Windows AzureのSDKとVisual Studio用の開発支援ツールをがあれば、Visual Studioをベースとしたクラウド開発環境を構築することができます。C#やVisual Studioを利用する.NET開発者であれば、特に新しいスキルを習得することなく、クラウド開発をスタートすることができます。
  開発したパッケージをWindows Azureに展開する手順も簡単で、一連の流れを、すべてのブラウザ上から実施することができます。Windows Azure開発ポータルにパッケージと設定ファイルを置き、ステージング環境で動作を確認後、本番に展開します。裏側で行われている一連の処理としては、仮想マシンのノードを割り当て、OSと実行するロール(役割)のイメージを配置し、ロードバランサの設定も行います。サービス開始時には、ロギングの仕掛けや停止したノードの処理、OSのセキュリティパッチ適用などにおけるローリング更新の仕組みも組み込まれた状態になってはじめて開始されます。開発者は拡張性や可用性を考えることなく、アプリケーション開発に専念できます。

■3 Azureプログラミングについて

(1)Windows Azureアプリケーション開発の概要
 Windows Azureで動作するアプリケーションは、ASP.NETを使用したWebアプリケーションです。Visual StudioでASP.NETを使用した開発経験があれば、Windows Azureアプリケーションの開発は、今までとそれほど変わりません。開発言語は、C#やVB.NETが使用でき、Visual Studio上で開発することができます。
 Windows Azureに配置するプログラムは、ASPXファイルやDLLファイルなどをひとまとめにしたパッケージファイル(.cspkg)になります。パッケージファイルを作成するためのツールとして、Windows Azure SDKが提供されています。
 Windows Azure SDKには、パッケージファイルを作成する機能のほかに、Windows Azureファブリックのシミュレーション環境である開発ファブリック(Development Fabric)やWindows Azureストレージサービスのシミュレーション環境である開発ストレージ(Development Storage)などが含まれています。これらの開発環境によって、Visual Studioのデバッグ機能が使用でき、1台のPCで開発作業を完結することが可能になります。
 Windows Azureアプリケーションの開発は、このWindows Azure SDKだけで行うことができますが、Visual Studioを使用することで開発生産性を向上させることが期待できます。
 Visual Studioを使ったWindows Azureアプリケーションの開発を行うには、Windows Azure Tools for Microsoft Visual Studioツールをインストールします。これによって、Visual Studio上からパッケージファイルの作成や開発ファブリックとの連動を行うことができます。



(2)開発環境構築のためのシステム要件
 以下の表は、Visual Studioを使用したWindows Azure開発をするためのシステム要件です。



(3)Azureプロジェクトの作成
 開発時に利用するプロジェクトテンプレートは、以下の2種類の方法があります。
 ・Cloud Serviceプロジェクトテンプレート単体に Web/Workerロールのプロジェクトを追加する。
 ・Cloud Serviceと、Webロール、Workerロールの単体もしくは双方を含むプロジェクトテンプレートを利用する。

 Cloud Serviceプロジェクトは、各ロールプロジェクトのデバッグと配布の機能を提供するプロジェクトですが、アプリケーションのソースコード等は含みません。代わりにプロジェクトに含まれるのは、対象とするロールプロジェクトの情報と、そのロールに適用される設定情報ファイルです。



 Windows Azureアプリケーションでもweb.configファイルを使用することができます。しかし、web.configファイルはアプリケーションと一緒にパッケージにした状態での配置しか行えず、配置した状態での動的な変更も行えません。そのため、運用中に変更する可能性のある構成設定はサービス構成(.cscfg)ファイルに記述します。

(4)開発ファブリック
 開発ファブリックは、Windows Azureアプリケーションを開発PC上で実行するための開発用実行環境であり、Windows Azureホスティングサービスのシミュレーション環境です。開発ファブリックへの配布は、Visual Studioでデバッグ実行時、自動的に行われます (内部的には、サービス構成ファイル (cscfg) とは別に、プロジェクト名 .csx というフォルダにその他のファイルが格納されます)。
 通常のASP.NETでWebアプリケーションを開発する際には、IISやASP.NET開発サーバー上で実行確認をしますが、Windows Azureアプリケーションの開発では、この開発ファブリック上で実行確認をします。

(5)インスタンス数の変更
 Windows Azureでは、構成ファイルを変更するだけでインスタンス数を変更することができます。インスタンス数とはWindows Azure上で実行される仮想サーバーの台数のことを指します。インスタンス数の設定は、サービス構成ファイル (cscfg)ファイルで行います。

(6)Windows Azureアプリケーションの配置

 1.パッケージファイルの作成
  Visual Studioより発行を行い、パッケージファイルを作成します。
  クラウドサービスプロジェクトで『発行』を行うと、以下の2つのファイルが作成されます。
  ・クラウドサービスプロジェクト名.cspkg
  ・ServiceConfiguration.cscfg

  1つ目の『クラウドサービスプロジェクト名.cspkg』ファイルは、コンパイル済みのプログラムや、プロジェクト内に含めた画像や静的なHTMLファイルなどが含まれています。
  2つ目の『ServiceConfiguration.cscfg』ファイルは、クラウドサービスプロジェクトに含まれている同名のファイルがそのまま格納されています。
   Windows Azureにアップロードするのは、この2つのファイルのみになります。

 2.ステージング環境への配置
  ステージング環境とは、本番運用前に試験を行う環境です。
  作成されたパッケージファイルと構成ファイルをWindows Azureの管理ポータルから手動でステージング環境へアップロードします。クラウドへの配置は自動で行われます。また、あらかじめ、Windows Azureストレージへアップロードしておき、そこからステージング環境へアップロードすることも可能ですので、複数バージョンのアプリケーションをテストする際には、アップロード時間を短縮することが可能になります。
  配置が完了したアプリケーションは、ポータルサイトより開始ボタンをクリックするだけで、実行が開始されます。
  Windows Azureポータルサイトを利用するためには、Windows Azureのアカウントが必要になります。



 3.プロダクション環境への展開
  プロダクション環境とは、本番運用を行う環境です。
  ステージング環境から、実際のプロダクション環境へ展開するには、管理ポータルの中央のボタンを押下することで実行されます。


 
■ おわりに

 全2回にわたり『Windows Azure Platform 事始め』についての記事を掲載しました。クラウドコンピューティングやWindows Azure Pralformの仕組みを少しでも知って頂けたでしょうか。今後も機会がありましたら、より掘り下げた技術情報を提供していきたいと思っています。


参考文献
Windows Azure入門

Windows Azure のアプリケーション開発
http://www.microsoft.com/japan/powerpro/TF/column/fs_02_1.mspx

株式会社ジェイエスピー
システム部
鈴木真一郎


monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業
コメント

Windows Azure Platform 事始め 第1回

2011-12-28 14:34:57 | Windows Azure
この記事は、Azureプログラミングの初心者用注意点について掲載します。
Windows Azure Platform(ウィンドウズ・アジュール・プラットフォーム)とは、マイクロソフトのクラウドプラットフォーム(PaaS)です。
そして、そのプラットフォーム上で動作するアプリケーションのプログラミングをAzureプログラミングと呼びます。

いきなり、Azureプログラミングの内容に入る前に、クラウドコンピューティングやWindows Azure Platformについて解説します。
記事は、複数回に分けて掲載する予定です。

■1 クラウドコンピューティングについて

(1)クラウドコンピューティングとは
 クラウドコンピューティングのクラウドとは、『雲』のことであり、ネットワーク(インターネット)を意味しています。
従来より「コンピュータシステムのイメージ図」ではネットワークを雲の図で表す場合が多かったため、それが由来と言われています。



 クラウドコンピューティングでは、ユーザ(企業、個人など)は、コンピュータ処理をネットワーク経由で、サービスとして利用します。
従来のコンピュータ利用形態としては、ユーザーがコンピュータのハードウェア、ソフトウェア、データなどを、自前で準備して保有・管理していました。それに対し、クラウドコンピューティングでは、ユーザーはインターネットの向こう側からサービスを受け、サービス利用料金を支払う形になります。具体的なサービスとしては、Webブラウザを利用して、ニュースを読んだり、オンラインショッピングをしたり、ブログやSNSなどで情報交換を行ったりするなどがあります。

 Webブラウザを使って利用できるこれらのWebサービスは、インターネットの向こう側に存在する無数のサーバーコンピュータによって運用されています。
無数のサーバーコンピュータは、ネットワーク接続されて大規模クラスタシステムを構成しています。そして、クラウドのためのソフトウェアを搭載することによって、1つの巨大なサーバーコンピュータが稼動しているように見せかけ、世界中の利用者からの膨大な量のリクエストを処理しています。

(2)クラウドコンピューティングの特徴
 主なクラウドコンピューティングの環境では、次のような特徴を備えています。

1.仮想化
 コンピューティングリソースを必要な分だけ利用することができる。

2.スケールアウト(接続されたサーバの台数を増やして処理能力を向上させること)
 需要の増減によって、コンピューティングリソースを追加・削除が可能なため、事前に行うべきコンピューティングリソースの需要予測が不必要である。

3.従量課金
 コンピューティングリソースを利用した分だけ料金を支払う。

 以上のような特徴から、最大のメリットとして挙げられるのは、コストに対する柔軟性です。
通常、新しいサービスを構築する場合、需要予測は大変難しいものになります。しかし、クラウドコンピューティングであれば、取りあえずサービスを構築して、コンピューティングリソースに関しては、需要を見ながら増減することが可能になります。
 現在クラウドコンピューティングが注目を集めている最大の理由は、コンピューティングリソースへの投資効率を向上させることができる点にあります。

(3)クラウドコンピューティングのテクノロジ
 クラウドコンピューティングのテクノロジは、コモディティ(メーカーごとの差・違いが不明瞭化したり、なくなること)ハードウェアを大量に利用することによって、膨大なコンピューティングパワーを低コストで調達する考えを実現したものです。
GoogleやAmazonなどの大規模Webサービスを提供している企業は、自社のサーバーに集まる膨大な数のリクエストを処理するため、このような膨大なコンピューティングパワーを持つ、情報インフラストラクチャが必要になります。しかし、コンピュータベンダーが提供する機能的にもコスト的にも高性能・高額なサーバーシステムを使用したのでは、設備コストの負担が重過ぎて事業が成立しません。
そこで、
 ハードウェア:パーツで購入し自社で組み立てる。
 ソフトウェア:オープンソースソフトウェアをベースにシステムを構築し、不足する機能は自社で開発する。
といった自給自足的な開発アプローチをとってきたようです。
 このような経緯により開発されたクラウドコンピューティングのテクノロジは、大規模自立分散システムの技術を基盤としており、技術的には、グリッドコンピューティングやユーティリティコンピューティングに類似しているようです。

1.レイヤーモデル
 クラウドコンピューティングのシステムアーキテクチャは事例ごとに異なっています。
現状では既存の事例をサービス種別で分類したXXX-as-a-Service(XaaS)式のレイヤーモデルで説明されることが多いようです。



◆SaaS(Software-as-a-Service:サービスとしてのソフトウエア)
 SaaSは、一般的なWebアプリケーションを提供する形態です。
従来のソフトウェア販売で中心となっていたのは、ソフトウェアをパッケージ製品としてユーザーにライセンス販売する形態であり、ユーザーは自分の持つコンピュータでそのソフトウェアを稼働させ、利用する形態でありました。
一方、SaaSでは、ソフトウェアを提供者側のコンピュータで稼働させ、ユーザーはそのソフトウェア機能をインターネットなどのネットワーク経由でサービスとして利用し、サービス料を支払う形態です。

●ユーザー側のメリット
・使用した期間・量だけのサービス料で済む。
・ユーザー側のコンピュータ導入・構築・管理などが不要(または最小限)になる、このため短期間での利用開始や、ユーザー数や処理量の急な増減にも対応しやすい。
・常に最新のソフトウェア機能を使用できる。

●提供者側のメリット
・新規ユーザーの獲得が容易である。
・ソフトウェアのみの販売よりも売上の向上・平準化になる。
・コンピュータ運用はスケールメリットと自社要員が生かせる。
・各ユーザー固有の導入や保守のサポートが軽減できる。

●デメリット
・プロバイダ側や通信回線、ネットワークの障害時には使用できない。
・セキュリティ上の懸念。
・ユーザー固有の仕様変更や運用変更は困難。
・長期利用の場合に割高となる可能性。
・クラウドが示す「インターネットの向こう側」がどこなのかが不明確なため、海外のデータセンターで運用されていた場合、データの損失などの問題が発生したときに、国内法が適用されないリスクもある。

◆PaaS(Platform-as-a-Service:サービスとしてのプラットフォーム)
 PaaSは、ソフトウェアを構築および稼動させるための土台となるコンピュータプラットフォームとそれを支援するサブシステムを、インターネット経由のサービスとして提供する形態です。
コンピューティングプラットフォームの導入や維持・管理に関わる煩雑でコストのかかる作業をサービスとして提供します。PaaSでのユーザは、開発者が対象になります。ユーザは、プラットフォーム上で構築したサービスを自分の顧客に提供することができます。
実際には、提供者側のデータセンターから提供される仮想化された開発・実行環境を利用し、ブラウザベースの管理ツールとともにインターネット経由でユーザは利用することになります。

 PaaSは、SaaSの発展形ともいわれており、業務ソフトなどをインターネット上のサービスとして利用できるようにするSaaSの考え方をさらに深化させたものです。 
実際、PaaS事業者はSaaS事業も同時に提供していることが多く、独自の業務アプリケーションをPaaS上に構築し、一般的なソフトはSaaSを利用する、といったように組み合わせて利用する場合が多いようです。

●メリット
・サービスを構築する場合、コンピュータのハードウェアやソフトウェアを購入し、システムを構築して管理・運用する必要がない。
・契約したその瞬間からアプリケーション構築に着手することができる。

●デメリット
・既存のソフトウェアを実行するためにはそれなりの移植作業が必要になる。

◆IaaS(Infrastructure-as-a-Service:サービスとしてのインフラストラクチャ
 コンピュータシステムを構築および稼動させるための基盤(仮想マシンやネットワークなどのインフラ)そのものを、インターネット経由のサービスとして提供する形態です。コンピュータハードウェアを提供しているイメージになります。
IaaSでのユーザは、開発者が対象になります。ユーザーはサーバやソフトウェアやデータセンターのスペースなどを自分で購入する代わりに、完全にアウトソースされたサービスとして購入することになります。そのサービスは利用レベルに応じた従量制で課金されます。

●メリット
・既存のソフトウェアをOSごとそのまま搭載することができるので、手が出しやすい。

●デメリット
・システムのスケールアップ(ダウン)やフェイルオーバーへの対応は、すべてプログラマ自身で実現しなければならない。

◆レイヤーモデルのまとめ
 各々のレイヤーモデルは、Webアプリケーションの構築を支援する独立した選択肢となります。
クラウドの利用者が独自のWebアプリケーションを構築する場合に、
・SaaSを使えばWebアプリケーションの機能の一部を流用することができる。
・PaaSを利用すればWebアプリケーションの実行環境とその開発環境一式を手にすることができる。
・IaaSを利用すれば従量課金でサーバーを調達することができる。

2.具体的な事例
 
◆Salesforce CRM(SaaS)
 Force.comのシステムは、コンピュータベンダーから調達したハードウェアとソフトウェアを利用して構築されており、リレーショナルデータベースのテクニックを駆使して実現しており、Applicationレイヤーにおいて仮想化を行っています。

◆Google App Engine(PaaS)
 Webアプリケーションの仮想エンジン、つまり抽象度が高いアプリケーションフレームワークのレベルでの仮想化を実現しています。プログラミング環境には、Python と Javaなどに対応しています。
利用者は原則的にWebアプリケーションとしての振る舞いを記述するだけで、システムのスケールアップ(ダウン)やフェイルオーバーへの対応はすべてシステムに委ねることができます。

◆Windows Azure(PaaS)
 ソフトウェアは特定の言語に依存しないCLRと呼ばれる仮想マシンで実行されるので、App Engineとは異なりプログラミングの自由度があります。しかし、EC2のように利用者自身がOSなどを直接操作できるわけではありません。
また、システムのスケジューリングやアベイラビリティ制御を自動化するための機能も提供されますが、App Engineのようにすべてをシステムに委ねてしまえるわけでもありません。

◆Amazon EC2(IaaS)
 抽象度の低い物理ハードウェアをシミュレートする仮想化方法を採用しています。利用者には普通のPCと同様に見えるので、基本的には手馴れた操作で扱えます。
また任意のOSを選択できるので、サービスを開発するプログラマの自由度は従来のプログラミングと同様に非常に大きくなります。

(4)プライベートクラウド
 プライベートクラウドとは、企業が自社内でクラウドコンピューティングのシステムを構築し、企業内の部門やグループ会社などに対してクラウドサービスを提供する形態のことです。



 本来クラウドコンピューティングは、パブリックなサービスにすることによって大量の利用者を収容し、「コンピューティングリソースの投資効率の改善」を提供しています。
しかし、「クラウドの技術は使いたいが、クラウドサービスを利用することができない」といったニーズもあります。
そのニーズとは、
・企業内の基幹システムのような事業戦略上、運用を他社に委ねることのできない情報システムである。
・事業者として遵守せざる得ない法令に対してクラウドサービス事業者からの保証を得られないケース。

 こういった、コストよりも優先しなければならないさまざまなニーズに対応するために、利用者自身でクラウド的なデータセンターを運用することを前提に、「購入可能なクラウド技術のパッケージ」としての製品が登場してきました。
これがいわゆるプライベートクラウドと呼ばれるシステムです。

●メリット
・運用管理の効率化が図れる。
・信頼できるセキュリティメカニズムを堅持できる。

●デメリット
・パブリッククラウドのような大きなスケールメリットはあまり期待できない。
・システム構築のイニシャルコストやランニングコストは従来どおり自社内の課題として残る。


今回は、『クラウドコンピューティングについて』を掲載しました。次回は、マイクロソフトが提供するPaaSである『Windows Azure Platformについて』を掲載いたします。

参考文献
Windows Azure入門

-------------------------
株式会社ジェイエスピー
システム部
鈴木真一郎
------------------------- 

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業
コメント