More Related Content Similar to マルチ テナント クラウド アプリケーションの設計手法 (20) More from Kazuyuki Nomura (11) マルチ テナント クラウド アプリケーションの設計手法7. 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%
8. 機能 SQL NoSQL
インターオペラビリティ 多くのANSIやISO標準によってほとんどの製品間で互換
性がある
標準化されたAPI (ODBC, SQL/CLI) により、異なるベ
ンダーの製品に対して統一されたアプリケーションか
らのアクセスが可能
APIやデータフォーマットもベンダーごとに異なり、製品間の互
換性はあまりない
ベンダーが異なると、アプリケーションからのアクセスは書き換
えが必要
コンプレックスデータの
格納
複雑なデータタイプは冗長性を排除するために正規化
され複数のテーブルに格納される。データの取得には
複雑なSQLクエリーを実行しなければならない。
ORMによる抽象化は可能だが、非効率でもある
複雑なデータタイプでも一か所に格納することができるので、ア
プリケーションとデータベース間のミスマッチは発生しない。
非正規化されたデータを扱うコストと引き換えに速いデータアク
セスが可能.
クエリーの実行 リレーショナルデータのグルーピングやサマリーに最
適化されている
非リレーショナルで複雑なデータを扱うのは苦手
単一アグリゲートからのキーによる値の取得に最適化されている
サマリーやグルーピングは別途Map/Reduceの実行を必要とす
る
スケーラビリティ 分散トランザクションやDB間クエリーをサポートする
ためScale-upに向いている
いくつかのベンダーはクラスタリングやShardingに
よって分散環境をサポートしている
Scaling-outシナリオに最適化されている.
ほとんどの製品はクラスタリングやShardingを標準サポート.
大容量データセットの
性能
大容量データセットのリード・ライトにはかなりの
チューニングを必要とする
大容量データセットのアクセスに最適化されている
データの一貫性 ACID一貫性を提供する。分散環境ではパフォーマンス
が犠牲となる
分散環境におけるBASEトランザクションを前提とした設計
単一アグリゲート内でのACIDをサポートするケースもある
インテグレーション 複数のアプリケーション間での共有が容易。RDBがアプ
リケーションを統合する役割を果たす。
単一のアプリケーションのために使われることが多い。アプリ
ケーション間の統合はアプリケーションによって行われる
9. Key Value Stores
大規模ハッシュテーブル
Key/Valueペアとして格納
キーを使用したアクセスに最適
単純なクエリーをサポート
Windows Azure Table
11. Column family database
カラムが複数の値を持つ
ROWごとに異なるカラムの
レイアウトを持つ
特定カラムのIndexをサポート
特定カラムへのアクセスに最適
HBase, Cassandra
34. 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
40. Optimistic concurrency control
Client
A
Client
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, 5
If-Match:
1 Ch9, Jan-2, 4
Version Rating
1: Ch9, Jan-2, 41: Ch9, Jan-2, 5
Error: 412
2: Ch9, Jan-2, 5
42. Scheduler - Supervisor
User
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
Asynchronously
4
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 ProcessOrders
Set
LockedBy =
‘unique worker role
instance ID’,
LockedUntil = now + X
Where
Status = (Not processed OR
Processed with Errors) AND
LockedUntil < now
45. 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
48. 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%を示した。