1 / 49

分散キャッシュ テクノロジー “Velocity”

T3-307. 分散キャッシュ テクノロジー “Velocity”. マイクロソフト株式会社 アプリケーションプラットフォーム製品部 太田佳伸. セッション内容. Velocity とは 概要 用語 機能 構成情報 使用方法 アーキテクチャの概要 動作詳細 コンポーネント まとめ 今後の方向性 キャッシュとクラウド. Velocity とは ?. 明示的インメモリ分散アプリケーションキャッシュ 任意のデータ型をキャッシュ可能 複数のマシン上のメモリを統合し、キャッシュとして使用するというイメージ.

yvon
Download Presentation

分散キャッシュ テクノロジー “Velocity”

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. T3-307 分散キャッシュ テクノロジー “Velocity” マイクロソフト株式会社 アプリケーションプラットフォーム製品部 太田佳伸

  2. セッション内容 • Velocityとは • 概要 • 用語 • 機能 • 構成情報 • 使用方法 • アーキテクチャの概要 • 動作詳細 • コンポーネント • まとめ • 今後の方向性 • キャッシュとクラウド

  3. Velocity とは? • 明示的インメモリ分散アプリケーションキャッシュ • 任意のデータ型をキャッシュ可能 • 複数のマシン上のメモリを統合し、キャッシュとして使用するというイメージ 異なるプロセス、異なるマシンからの同一オブジェクトへのアクセス クライアントの視点からは、1つの大きなキャッシュへアクセス 一元的なキャッシュ キャッシュレイヤでは、複数のキャッシュノードへデータを分散配置

  4. 特徴 • CLR オブジェクト、タプル、XML、バイナリデータ等任意の型のデータをキャッシュ可能 • 単純な API によるアクセス • スタンドアローンのサービスとしても、アプリケーションに組み込みのローカルキャッシュとしても使用可能 • ノードの追加により動的にスケールアップ可能 • レプリカによる HA 構成 • 自動的な負荷分散 • ASP.NET との統合(セッションデータ用のプロバイダ) • 汎用的なクライアント開発言語のサポート(例, PHP, C#, C++, etc.) • V1: • Cache-Aside アーキテクチャの考慮が必要 (Explicit Caching) • オリジナルデータソースとの自動同期はノンサポート

  5. キャッシュの役割 • ローカルアクセスによるパフォーマンス向上 • オリジナルデータが使用できない場合の代用 高速 > 低速 1.同一アプリケーションによる同一データの再利用 2.A. 異種アプリケーションによる同一データの再利用 2.B.ローディングアプリによる事前のデータ準備(自動同期)

  6. インプロセスキャッシュ • キャッシュが使用するメモリはアプリケーションと同一空間か否か? メモリ 空間 ローカル キャッシュ アプリケーション キャッシュサービス メモリ 空間 リモート キャッシュ アプリケーション キャッシュサービス

  7. 透過的と明示的キャッシュ • 明示的キャッシュ • アプリケーションがキャッシュの存在を意識する必要がある • Cache-Aside パターン N データ? N データ? キャッシュ Y オリジナル データソース Y オリジナル データソース アプリ アプリ キャッシュ 透過的 明示的

  8. 分散キャッシュ • 分散キャッシュ • キャッシュクラスターとして構成され、クラスター内でデータが分散配置される(パーティションetc) N N データ? データ? Y Y オリジナル データソース キャッシュクラスター アプリケーション

  9. レプリケーション P P S S オリジナル データソース アプリ キャッシュ • キャッシュクラスター内でデータが分散配置され、各ノードで同一データのレプリカを持つ

  10. キャッシュの適用場所 ユーザ ローカル アプリケーション層 /Web 層 … Application Application Velocity ClientLocal Cache Velocity ClientLocal Cache Application Velocity ClientLocal Cache キャッシュ層 Velocity Service Velocity Service Velocity Service Server 2 Server 1 Server 3 データ層 Database Cloud

  11. 背景 • アプリケーション要件 • データソースの散在 • ローカル、RDB、フェデレート、クラウド • 可用性、スケーラビリティ、パフォーマンス • データグリッド • ロジックとデータの分散化、ロジックとデータの距離 • MDMをはじめとするデータスチュワードシップを考慮した統合 • メモリを含むハードウェアコストの低下 スケーラビリティと可用性を問われるMCアプリケーションは、ほとんどの場合、中間層に分散キャッシュを実装

  12. Velocity の機能 • 構成要素 • 使用法 • アーキテクチャ

  13. Velocity物理構成要素 • クラスターポート • デフォルト22234 • クラスター内の他のホストとの間でハートビートのやり取りを行う • アービトレーションポート • デフォルト22235 • キャッシュホストの障害時に、障害が起きていることを確認・調整するためのポート • キャッシュポート • デフォルト22233 • キャッシュホストとアプリケーション間でデータのやり取りを行う • Windows ファイヤウォールの例外が必要 • DistributedCache.exe • 共有クラスター構成情報 • 共有フォルダー、SQL Server • クラスター構成情報を保持 • クラスター起動時に各ホストが参照 アプリケーション API Velocity キャッシュ  ホストサービス Velocity キャッシュ ホストサービス Powershell 管理ツール ローカル キャッシュ 共有 クラスター 構成情報 • Windows サービスとして実行 • 他のサーバとの混在は可 • キャッシュホスト構成ファイル DistributedCache.exe.config

  14. インストール • インストールに必要な情報 • クラスター構成情報の取得方法とロケーション • クラスターの規模 • メモリ容量

  15. クラスター構成情報 • 格納される情報 • 動的グローバルパーティショニングマップ(GPM) • リージョン(パーティション)とホストとのマッピングテーブル • Velocity の構成情報とポリシー情報 • ポリシーはグローバルに適用される • 格納場所: 共有フォルダまたは SQL Server Server 3 Server 1 Server 2 Velocity Service Velocity Service Velocity Service Global Partition Manager Velocity サービスホストの 一つはGPMを持つ Configuration Store 名前付きキャッシュのポリシー、GPM

  16. キャッシュ構成ファイル • クライアント app.config • キャッシュホスト構成ファイル • キャッシュクラスター構成オプション

  17. 論理構成要素 • 名前付きキャッシュ • デフォルトキャッシュ名:“default” • 生成削除には管理コマンドを使用 • リージョン (オプション) • リージョン内のオブジェクトの検索が可能 • タグを使用 • リージョンごとにタグはインデックス付けされている • クラスター稼働時に作成・削除が可能 • リージョンを指定した場合、オブジェクトは分散配置されない。 • オブジェクト • 任意の System.Objectクラスのインスタンス • オブジェクトは KeyValuePair<Key, Value> • A[“苗字”]=“太田” • キャッシュアイテム • キャッシュクラスターによって各オブジェクトに次のような情報が関連付けられる • キー、タグ、バージョン番号、キャッシュ(リージョン) 名前付き キャッシュ Key Payload Tags 121 xxxx “Toy” “Child” リージョン リージョン 名前付き キャッシュ

  18. 使用法 • キャッシュアクセスと API • リージョンとタグ検索機能 • キャッシュタイプ(クライアント構成) • 同時性制御(楽観的、悲観的排他制御) • 期限切れと強制排出 (Eviction) • 管理監視機能(Powershell)

  19. キャッシュアクセスと API • キャッシュクライアントプログラム • 名前空間: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 またはコード内に記述

  20. オブジェクトの操作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");

  21. オブジェクトの操作 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;

  22. リージョンとタグ検索機能 • リージョン • オブジェクトの配置を特定のホストに限定することによりキャッシュ内を検索可能にする機能 • 作成・削除はAPIから行う • タグ検索 • リージョン内のテキスト検索機能 強制排出を有効にするか否か • // リージョン作成 • Cache cache1; • Boolean returnValue = cache1. CreateRegion (“region1”, true); • // リージョンクリアー・削除  • public voidClearRegion ( string region ) • public BoolRemoveRegion ( 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);

  23. キャッシュタイプクライアント構成 • ローカルキャッシュ • オブジェクトをシリアライズせずにローカルに保持する方式のキャッシュ • ルーティング • キャッシュクライアント内部にルーティングテーブルを保持し、クライアントが直接適切なホストに接続する

  24. 同時性(排他)制御モデル クライアントは ロックせずに データ取得 • Optimistic • キャシュ内オブジェクト取得時にロックを取得しない • 取得時のバージョンと更新時のバージョンの比較 • クライアントはオブジェクトのバージョンを取得し、更新後のオブジェクトを送るときにバージョンも一緒に送付する • キャッシュホストは、送られたバージョンと現在のキャッシュ内オブジェクトのバージョンが同一の場合にのみ更新を適用 • 更新を行う場合には、バージョンも更新される アプリケーション内の更新処理 Client1がキャッシュを更新; バージョン不一致で更新失敗 Client2がキャッシュを更新; バージョン一致で更新成功 これによりバージョンも更新

  25. 同時性(排他)制御モデル Client1: GetAndLock ("k1") Client2: GetAndLock ("k1") 他のGetAndLockは失敗する • Pessimistic • クライアントはデータ取得時にロックハンドル取得(GetAndLock) • ロックが解放されるまでは、他の操作 (GetAndLock) は拒否される • オブジェクトをロックすると、ロックハンドルが返される. • ロックを解放する前にクライアントに障害が発生した場合には、タイムアウトにより解放 • ロックされているオブジェクトが期限切れになることはない。既に期限が切れている場合、ロックが解除された途端に期限切れになる • 通常のGetはブロックされずにデータを取得可能 • 更新時にはロックを解放する (PutAndUnlock) • 更新せずにロックを解放することも可能(UnLock) GetAndLockはロック ハンドルを取得 Client3: Get("k1") 通常のGetは成功 K1

  26. 同時制御関連のメソッド

  27. 期限切れと強制排出 • キャッシュ内からデータが消去される場合 • クラスターまたはサービスの再起動 • しきい値やメモリ残量に応じた強制排出 • 期限切れ • キャッシュ作成時に TTL を指定 • New-Cache -CacheNamemyCacheName -TTL 8 (min) • New-Cache -CacheNamemyCacheName -NotExpirable • 強制排出(Eviction) • LowWaterMark < Data < HighWaterMark の場合 • 期限切れしたオブジェクトのみを削除 • Data> HighWaterMark の場合 • LRUをベースに期限切れしていないオブジェクトも削除 • メモリ残量が15%以下になった場合 • HWMを超えた場合と同様 • 5%のメモリを確保する • Cache-Asideパターンを考慮する必要がある

  28. 管理監視機能(Powershell) • クラスター管理 • 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

  29. 使用方法 Demo キャッシュの作成 API によるプログラム

  30. アーキテクチャ • キャッシュの動作 • ローカルキャッシュ • 高可用性構成 • レプリケーション(Not in V1) • フェールオーバー時の動作 • コンポーネント • ローカルコンポーネント • 分散コンポーネント

  31. ローカルキャッシュ • ローカルキャッシュはローカルであることと、シリアライズされていないという2点でパフォーマンスに貢献 • クライアント通知機能でクライアントとプライマリの同期 Get(K2) Put(K2, v2) Velocity クライアント Velocity クライアント ローカルキャッシュ ローカルキャッシュ ルーティング層 ルーティング層 Cache1 Cache3 Cache2 K2, V2 K2, V2 プライマリリージョン プライマリリージョン プライマリリージョン K1, V1 K3, V3

  32. 高可用性の構成 • Put (K2, V2) on Cache1 • Cache2 は変更のレプリカをセカンダリ Cache1 と Cache3 へ送信 • Cache1 または Cache3 からの ACK を待ち、クライアントに応答 • すべてのノードからの ACK を待つ必要はない(クォーラムベース) • Get (K2) on Cache3 • Cache3 は K2 のプライマリCache2 へリクエストをルーティング Get(K2) Put(K2, v2) Velocity クライアント Velocity クライアント ルーティング層 ルーティング層 Cache2 Cache1 Cache3 プライマリリージョン プライマリリージョン プライマリリージョン K2, V2 K1, V1 K3, V3 セカンダリリージョン セカンダリリージョン セカンダリリージョン K2, V2 K2,V2 K3, V3 K3, V3 K1, V1 K1, V1

  33. レプリケーション (notinV1) • 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 K3, V3 K3, V3 K1, V1 K1, V1 K1, V1

  34. フェールオーバー時の動作 1.Cache3:Cache2の障害を検知し、GPMであるCache4に通知 2.Cache4:Cache2が持っているプライマリパーティション(K2を含む)に対するセカンダリを探し、その中から新しいプライマリを選出 3.Cache4:Cache1を新プライマリとして決定、Cache1とCache3に通知、GPMを更新 4.Cache1: 他のセカンダリであるCache3に対して最新データの確認 5.Cache1:K2に対するプライマリに昇格、再構成を実行 Cache4 Primary for (K4,V4) Partition Manager Global Partition Map K4, V4 Secondary for K1, V1 Cache1 Cache2 Cache3 ルーティング テーブル K2, V2 再構成 エージェント K1, V1 Primary for (K2,V2) Primary for (K3,V3) K3, V3 レプリケーションエージェント K2, V2 K2, V2 K3, V3 ローカルパーティションマップ Secondary for Secondary for Secondary for K1, V1 K3, V3 K3, V3 K4, V4

  35. フェールオーバー時の動作 Demo

  36. Velocity コンポーネント クライアント キャッシュ API ツール統合 管理監視 フェデレートクエリプロセッサ キャッシュモニター ディスパッチ管理 ローカルキャッシュ 分散コンポーネント キャッシュAPI & サービス キャッシュ API Common Availability Substrate キャッシュサービス ルーティングテーブル 分散 オブジェクト マネージャ ディスパッチマネージャ パーティションマネージャ (LPM、GPM) 分散マネージャ レプリケーション エージェント ローカルストアコンポーネント インメモリデータ マネージャ クライアント通知機能 オブジェクト マネージャ 再構成エージェント ポリシー管理 クエリ処理 リージョン管理 Fabric 障害検知 データ転送 高信頼性 メッセージング DM API ハッシュ, B-ツリー

  37. ローカルコンポーネント: • インメモリデータマネージャ • メモリベースのローカルデータ管理 • データ構造、ハッシュテーブル操作、 • レコードアクセス、 • タグ、タグベースアクセス • 同時性制御 • バージョニング • 期限切れ、強制排出 • オブジェクトマネージャ • データマネージャが管理するデータ形式のオブジェクトをオブジェクトとして抽象化し、管理するアブストラクションレイヤー • オブジェクトはデータマネージャで管理される形に変換される • リージョン管理、アイテム管理(オブジェクト+メタデータ)、キャッシュポリシー • メモリサイズとEvictionの管理 • データマネージャへのローカルLINQクエリ • クライアントへの通知機能 • 分散オブジェクトマネージャ • リクエストがローカルホストにあるか、リモートホストにあるかの切り分け • プライマリノードへのリクエスト転送 • CASとのインターフェースによりHAやレプリケーションを実現

  38. 分散コンポーネント • 再構成エージェント • 再構成が必要になる4つのケースとその対応 • プライマリの障害 • プライマリの排除 • セカンダリのプライマリへの昇格 (PM が選出) • セカンダリの障害による排除 • パフォーマンスの問題から単純に排除 • プライマリの障害回復による復帰 • セカンダリとして参加 • セカンダリの新規追加 • データを事前に復旧するためにビルドフェーズを経て、データ転送による妨害をすることがなくなった時点で参入 • パーティションマネージャ • パーティションマップの維持管理 • クラスター内のノード障害の通知はPMが受け取り、再編成を開始 • パーティションマップ • パーティションとノードとのマッピング(ハッシュ)テーブル • グローバルパーティションマップ:すべての名前付きキャッシュに対するパーティションマップ • ローカルパーティションマップ:ノードごとのパーティションのリスト

  39. 分散コンポーネント • レプリケーションエージェント • 高可用性のためのレプリケーション機能 • 単一マスターを基にした、プライマリ-セカンダリ構成 • Write オペレーションは常にプライマリ • プライマリから、複数のセカンダリで構成されるWRITEクォーラムにオペレーションを送信 • Fabric • 2重リング構造による障害検知 • 障害時のノードリーダー選出 • メッセージ転送 • メッセージルーティングテーブルの管理 200 180 210 174 218 151 225 r7 250 135 r6 r-6 2 120 17 r5 r-5 103 98 30 r4 r-4 90 40 83 46 76 50 64

  40. まとめ • 方向性 • クラウドにおける役割 • 他のテクノロジとの関連 • スケジュール

  41. Velocity の方向性 • データグリッドとしてのキャッシュ • LINQ で容易に、直接クエリが可能 • データとコンピューティングの同一カ所への配置(HPCサーバへの統合) • 永続性 • 様々なクライアントからのアクセスをサポート • データベースアクセス遅延の短縮化 • スケーラビリティと可用性の向上 • アクティビティデータの繰り返し利用 • IIS/ASP.Netアプリケの状態データの格納 • プリフェッチによるレファレンスデータの参照効率化 • クラウドストレージに対するアプリケーションキャッシュ • SQL Data Service、Windows AzureStorageServiceとの統合 • 今後のデータサービス    (BI、ストリーミング、レポーティング) • REST および SOA のアクセス

  42. クラウドにおけるVelocityの役割 • クラウドの遅延に対してキャッシュや同期という機能が重要 • 参考 Sync Framework、Huron、Astoria Offline • 3つの展開パターン • クラウドでホストされるアプリケーション • オンプレミスアプリケーション • サービスとして

  43. クラウドでホストされるアプリケーション Windows Azure サービスロール Windows Azure サービスロール Windows Azure サービスロール Velocity クライアント Velocity クライアント Velocity クライアント Velocity キャッシュ Storage / SDS

  44. オンプレミスアプリケーション ASP.NET アプリケーション アプリケーション アプリケーション Velocity クライアント Velocity クライアント Velocity クライアント Velocity キャッシュ Storage/SSDS

  45. サービスとしてのVelocity ASP.NET アプリケーション アプリケーション アプリケーション Velocity クライアント Velocity クライアント Velocity クライアント Velocity キャッシュサービス Storage/SSDS

  46. データ関連テクノロジとの関連 ASP.NET キャッシュ ADO.NETDataSet • 任意のオブジェクトを格納できる単純なキャッシュ • ページキャッシュ基本機能 • Get/Put/Delete API • 結果セットに対するキャッシュ • Get/Put/Delete APIs • 単純クエリ • リッチなイベント処理 API surface API surface Velocity バックグラウンドでの統合 データマネージャ 分散 Fabric • SQL Data Services SQL Server • SQL Server CE • 大規模分散インフラ • スケールアウト • フェールオーバー • レプリケーション • 分散ハッシュテーブル • エンタープライズデータベース • リッチなデータベース機能 • 通知機能 • ブローカー機能 • ストレージエンジン • ISAM APIs • 小さなフットプリント • コンポーネント化された組み込みDB

  47. CTP1TechEd 2008 スケジュール • CTP2PDC 2008 • CTP3 • Mix 2009 • RTM • Mid 2009

  48. まとめ Velocity Http://msdn.microsoft.com/data

More Related