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