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