Windows Azureエンタープライズアプリケーション開発技法

Windows Azureプラットフォームの主要構成要素
―― 第2章 Windows Azureプラットフォーム概要 2.3.1/2.3.2 ――

日本マイクロソフト株式会社 コンサルティングサービス統括本部
赤間 信幸
2011/11/28
Page1 Page2

2.3.2 SQL Azureデータベースサービス

 業務システムの多くはRDBMSを利用するが、Windows Azure Platformでは、SQL Azureデータベースサービスと呼ばれるRDBMSを利用することができる*14

図 2-19 SQL Azureデータベースサービス

*14 なお、SQL Azureデータベースサービスは、Windows Azureコンピュートサービスと同じデータセンター内にはあるが、個別に作られているものであり、動作しているマシン群も別物である。Windows Azureコンピュートサービス上にSQL Azureデータベースサービスが載っているわけではないことに注意。

A. SQL Azureデータベースの基本的な使い方

 SQL Azureデータベースサービスは、オンプレミス版のSQL Server 2008データベースエンジンに、いくつかのカスタマイズと制限事項を加えることによって作られている。このため、基本的な動作はオンプレミス版のSQL Serverとほとんど同じであり、アプリケーションからの使い方もほとんど同じである。例えば、以下のような特徴がある。

  • 通常のSQL Serverと同様に、ADO.NETなどを使ってSQL Azureデータベースにアクセスすることができる*15
  • SQL Server Management Studioから、Azureデータセンター内にあるSQL Azureデータベースサービスにつないで、データベースを管理することができる。
*15 執筆時点では、ADO.NET、ADO.NET Entity Framework、ODBC、PHPドライバによる接続がサポートされている(http://msdn.microsoft.com/en-us/library/ee336245.aspx)。

 このためアプリケーションの開発も、オンプレミス版のSQL Serverの場合とほとんど同じ感覚で実施できる。例えば、SQL Azureデータベースを使うアプリケーションはリスト 2-1のように書くことができるが、従来との相違点は、利用する接続文字列の違いだけである(表 2-5)。

SqlConnection sqlcon = new SqlConnection(
  "Server=tcp:mbkz90u87g.database.windows.net;Database=pubs;"
  + "User ID=nakama@mbkz90u87g;Password=xxxxxxxx;Trusted_Connection=False;");
SqlDataAdapter sqlda = new SqlDataAdapter("SELECT * FROM authors", sqlcon);
DataSet ds = new DataSet();
sqlda.Fill(ds, "authors");
Console.WriteLine(ds.GetXml());
Dim sqlcon As New SqlConnection(
  "Server=tcp:mbkz90u87g.database.windows.net;Database=pubs;" & _
  "User ID=nakama@mbkz90u87g;Password=xxxxxxxx;Trusted_Connection=False;")
Dim sqlda As New SqlDataAdapter("SELECT * FROM authors", sqlcon)
Dim ds As New DataSet()
sqlda.Fill(ds, "authors")
Console.WriteLine(ds.GetXml())
リスト 2-1 SQL Azureデータベースへの接続方法(上:C#、下:VB)

表 2-5 各データベースに接続する場合の接続文字列の違い

B. SQL Azureデータベースの内部動作

 このように、アプリケーションレベルから見た場合、SQL AzureはSQL Serverとほとんど同じ使い方ができる。しかし、以下の2点は大きく異なる。

  • 1データベース当たりの最大容量に比較的厳しい制限がある(執筆時点では50GB)。
  • データが3台のマシンに自動的に複製される仕組みになっており、障害時には自動的にフェールオーバーが行われるようになっている。

 これらについて、以下に順番に解説する。

 まず、SQL Azureはクラウド環境に適合させたデータベースである。この際、前出の図 2-8に示したように、最大容量を犠牲にしている。オンプレミス環境のSQL Serverでは1データベース当たり16TBまでデータを保有することができるが、クラウド環境のSQL Azureでは1データベース当たり50GBまでとなっている。このため、データ量が多いシステムの場合には何らかの設計上の工夫が必要になる*16

*16 具体的な設計の工夫としては、 直近取り扱うデータのみをSQL Azure上に置き、履歴データなどはオンプレミスのSQL Server上に移すようにする。 取り扱うデータを水平分割し(例:顧客 ID 1,000 人ごとにグループ化し)、複数のSQL Azureデータベースで取り扱う。(=アプリケーションレベルからデータを分割保持する。)

 容量を犠牲にするかわりに得られているのが、安価なハードウェアでの高可用性確保である。SQL Azureは、比較的安価なハードウェア上で動作しているが*17、そのかわりに1つのデータベースを、物理的には3台のマシンに複製した形で保持するようになっている。この結果として、いずれか1台のマシンがクラッシュしても、他のサーバーで処理を引き継ぐことができるようになっている(図 2-20)。

図 2-20 SQL Azureデータベースの物理構成

*17 8CPU、32GB、12diskの構成で、$3,500程度のマシンを利用している。

 内部的な動作は以下の通りである。このような仕組みにより、SQL Azureデータベースサーバーは、安価なハードウェアを使って高可用性を実現することに成功している*18

  • 外部からのTCP/IP接続(SQL Serverのネイティブ通信プロトコルであるTDSプロトコルによる接続)は、いったんSQL TDSと呼ばれるサーバーが受け付ける。このサーバーがロードバランサーとなり、特定のマシン(当該データベースを持っているマシンのいずれか、プライマリサーバーと呼ばれる)に接続をルーティングする。
  • クライアントから更新処理が行われると、接続先となっているサーバー(プライマリサーバー)から複製先となるサーバー(セカンダリサーバー、2台ある)に更新内容が複製され、都合3台で複製を持つ形になる*19 *20
  • プライマリサーバーで障害が発生した場合、SQL TDSは既存の接続をいったんすべて切断し、セカンダリサーバーのいずれかをプライマリサーバーに変更する。そして、以降の接続要求を、そのサーバーへとルーティングする。
  • 以上の複製メカニズムやフェールオーバーメカニズムは、クライアントから見るとすべて透過的である。すなわち、クライアントから見ると、あたかもSQL TDSがSQL Azureデータベースそのものであるかのように見える。

 ここに述べた、容量制限以外にも、SQL Azureには様々な機能的制約事項が存在する*21。しかし、一般的に高可用性データベースの構築や運用というのは非常に難しく、コストもかかるものである。SQL Azureデータベースでは、高可用性データベースを非常に安価に利用することができ*22、しかもこのサービスを利用すれば、データベースの監視もフェールオーバー対策もすべてマイクロソフトにお任せすることができるようになる。こうした観点から見ると、非常にコスト的にもメリットが大きいサービスであると言えるだろう。

*18 なお、ここで述べるデータ複製は、同一データセンター内のハードウェア障害への対策となるものである。ディザスタ(災害)対策や、ユーザーのオペレーションミスに対する対策としてのバックアップはやはり必要になるため、注意が必要である。
*19 このデータ複製処理には、マイクロソフトがSQL Azureのために新規に開発した、特殊なレプリケーションシステムが使われている(=従来からあるログシップ機能やデータベースミラーリング機能、あるいはデータベースレプリケーション機能などを使ってデータが複製されているわけではない)。
*20 なお、SQL Azureデータベースサービスで利用されているデータ更新はリアルタイムに行われる(=アプリケーションに対してコミット応答を返したときには 3台のマシンに反映が終わっている)。このため、障害が発生した場合であっても、コミットされたトランザクションが失われることはない。
*21 分散トランザクションが利用できない、ヒープテーブルが使えない、SQLプロファイラが使えない、など。
*22 おおまかには、10GB当たり約1万円/月程度。これにトラフィック課金が追加される。

 次回も引き続き、Windows Azure Platformにおけるもう1つのサービスである、Windows Azureストレージサービスについて解説する。end of article


 INDEX
  [書籍転載]Windows Azureエンタープライズアプリケーション開発技法
  Windows Azureプラットフォームの主要構成要素
    1.Windows Azureコンピュート・サービス
  2.SQL Azureデータベース・サービス

インデックス・ページヘ 「Windows Azureエンタープライズアプリケーション開発技法」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間