分散キャッシュ テクノロジー “Velocity”
description
Transcript of 分散キャッシュ テクノロジー “Velocity”
分散キャッシュ テクノロジー “ Velocity”
マイクロソフト株式会社アプリケーションプラットフォーム製品部太田佳伸
T3-307
セッション内容
Velocity とは概要用語
機能構成情報使用方法
アーキテクチャの概要動作詳細コンポーネント
まとめ今後の方向性キャッシュとクラウド
Velocity とは ?明示的インメモリ分散アプリケーションキャッシュ任意のデータ型をキャッシュ可能複数のマシン上のメモリを統合し、キャッシュとして使用するというイメージ
一元的なキャッシュ
異なるプロセス、異なるマシンからの同一オブジェクトへのアクセス
クライアントの視点からは、1つの大きな
キャッシュへアクセス
キャッシュレイヤでは、複数のキャッシュノード
へデータを分散配置
特徴CLR オブジェクト、タプル、 XML 、バイナリデータ等任意の型のデータをキャッシュ可能単純な API によるアクセススタンドアローンのサービスとしても、アプリケーションに組み込みのローカルキャッシュとしても使用可能 ノードの追加により動的にスケールアップ可能 レプリカによる HA 構成 自動的な負荷分散 ASP.NET との統合(セッションデータ用のプロバイダ)汎用的なクライアント開発言語のサポート ( 例 , PHP, C#, C++, etc.)V1 :
Cache-Aside アーキテクチャの考慮が必要 (Explicit Caching)オリジナルデータソースとの自動同期はノンサポート
キャッシュの役割
ローカルアクセスによるパフォーマンス向上オリジナルデータが使用できない場合の代用
高速 > 低速
2.A. 異種アプリケーションによる同一データの再利用
2.B. ローディングアプリによる事前のデータ準備(自動同期)
1.同一アプリケーションによる同一データの再利用
インプロセスキャッシュ
キャッシュが使用するメモリはアプリケーションと同一空間か否か?
メモリ空間
アプリケーション
アプリケーション
キャッシュサービス
メモリ空間
キャッシュサービス
ローカル キャッシュ
リモート キャッシュ
透過的と明示的キャッシュ
明示的キャッシュアプリケーションがキャッシュの存在を意識する必要があるCache-Aside パターン
データ?N
Yデータ?
N
Yアプリ キャッシュ
オリジナルデータソース アプリ
キャッシュ
オリジナルデータソース
透過的 明示的
分散キャッシュ
分散キャッシュキャッシュクラスターとして構成され、クラスター内でデータが分散配置される(パーティション etc )
データ?N
Y
アプリケーションキャッシュクラスター
オリジナルデータソース
データ?N
Y
キャッシュクラスター内でデータが分散配置され、各ノードで同一データのレプリカを持つ
アプリ
キャッシュ
オリジナルデータソース
P S
P S
レプリケーション
キャッシュの適用場所
… アプリケーション層/Web 層
ユーザローカル
Database Cloud データ層
Application Application
Application
Velocity ClientLocal Cache
Velocity ClientLocal Cache
Velocity ClientLocal Cache
Server 1 Server 2 Server 3
Velo
city
Serv
ice
Velo
city
Serv
ice
Velo
city
Serv
ice キャッシュ層
背景
アプリケーション要件データソースの散在
ローカル、 RDB 、フェデレート、クラウド可用性、スケーラビリティ、パフォーマンスデータグリッド
ロジックとデータの分散化、ロジックとデータの距離MDM をはじめとするデータスチュワードシップを考慮した統合
メモリを含むハードウェアコストの低下
スケーラビリティと可用性を問われる MC アプリケーションは、ほとんどの場合、中間層に分散キャッシュを実装
Velocity の機能
構成要素使用法アーキテクチャ
Velocity 物理構成要素
共有クラスター構成情報共有フォルダー、 SQL Serverクラスター構成情報を保持
クラスター起動時に各ホストが参照
アプリケーション
API
Powershell管理ツール
Velocityキャッシュ
ホストサービス
Velocityキャッシュ
ホストサービス
ローカルキャッシュ
Windows サービスとして実行他のサーバとの混在は可 キャッシュホスト構成ファイル
DistributedCache.exe.config
クラスターポートデフォルト 22234クラスター内の他のホストとの間でハートビートのやり取りを行う
アービトレーションポートデフォルト 22235キャッシュホストの障害時に、障害が起きていることを確認・調整するためのポート
キャッシュポート デフォルト 22233キャッシュホストとアプリケーション間でデータのやり取りを行う
Windows ファイヤウォールの例外が必要DistributedCache.exe
共有クラスター構成情報
インストール
XML Based File
• 共有フォルダSQL Server Compact Data Provider
• 共有フォルダSQL Client Data Provider
• 接続文字列
インストールに必要な情報 クラスター構成情報の取得方法とロケーション クラスターの規模 メモリ容量
Velo
city
Serv
ice
クラスター構成情報
格納される情報動的グローバルパーティショニングマップ (GPM)
リージョン(パーティション)とホストとのマッピングテーブル
Velocity の構成情報とポリシー情報ポリシーはグローバルに適用される
格納場所 : 共有フォルダまたは SQL ServerServer 1 Server 2 Server 3
Configuration Store 名前付きキャッシュのポリシー、 GPM
Glob
al P
artit
ion
Man
ager
Velo
city
Serv
ice
Velo
city
Serv
ice
Velocity サービスホストの
一つは GPM を持つ
キャッシュ構成ファイル
クライアント app.configキャッシュホスト構成ファイルキャッシュクラスター構成オプション
論理構成要素名前付きキャッシュ
デフォルトキャッシュ名:“ default” 生成削除には管理コマンドを使用
リージョン ( オプション)リージョン内のオブジェクトの検索が可能
タグを使用リージョンごとにタグはインデックス付けされている
クラスター稼働時に作成・削除が可能リージョンを指定した場合、オブジェクトは分散配置されない。
オブジェクト任意の System.Object クラスのインスタンスオブジェクトは KeyValuePair<Key, Value>
A[“苗字” ]=“太田”キャッシュアイテム
キャッシュクラスターによって各オブジェクトに次のような情報が関連付けられる
キー、タグ、バージョン番号、キャッシュ(リージョン)
Velocity キャッ
シュホストサービ
ス
Velocity キャッ
シュホストサービ
ス
Velocity キャッ
シュホストサービ
ス
名前付きキャッシュ
名前付きキャッシュ
リージョン
リージョン
Key Payload Tags
121 xxxx “Toy” “Child”
使用法キャッシュアクセスと APIリージョンとタグ検索機能キャッシュタイプ(クライアント構成)同時性制御(楽観的、悲観的排他制御)期限切れと強制排出 (Eviction)管理監視機能( Powershell )
キャッシュアクセスと APIキャッシュクライアントプログラム
名前空間: System.Data.Caching必要なアセンブリ
CacheBaseLibrary.dll, ClientLibrary.dll, FabricCommon.dll, CASBase.dll
CacheBaseLibrary.dll と ClientLibrary.dll を参照設定に追加
CacheFactory クラスから Cache オブジェクトを生成Cache オブジェクトに対して、次のようなメソッドが提供される
AddPutGetRemoveItem プロパティ
キャッシュクライアント構成情報は App.config またはコード内に記述
オブジェクトの操作CREATE & UPDATE
using System.Data.Caching;CacheFactory CacheCluster1 = new CacheFactory();Cache Cache1 = CacheCluster1.GetCache("Cache1");
Cache1.Add("cachedStringKey1","This will be stored in cache");Cache1.Put("cachedStringKey2", "This will be stored in cache");Cache1["cachedStringKey3“] = "This will be stored in cache");
Add
•同一キーを持つオブジェクトがある場合には例外が発生
Put
•同一キーを持つオブジェクトは更新される
アイテム
•配列形式•オブジェクトは更新
オブジェクトの操作READ & DELETE
using System.Data.Caching;CacheFactory CacheCluster1 = new CacheFactory();Cache Cache1 = CacheCluster1.GetCache("Cache1");
string StringValue1 = (string) Cache1.Get("cachedKey1");string StringValue2 = (string) Cache1["cachedKey2"];
Cache1.Remove("cachedStringKey1");Cache1["cachedStringKey2"] = null;
Get
•指定したキーを持つオブジェクトがない場合にはNULLが返る
アイテム
•指定したキーを持つオブジェクトがない場合にはNULLが返る
Remove
• 指定したキーを持つオブジェクトの削除
アイテム
•配列形式の表現•値としてNULLを指定することでオブジェクトを削除
リージョンとタグ検索機能リージョン
オブジェクトの配置を特定のホストに限定することによりキャッシュ内を検索可能にする機能作成・削除は API から行う
タグ検索リージョン内のテキスト検索機能// タグ定義とタグ付き追加処理
Tag hotItem = new Tag("hotItem");Tag discItem = new Tag("discountItem");catalog.Put(“toyRegion”, “toy-101”, new Toy(“Puzzle”), new Tag[]{hotItem});catalog.Put(“toyRegion”, “toy-102”, new Toy(“Bridge”), new Tag[]{hotItem,discItem});// タグ指定検索List<KeyValuePair<string, object>> toys = catalog.GetAnyMatchingTag("toyRegion", hotItem);
// リージョン作成Cache cache1; Boolean returnValue = cache1. CreateRegion (“region1”, true);// リージョンクリアー・削除 public void ClearRegion ( string region )public Bool RemoveRegion ( string region )
強制排出を有効にするか否か
キャッシュタイプクライアント構成
ローカルキャッシュオブジェクトをシリアライズせずにローカルに保持する方式のキャッシュ
ルーティングキャッシュクライアント内部にルーティングテーブルを保持し、クライアントが直接適切なホストに接続する
設定箇所 ローカルキャッシュとルーティングを有効にする場合
App.config <dcacheClient deployment=“routing"><localCache isEnabled =“true” sync=“TTLBased” ttlValue="300"/>
プログラムコード
CacheFactory mycacheFactory = new CacheFactory(servers, true, //routing true); //local
同時性(排他)制御モデル
Optimisticキャシュ内オブジェクト取得時にロックを取得しない取得時のバージョンと更新時のバージョンの比較
クライアントはオブジェクトのバージョンを取得し、更新後のオブジェクトを送るときにバージョンも一緒に送付するキャッシュホストは、送られたバージョンと現在のキャッシュ内オブジェクトのバージョンが同一の場合にのみ更新を適用更新を行う場合には、バージョンも更新される
Time Client1 Client2T0 CacheItem item =
catalog.GetCacheItem(“PlayerRegion”, ”Zune”);
CacheItem item = catalog.GetCacheItem(“PlayerRegion”, ”Zune”);
T1 ((ZuneObject)item.Object).inventory --;
((ZuneObject)item.Object).inventory--;
T2 catalog.Put(“PlayerRegion”, “Zune”, item.Object, item.Version);
T3 catalog.Put(“PlayerRegion”, “Zune”, item.Object, item.Version);
クライアントはロックせずにデータ取得
アプリケーション内の更新処理
Client2 がキャッシュを更新 ; バージョン一致で更新成功これによりバージョンも更新
Client1 がキャッシュを更新 ;バージョン不一致で更新失敗
K1
同時性(排他)制御モデル
Pessimisticクライアントはデータ取得時にロックハンドル取得(GetAndLock)
ロックが解放されるまでは、他の操作 (GetAndLock) は拒否されるオブジェクトをロックすると、ロックハンドルが返される . ロックを解放する前にクライアントに障害が発生した場合には、タイムアウトにより解放ロックされているオブジェクトが期限切れになることはない。既に期限が切れている場合、ロックが解除された途端に期限切れになる
通常の Get はブロックされずにデータを取得可能更新時にはロックを解放する (PutAndUnlock)更新せずにロックを解放することも可能 (UnLock)
Client1: GetAndLock ("k1")
Client2:GetAndLock ("k1")
Client3: Get("k1")
通常の Get は成功
GetAndLock はロック ハンドルを取得
他の GetAndLockは失敗する
同時制御関連のメソッドメソッド 同時性制御 説明
Get NA Get は排他制御の対象とはならない。オブジェクトが存在する限り取得する。オブジェクトがロックされていても、最新バージョンを取得する。
GetCacheItem NA すべての CacheItem オブジェクトとタグやバージョン等の関連情報を返す
GetIfVersionMismatch NA 既存のオブジェクトが更新されている場合に限り取得する
Add NA Add は追加であり、同一キーのオブジェクトが存在する場合には Fail
Put optimistic (Optional)
オプションでバージョンを指定した場合、バージョンが同じ場合に限り更新する
Remove optimistic (Optional)
オプションでバージョンを指定した場合、バージョンが同じ場合に限り削除する
GetAndLock Pessimistic オブジェクトを取得し、ロックをかける 。他のGetAndLock は例外を発生する。他の Get呼び出しに対する排他制御はない
PutAndUnlock Pessimistic GetAndLock で取得したオブジェクトを更新し、ロックを解除する .
Unlock Pessimistic 明示的にオブジェクトのロックを解除する
期限切れと強制排出キャッシュ内からデータが消去される場合
クラスターまたはサービスの再起動しきい値やメモリ残量に応じた強制排出
期限切れキャッシュ作成時に TTL を指定
New-Cache -CacheName myCacheName -TTL 8 (min)New-Cache -CacheName myCacheName -NotExpirable
強制排出 (Eviction)LowWaterMark < Data < HighWaterMark の場合
期限切れしたオブジェクトのみを削除Data> HighWaterMark の場合
LRU をベースに期限切れしていないオブジェクトも削除メモリ残量が 15%以下になった場合
HWM を超えた場合と同様5% のメモリを確保する
Cache-Aside パターンを考慮する必要がある
管理監視機能( Powershell )クラスター管理
Start-CacheCluster 、 Stop-CacheCluster 、 Restart-CacheCluster
ホスト管理Get-CacheConfig 、 Set-CacheConfigStart-CacheHost 、 Stop-CacheHostGet-CacheStatistics 、 Get-Cache 、 Get-CacheHost 、 Get-CacheRegion
キャッシュ管理New-Cache 、 Remove-Cache Get-Cache 、 Get-CacheConfig 、 Set-CacheConfig 、 Get-CacheStatistics 、 Get-CacheRegion
コマンドの例キャッシュの作成 new-cache -CacheName NC1 -Secondaries 1 -TTL 15 -Eviction LRUキャッシュ情報の取得と結果の例
get-cacheconfig -CacheName NC1CacheName : NC1 TTL : 15 mins Type : PartitionedSecondaries : 1 IsExpirable : True EvictionType : LRU
使用方法
キャッシュの作成API によるプログラム
Demo
アーキテクチャ
キャッシュの動作ローカルキャッシュ高可用性構成レプリケーション( Not in V1)フェールオーバー時の動作
コンポーネントローカルコンポーネント分散コンポーネント
ローカルキャッシュローカルキャッシュはローカルであることと、シリアライズされていないという 2 点でパフォーマンスに貢献クライアント通知機能でクライアントとプライマリの同期
Velocity クライアントローカルキャッシュ
Velocity クライアントローカルキャッシュ
Put(K2, v2) Get(K2)
ルーティング層ルーティング層
Cache2Cache1プライマリリージョン
K2, V2プライマリリージョン
K1, V1
Cache3プライマリリージョン
K3, V3
K2, V2
高可用性の構成
Velocity クライアント
Velocity クライアント
Cache2
セカンダリリージョン
Cache3
セカンダリリージョン
プライマリリージョン
Put(K2, v2)
K2, V2
K2, V2
Get(K2)
プライマリリージョン
K3, V3 K1, V1 K1, V1
K3, V3
Cache1
セカンダリリージョン
プライマリリージョン
K3, V3
K1, V1
ルーティング層 ルーティング層
• Put (K2, V2) on Cache1– Cache2 は変更のレプリカをセカンダリ Cache1 と Cache3 へ送信
– Cache1 または Cache3 からの ACK を待ち、クライアントに応答– すべてのノードからの ACK を待つ必要はない(クォーラムベース)
• Get (K2) on Cache3– Cache3 は K2 のプライマリ Cache2 へリクエストをルーティ
ング
K2,V2
レプリケーション (not in V1)
Cache2Cache1 Cache3
レプリカリージョン
• Put (K2, V2) on Cache1– Cache2 はローカルの処理を行い、 Cache1 に応答を返す– その後、 Cache2 は非同期処理ですべてのホストにレプリカを送信
• Get on cache3– Cache 3 はローカルキャッシュからデータを取得し、結果を返す
Put(K2, v2)
K2, V2
Get(K2)
レプリカリージョン レプリカリージョン
K3, V3 K1, V1 K1, V1K3, V3 K3, V3K1, V1
K2, V2K2, V2
ルーティング層
フェールオーバー時の動作Cache4Primary for (K4,V4)
K4, V4
Secondary for K1, V1K3, V3
Partition ManagerGlobal
Partition Map
Cache2Cache1 Cache3Primary for (K2,V2) Primary for (K3,V3)
K3, V3
ルーティングテーブル
Secondary for K2, V2
K1, V1
K3, V3Secondary for
K3, V3 K1, V1Secondary for
K4, V4K2, V2
K2, V2
レプリケーションエージェント
再構成エージェント
ローカルパーティションマップ
1. Cache3: Cache2 の障害を検知し、 GPM である Cache4 に通知2. Cache4: Cache2 が持っているプライマリパーティション( K2 を含む)に対するセカンダリを探し、その中から新しいプライマリを選出3 . Cache4: Cache1 を新プライマリとして決定、Cache1 と Cache3 に通知、 GPM を更新4. Cache1: 他のセカンダリである Cache3 に対して最新データの確認5 . Cache1: K2 に対するプライマリに昇格、再構成を実行
フェールオーバー時の動作Demo
ローカルストアコンポーネント
Velocity コンポーネント管理監視
キャッシュモニター
ツール統合
インメモリデータマネージャ ハッシュ , B- ツリー
DM API
分散マネージャディスパッチマネージャ分散
オブジェクトマネージャ
分散コンポーネント
障害検知高信頼性メッセージング
データ転送
Fabric
パーティションマネージャ( LPM 、 GPM )
レプリケーションエージェント
再構成エージェント
ルーティングテーブル
Common Availability Substrateキャッシュ API & サービス
キャッシュ API
キャッシュサービス
オブジェクトマネージャ ポリシー管理
クライアント通知機能
リージョン管理クエリ処理
キャッシュ API
ローカルキャッシュ
クライアント
ディスパッチ管理
フェデレートクエリプロセッサ
ローカルコンポーネント :
インメモリデータマネージャメモリベースのローカルデータ管理データ構造、ハッシュテーブル操作、レコードアクセス、タグ、タグベースアクセス同時性制御バージョニング期限切れ、強制排出
オブジェクトマネージャデータマネージャが管理するデータ形式のオブジェクトをオブジェクトとして抽象化し、管理するアブストラクションレイヤーオブジェクトはデータマネージャで管理される形に変換されるリージョン管理、アイテム管理(オブジェクト+メタデータ)、キャッシュポリシーメモリサイズと Eviction の管理データマネージャへのローカルLINQ クエリクライアントへの通知機能
分散オブジェクトマネージャリクエストがローカルホストにあるか、リモートホストにあるかの切り分けプライマリノードへのリクエスト転送CAS とのインターフェースによりHA やレプリケーションを実現
分散コンポーネント再構成エージェント
再構成が必要になる4つのケースとその対応プライマリの障害
プライマリの排除セカンダリのプライマリへの昇格 (PM が選出 )
セカンダリの障害による排除パフォーマンスの問題から単純に排除
プライマリの障害回復による復帰
セカンダリとして参加セカンダリの新規追加
データを事前に復旧するためにビルドフェーズを経て、データ転送による妨害をすることがなくなった時点で参入
パーティションマネージャパーティションマップの維持管理クラスター内のノード障害の通知は PM が受け取り、再編成を開始パーティションマップ
パーティションとノードとのマッピング(ハッシュ)テーブルグローバルパーティションマップ:すべての名前付きキャッシュに対するパーティションマップローカルパーティションマップ:ノードごとのパーティションのリスト
分散コンポーネントレプリケーションエージェント
高可用性のためのレプリケーション機能
単一マスターを基にした、プライマリ - セカンダリ構成
Write オペレーションは常にプライマリプライマリから、複数のセカンダリで構成される WRITE クォーラムにオペレーションを送信
Fabric2重リング構造による障害検知障害時のノードリーダー選出メッセージ転送メッセージルーティングテーブルの管理
64
210
2
3090
135
180
225
5076
120
151
103
200
83
98
174 218
250
4046
17
r-6
r-5
r-4
r6
r5
r4
r7
まとめ
方向性クラウドにおける役割他のテクノロジとの関連スケジュール
Velocity の方向性Web シナリオ
エンタープライズ/ HPC
シナリオ
Software+Services シナリオ
データグリッドとし
てのキャッシュLINQ で容易に、直接
クエリが可能
データとコンピュー
ティングの同一カ所への
配置( HPC サーバへの
統合 )永続性
様々なクライアントか
らのアクセスをサポート
データベースアクセ
ス遅延の短縮化スケーラビリティと可用
性の向上
アクティビティデータの
繰り返し利用
IIS/ASP.Net アプリケ
の状態データの格納
プリフェッチによるレ
ファレンスデータの参照効
率化
クラウドストレージ
に対するアプリケー
ションキャッシュSQL Data Service 、
Windows Azure Storage Service との統合
今後のデータサービス
( BI 、ストリー
ミング、レポーティン
グ)
REST および SOA の
アクセス
クラウドにおける Velocity の役割
クラウドの遅延に対してキャッシュや同期という機能が重要
参考 Sync Framework 、 Huron 、 Astoria Offline
3つの展開パターン
クラウドでホストされるアプリケーション
オンプレミスアプリケーション
サービスとして
クラウドでホストされるアプリケーション
Storage / SDS
Windows Azure
サービスロールVelocityクライアント
Velocity キャッシュ
Windows Azure
サービスロールVelocityクライアント
Windows Azure
サービスロールVelocityクライアント
オンプレミスアプリケーション
アプリケーション
Velocity クライアント
Velocity キャッシュ
ASP.NETアプリケーショ
ンVelocity クライアント
アプリケーション
Velocity クライアント
Storage/SSDS
サービスとしての Velocity
アプリケーションアプリケーションASP.NET
アプリケーション
Storage/SSDS
Velocity クライアン
トVelocity
クライアントVelocity
クライアント
Velocity キャッシュサービス
SQL ServerSQL Data Services
ADO.NET DataSet
ASP.NET キャッシュ
データ関連テクノロジとの関連
VELOCITY分散 Fabric
API
surface
API surface
バックグラウンドでの統合
SQL Server CEストレージエンジンISAM APIs小さなフットプリントコンポーネント化された組み込み DB
大規模分散インフラスケールアウトフェールオーバーレプリケーション分散ハッシュテーブル
任意のオブジェクトを格納できる単純なキャッシュページキャッシュ基本機能Get/Put/Delete API
結果セットに対するキャッシュGet/Put/Delete APIs単純クエリリッチなイベント処理
エンタープライズデータベースリッチなデータベース機能通知機能ブローカー機能
デー
タマ
ネー
ジャ
スケジュール
CTP1TechEd 2008
CTP2PDC 2008
CTP3Mix 2009
Mid 2009RTM
分散パーティションキャッシュサービス
リージョンとタグ検索ローカルキャッシュ ASP.Net 統合可用性 構成オプションPowershell
Bulk Access APIs セキュリティRead-ThroughWrite-Behind
イベント通知
まとめ
パフォーマンス
可用性
スケーラビリティVelocity
Http://msdn.microsoft.com/data