www.masatohirai.com

1. データの移行について
• SQL Azure Database
• Windows Azure Storage
2. アプリケーションの移行について
• Windows Azure Hosted Service
• Windows Azure Platform AppFabric
3. アプリケーションの SaaS 化について
• マルチテナント
• ID 管理
4. まとめ
日本円
\11.76
\23.52
\47.04
\94.08
\14.70
USD
$0.12
$0.24
$0.48
$0.96
$0.15
ストレージ トランザクション (回数)
\0.98
/10,000
$0.01
/10,000
アクセス コントロール (transaction)
\195.02
/100,000
$1.99
/100,000
従量課金モデル (1 connection)
\391.02
$3.99
パックモデル (5 connection)
\975.1
$9.95
Web Edition (1GB)
\979.02
$9.99
Business Edition (10GB)
\9,799.02
$99.99
\9.80
\14.70
\29.40
\44.10
$0.10
$0.15
$0.30
$0.45
S
Windows Azure, SQL Azure,
Windows Azure
M
コンピューティング時間
(hour)
Storage などの準備が出来ている前提
L
Windows
XL
開発環境の準備
Azure
ストレージ (GB/month)
Azure
AppFabric
サービス バス
SQL
Azure
Data
Transfers
北米およびヨーロッパ
アジア太平洋
受信 (GB)
送信 (GB)
受信 (GB)
送信 (GB)
パブリッククラウドに持ち出せないもの
法律上の制限
秘匿性が高いデータ、個人情報データ、会計データ
監査を必要とするシステム
トランザクションの整合性を厳密に保証するシステム
パフォーマンス(リアルタイム処理)にシビアなシステム
オンプレミスとクラウドのハイブリッド
シームレスに連携するシステムを構築
データの結合や整合性はアプリで考慮
PUBLIC CLOUD
クラウド上のリレーショナルデータベース
SQL Server 2008 ベース
SQL Azure Database を提供中
今後提供が予定されているもの
Reporting Services, Analysis Services, Data Sync
Reporting
Business
Analytics
Data Sync
データベース
master データベース + ユーザーデータベース
スナップショット分離 ON
復旧モデル = FULL
Web Edition の 1GB と Business Edition の 10GB
接続
TCP 1433 を利用した接続
SQL Server 認証
5分で切断
アイドル、長時間クエリー、長時間トランザクション
サービス品質(SLA)
99.9%(月単位の稼働率)
停止許容時間 = 1ヵ月 43 分以内
現バージョンでサポートされていない機能
分散トランザクション / 分散クエリー
Common Language Runtime (SQLCLR)
hierarchyid, geography, geometry データ型
バックアップ、リストア、アタッチ
データベース ミラーリング
サービスブローカー、フルテキスト検索、透過的暗号化、圧縮
USE ステートメント
SQL Server 構成オプション(sp_configure など)
事前によく確認
Transact-SQL の サポート状況
http://msdn.microsoft.com/en-us/library/ee336250.aspx
http://msdn.microsoft.com/en-us/library/ee336270.aspx
SQL Azure Guidelines and Limitations
http://msdn.microsoft.com/en-us/library/ee336245.aspx
日付時刻データの取り扱い
すべて UTC(協定世界時)
サーバー上での SYSDATETIME(), GETDATE()
UTC は日本より9時間遅れ
DATEADD(hour, 9, SYSDATETIME()) で対応
データを日本時間で保存するか UTC で保存するか?
既存データは日本時間で保存している場合が多い
日本語の取り扱い
明示的に Japanease_CI_AS など日本語の
指定が必要
ソートなどに影響
SQL 文での日本語記述にも "N" プレフィックスが必要
INSERT INTO employees VALUES (1, N'ジニアス')
ファイアウォールの設定(TPC 1433)
オンプレミス側と SQL Azure 側
Hosted Service と同じデータセンターに配置
センター内での通信は無料
VS のデータソースウィンドウ/デザイナ
オンプレミス SQL Server で作成しておき、最後に接続
文字列だけを変更すれば OK
SQL Server 2008 の Management Studio
ローカルのデータベースに接続した後、新しいクエリー
で SQL Azure へログイン
既存データベースを別環境にコピー
開発用の SQL Server 2008 R2 へアタッチ
大改修
クラスタ化インデックスの付与
日付を取得している部分を修正
Windows 認証から SQL Server 認証への変更
ストアドプロシージャの精査と改修
未サポートの機能の切り離し、または代替策の検討
スキーマを SQL Azure へエクスポート
データはまだ入れない
実データを SQL Azure へエクスポート
BCP, SQL Server Integration Services, T-SQL スクリプト,
自前のエクスポートツールなど
VS2008
VS2010 Beta2
VS2010 RTM
SQL Server プロジェクト
No
No
Data-tier Application プロジェクト
No
Investigating
データソース ウィンドウ
DataSet, EDM, LinqToSQL,
データバインディングツール
No
Yes
サーバー エクスプローラー(表示)
No
Yes
サーバー エクスプローラー(デザイン)
No
No
SQL Server デバッグ
No
No
Web Deploy
No
Investigating
手動で作成可能
手動で作成可能
aspnet_regsql.exe
(ASP.NET Providers)
BLOB(ブロブ)
画像、テキスト、ドキュメントなどのバイナリデータ
image, text, varchar(max), varbinary(max)
Content Delivery Network(CDN)に対応
TABLE(テーブル)
レコード数が膨大になるデータ
ログや公開できる商品マスターなど
QUEUE(キュー)
システムとのやり取りに使うデータ
制御用に利用する作業用テーブルなど
Drive(ドライブ)
マウントされた NTFS のドライブ(VHD)
Page BLOB で転送、NTFS API でのアクセスが可能
構造
コンテナ
ブロブ
ブロック
:フォルダ(1階層のみ)
:ファイル(1ブロブ ≦ 50GB)
:分割したデータ(1ブロック ≦ 4MB)
ポイント
非構造型データを格納
サイズが 1MB を超えるデータ
構造
テーブル
:テーブル
エンティティ :レコード(1 レコード ≦ 1MB)
プロパティ
:フィールド(最大 255 個)
ポイント
PartitionKey はスケーリングの分割単位
固定スキーマでなくても OK
PartitionKey
string
RowKey
string
Property1
string
……
MSKK
masath
平井昌人
MSKK
genius
ジニアス
天才系
MSKK
shisago
砂金信一郎
イメケン系
PropN
int
1
2
キュー
メッセージ
:メッセージを格納
:キューに格納する情報(上限 8KB)
メッセージの有効期限は上限 7日間
メッセージを読み取ると一時非表示(最大2時間)
アプリが正常に処理できた場合にアプリはキューから削除
アプリに障害あるとメッセージは復活する
FIFO(ファーストイン/フォーストアウト)は保証していない
SQL Azure と Azure Storage のハイブリッド
リレーショナルデータをすべてを Azure Storage に
するのは非現実的!
基本はスケールアウトの必要性が高いものから
ログや公開可能なマスターなどを TABLE へ
ストレージ(データベース)設計の見直し
リレーショナル から Key Value ストアへ
T-SQL / ADO.NET の放棄と REST プログラミング体得
データアクセスの大改造
プログラムを書き直し(ADO.NET → REST)
JOIN どうする
リレーションが不要になるよう再設計
LINQ を使ってメモリ内で JOIN
アプリケーションの実行環境(ホスティング)
Hyper-V の仮想マシン(VM)
Windows Server 2008 + IIS 7 + ASP.NET + .NET Fx 3.5
2つの役割
Web ロール
Worker ロール
= Web サイト
= バックグランドサービス
VM n 個
ロード
バランサー
Web
Role
Web
Role
IIS
VM n 個
Worker
Role
Worker
Role
Web ロールに実装すべきもの
Web サイト(HTML などの静的コンテンツ)
Web アプリケーション(ASP.NET)
WCF Web サービス
Worker ロールへ実装すべきもの
非同期にしたい処理
書き込み集中の緩和、複雑な演算処理
他の Web サービスなどと連携する処理
バッチ処理・定期タスク・ポーリング
マネージドコードでの実装
Web ロールと Worker ロールの連携
QUEUE ストレージを利用して制御
収まらないデータは 他のストレージを介す
サービス バス
オンプレミスとクラウドのサービスを連携させる基盤
オンプレミスの物理的なエンドポイントを隠ぺい
ルーティングやメッセージ中継を担う
アクセス コントロール サービス
クラウド上での ID 認証サービス
クレームベースのセキュリティトークンサービス(STS)
Workflow
Service
Code Far 型(Client/Cloud)
データをクラウドに配置
オンプレミスのクライアントから SQL Azure や Azure
Storage へ直接アクセス
Windows Form や WPF など操作性のよいクライアント
オンプレミスのデータとの連携が容易
遅延を配慮したインターフェイス
データのプリフェッチやキャッシュする仕組みの実装
Code Near 型
データとアプリをクラウドに配置
Web アプリケーション
アプリはデータが配置されているのと同じネットワーク
内で動作(SQL Azure への転送量が無料)
クラウドの波は不可避
ビジネスモデルや収益モデルが大きく変化
パッケージ販売と SaaS アプリケーションの両立
マルチテナント アーキテクチャーへの取り組み
柔軟な SaaS アプリケーションの基盤
サービスインまでのスピーディな対応
カスタマイズの容易性
オンプレミスとクラウドの連携
オンプレミスとクラウドのハイブリッド
パッケージと SaaS のハイブリッド
オンプレミス ⇔ クラウド
パッケージ ⇔ SaaS