マルチ テナント クラウド アプリケーションの設計手法
DESCRIPTION
本セッションでは Windows Azure におけるマルチ テナント型 SaaS アプリケーションの設計手法について解説します。マルチ テナント アーキテクチャに共通する課題である、データのパーティショニング、データの拡張性、自動化されたプロビジョニング、スケーラビリティの向上などについて議論しますTRANSCRIPT
![Page 2: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/2.jpg)
アジェンダ
![Page 3: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/3.jpg)
Demo :Multi-tenant Application
![Page 4: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/4.jpg)
マルチテナントの必要性と課題
• 運用コスト
• コードベース管理
• テナント間の干渉
• カスタマイズ要求
• Service Level Agreement
![Page 5: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/5.jpg)
マルチテナントの考慮事項
ストレージの選択とパーティショニング
データスキーマの拡張性
パーティショニング-それ以外の要素
スケーラビリティ
プロビジョニング
ユーザー認証の選択肢
管理とモニタリング
UIの拡張性
課金
![Page 6: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/6.jpg)
ストレージの選択
IaaS vs. PaaS
SQL vs. NoSQL
Key Value, Document,
Column Family or Graph
![Page 7: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/7.jpg)
IaaS vs. PaaS機能 SQL on VM SQL Database
分離レベル インフラストラクチャレベルでの分離 複数ユーザーの同居
スロットリング 無し 有り
ドメインへの参加 ドメインへ参加可能、Windows 統合認証が可能 不可能
コンパティビリティ オンプレミスのSQLサーバーと完全互換
SSIS, SSAS, SSRSなどのフル機能をサポート
移行シナリオでは、変更の必要がない
限定的な機能
移行シナリオにおいてサポートされている機能の検証が必要
暗号化サポート 有り 無し
スケーラビリティ X-Large VM, 8 cores, 14GB RAM, 16 TB disk まで
スケールアップ可能
最大で150GB、Federationによるスケールアウトのサポート
コスト コストが高い コストが比較的低い
管理工数 プロビジョニングと仮想マシンの管理が必要 管理はほとんど不要
SLA OOBではSLAは保障されない
(Always Onが必要)
99.9%
![Page 8: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/8.jpg)
機能 SQL NoSQL
インターオペラビリティ 多くのANSIやISO標準によってほとんどの製品間で互換
性がある
標準化されたAPI (ODBC, SQL/CLI) により、異なるベ
ンダーの製品に対して統一されたアプリケーションか
らのアクセスが可能
APIやデータフォーマットもベンダーごとに異なり、製品間の互
換性はあまりない
ベンダーが異なると、アプリケーションからのアクセスは書き換
えが必要
コンプレックスデータの
格納
複雑なデータタイプは冗長性を排除するために正規化
され複数のテーブルに格納される。データの取得には
複雑なSQLクエリーを実行しなければならない。
ORMによる抽象化は可能だが、非効率でもある
複雑なデータタイプでも一か所に格納することができるので、ア
プリケーションとデータベース間のミスマッチは発生しない。
非正規化されたデータを扱うコストと引き換えに速いデータアク
セスが可能.
クエリーの実行 リレーショナルデータのグルーピングやサマリーに最
適化されている
非リレーショナルで複雑なデータを扱うのは苦手
単一アグリゲートからのキーによる値の取得に最適化されている
サマリーやグルーピングは別途Map/Reduceの実行を必要とす
る
スケーラビリティ 分散トランザクションやDB間クエリーをサポートする
ためScale-upに向いている
いくつかのベンダーはクラスタリングやShardingに
よって分散環境をサポートしている
Scaling-outシナリオに最適化されている.
ほとんどの製品はクラスタリングやShardingを標準サポート.
大容量データセットの
性能
大容量データセットのリード・ライトにはかなりの
チューニングを必要とする
大容量データセットのアクセスに最適化されている
データの一貫性 ACID一貫性を提供する。分散環境ではパフォーマンス
が犠牲となる
分散環境におけるBASEトランザクションを前提とした設計
単一アグリゲート内でのACIDをサポートするケースもある
インテグレーション 複数のアプリケーション間での共有が容易。RDBがアプ
リケーションを統合する役割を果たす。
単一のアプリケーションのために使われることが多い。アプリ
ケーション間の統合はアプリケーションによって行われる
![Page 9: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/9.jpg)
Key Value Stores
大規模ハッシュテーブル
Key/Valueペアとして格納
キーを使用したアクセスに最適
単純なクエリーをサポート
Windows Azure Table
![Page 10: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/10.jpg)
Document database
非正規化データ
単一クエリーですべてのデータを取得
JSONやXMLなどのデータ格納に最適
Windows Azure Blob,
Mongo DB
![Page 11: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/11.jpg)
Column family database
カラムが複数の値を持つ
ROWごとに異なるカラムのレイアウトを持つ
特定カラムのIndexをサポート
特定カラムへのアクセスに最適
HBase, Cassandra
![Page 12: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/12.jpg)
Graph database
ノードとエッジそれぞれがプロパティを持つ
エッジは方向性を持つ
ネットワーク状の関連構造を表現するのに最適
Neo4j
![Page 13: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/13.jpg)
ストレージのパーティショニング
サブスクリプションによる分離ストレージアカウントによる分離
高分離レベル 低分離レベル
テーブル・コンテナによる分離SQLデータベースによる分離SQLテーブルによる分離
パーティションキーによる分離SQLテーブル共有モデル
テナント間の干渉が低いシンプルな課金カスタマイズが容易スロットリングの心配が少ない
コストが低い(SQL DB)テナント数の制限がない管理が容易
![Page 14: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/14.jpg)
テーブルストレージの分離
adatumadatum
fabrikam
fabrikam
fabrikam
contoso
adatum_surveyAadatum_surveyB
fabrikam_surveyA
fabrikam_surveyB
fabrikam_surveyC
Contoso_surveyA
adatumfabrikam
contoso
![Page 15: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/15.jpg)
データスキーマの拡張
テナントA:アンケート結果と社内キャンペーンIDを関連づけたい
テナントB:アンケート結果とプロダクト名を関連づけたい
![Page 16: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/16.jpg)
テーブルストレージの拡張性
テナントごとに別テーブル
複数スキーマを持つ単一テーブル
単一テーブルと拡張用の別テーブル
![Page 17: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/17.jpg)
拡張フィールドへのアクセス
![Page 18: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/18.jpg)
パーティショニング-それ以外の要素
Web/Workerロール
キュー
サービスバス
キャッシュ
ACS
VM/VNET
Diagnosticデータ
Management API certs
![Page 19: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/19.jpg)
インスタンス境界の設計
マルチインスタンス・シングルテナント
シングルインスタンス・マルチテナント
マルチインスタンス・マルチテナント
![Page 20: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/20.jpg)
インスタンス境界の設計• コスト
• コードベース管理
• Service Level Agreement
• スケーラビリティ
• リソースの制限
• 認証と承認
• カスタマイゼーション
• ALM
• 課金
• 3rdパーティコンポーネント
• レギュレーション
![Page 21: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/21.jpg)
キャッシュのパーティショニング
• Named Cacheによる分離
• Regionによる分離
• インスタンス共有
• ストレージ分離戦略との整合性を考慮
![Page 22: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/22.jpg)
Web/Workerロールのパーティショニング
サブスクリプションによる分離
高分離レベル 低分離レベル
Cloud Serviceによる分離 ロールインスタンスの共有
テナント間の干渉が低いシンプルな課金カスタマイズが容易
コストが低いテナント数の制限がない管理が容易
![Page 23: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/23.jpg)
Webリクエストのルーティング
URLパスhttp://surveys.tailspin.com/fabrikam
サブドメインhttp://fabrikam.tailspinsurveys.com
カスタムドメイン名のマッピングhttp://surveys.fabrikam.com
認証、SSL、プロビジョニングへの影響を考慮
![Page 24: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/24.jpg)
Queueのパーティショニング
![Page 25: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/25.jpg)
Workerロール
Webロールの負荷軽減
Loadの平準化
スケーラビリティ
タスクのアサイン
キューによる優先度コントロール
ペシミスティック vs. オプティミスティック同時アクセス制御
プログレストラッキング
![Page 26: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/26.jpg)
スケーラビリティ
非同期コール
小さいインスタンスをSO
自動化
スケーラビリティユニット
テストによるボトルネックの削除
![Page 27: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/27.jpg)
ストレステスト
Visual Studio Load Test
高負荷による例外の発見
ボトルネックの発見
ストレージIO
CPU負荷
ネットワーク転送
キュー
![Page 28: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/28.jpg)
![Page 29: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/29.jpg)
プロビジョニング
リソースのセットアップ
コンフィグレーション
カスタマイゼーション
認証方式の設定
プロセスの自動化
![Page 30: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/30.jpg)
ユーザー認証
既存STSとのSSO
1stパーティIdPの提供
3rdパーティーIdPとの連携
Claim based Identity管理
![Page 31: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/31.jpg)
管理とモニタリング
テスタビリティ
スクリプトによる管理の自動化
コンフィグレーション
システム診断
エンドポイントの保護
![Page 32: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/32.jpg)
その他の考慮事項
サブスクリプションモデル
課金
Service Level Agreement
Throttling
On-boarding プロセス
![Page 33: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/33.jpg)
まとめ データタイプに応じて適切なストレージを選択
ストレージとその他要素のパーティショニング戦略
Workerロールの実装と考慮事項
スケーラビリティ戦略とテスト
ユーザー認証における3つの選択肢
マルチテナント環境の管理
![Page 34: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/34.jpg)
Microsoft Architect Forum 2013
Resources
Developing Multi-tenant Applications in the Cloud
http://msdn.microsoft.com/en-us/library/ff966499.aspx
http://WAG.codeplex.com
http://pnp.azurewebsites.net/en-us/
http://windowsazure.com
![Page 35: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/35.jpg)
![Page 36: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/36.jpg)
その他のデザインパターン
データアクセス
コンカレンシー制御
キュー管理
ワークフロー
![Page 37: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/37.jpg)
データアクセス-Delayed write
![Page 38: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/38.jpg)
データアクセス-Directly write
![Page 39: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/39.jpg)
Workerロール
タスクごとにWorkerロールをアサインするか、1つのロールで複数タスクを実行
コスト、スケーラビリティ、実装の容易さで決定
![Page 40: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/40.jpg)
Optimistic concurrency controlClient
AClient
B
5 : Ch9, Jan-1, 3
1 : Ch9, Jan-2, 21 : Ch9, Jan-2, 21 : Ch9, Jan-2, 22: Ch9, Jan-2, 5
HTTPの標準メカニズムを使用 – Etag とIf-Match
エンティティの取得 – Etagとしてバージョンを取得
ローカルでエンティティの更新 – レイティングの変更
バージョンチェック付きアップデート - IF-Match with Etag
バージョンがマッチしたら成功, 新たにバージョンを更新
バージョンがマッチしなければエラー、Precondition failed (412)
9 : Ch9, Jan-3, 6
If-Match: 1 Ch9, Jan-2, 5If-Match: 1 Ch9, Jan-2, 4
Version Rating1: Ch9, Jan-2, 41: Ch9, Jan-2, 5
Error: 4122: Ch9, Jan-2, 5
![Page 41: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/41.jpg)
Scheduler - Supervisor
![Page 42: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/42.jpg)
Scheduler - SupervisorUser
places a
new order
WorkerRole task
(“Supervisor”)
SB Topics
“new
order”
Orders
Job Store
The order and a ProcessOrder
record are inserted using the same
database transaction, and the user
receives the confirmation that the
new order has been placed
1
2
“Checks-out” the “failed” or
“timeout” records and
resume the process from
where it failed
OrderId:154, LockedBy: null,
LockedUntil: null,
ProcessCount:0, Status: Not
processed, Timeout:xx sec
Id:154, Ammount:$ 1000,
Address…
One-to-one
relationship
SB reply
queue
WorkerRole task
(“Scheduler”)
WebRole
Sends the “new order”
message to Topics
Asynchronously4
The worker role
receives “order
received” message
from queue
6Update the record w/
“request sent”5
Gets the record w/ “Not
processed” owned by WR
3
Update the record w/
“request received”7
“Check-out”:
Update ProcessOrdersSet
LockedBy = ‘unique worker role instance ID’,
LockedUntil = now + XWhere
Status = (Not processed OR Processed with Errors) AND
LockedUntil < now
![Page 43: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/43.jpg)
Progress tracking
![Page 44: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/44.jpg)
BLOBストレージのPaging
![Page 45: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/45.jpg)
async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();
Task<string> getStringTask =
client.GetStringAsync("http://msdn.microsoft.com");
DoIndependentWork();
string urlContents = await getStringTask;
return urlContents.Length;
}
Source codes
![Page 46: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/46.jpg)
データスキーマの拡張
コンフィギュレーション
ディクショナリー
アセンブリーのReflection
バージョン管理
データアクセスレイヤーとの相性
![Page 47: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/47.jpg)
データスキーマの拡張
• クエリーのパフォーマンス
• トランザクション要件
• コードの複雑さ
• データ管理
• スケーラビリティ
• ジオロケーション
![Page 48: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/48.jpg)
Windows Azureの優位性 パフォーマンス: Windows AzureがNo.1
Writeにおいて第2位のAWSより 56%速く,Readにおいて第2位のHP
Cloud Object Storageより39%速い
可用性: Windows AzureがNo.1
Windows Azureの平均レスポンスタイムは第2位のAmazon S3より25%速い
スケーラビリティ:AzureとAWSが他を大きくリード
Amazon S3 は平均0.6% 、Windows Azure は1.9%. OpenStack
ベースのHP とRackspace は23.5% と26.1%を示した。
![Page 49: マルチ テナント クラウド アプリケーションの設計手法](https://reader033.vdocuments.site/reader033/viewer/2022052307/558e162c1a28abaa788b45fa/html5/thumbnails/49.jpg)
Windows Azureの優位性 パフォーマンスと可用性においてNo.1
オンプレミスとの対称アーキテクチャ
ハイブリッド構成をサポートする機能グループ
IaaS, PaaS, SaaSに一環したアーキテクチャ
あらゆるシナリオに対応する豊富な選択肢
開発環境の充実
サポート体制
エンタープライズにおける実績
世界規模のパートナーシップ