Velocity(2)

マイクロソフトの太田です。最近DataGridやCloudとの関連で、キャッシュサーバVelocityの説明を依頼されることが何度かありました。Velocityの機能は標準的なアプリケーションキャッシュとしての機能として、つぎのようなものがあります。

  • APIによるアクセス
  • リージョンとタグによるキャッシュ内検索機能
  • 楽観的・悲観的排他制御
  • 期限切れと強制排出

これらについては、TechDays2009において説明しています。以下のページからキーワードVelocityにチェックをして、検索してご覧いただければと思います。

https://www.microsoft.com/japan/powerpro/techdays/

このセッションの中でも、説明していますが、Velocityの特徴として、さまざまなマイクロソフトのデータプラットフォーム関連技術から多くの技術を引き継いでいることも挙げておかなければなりません。

その中でも、最近の技術としてはマイクロソフトのクラウド技術であるAzureのビルディングブロックであるSQL Data Services(SDS)からアーキテクチャを引き継いでいる点は興味深いと思います。

これはFabricと呼ばれる技術です。SDSのFabricは、非常に多数のSQL Serverインスタンスの集まりの中で、クラウド規模での高可用性、スケーラビリティを実現するためにSQL Server間を連携する技術です。このために隣接ノードの障害検知や、障害が起こったノードに対する代替ノードの自動検出、パーティションという単位でのレプリカの保持といったデータセンターにおける非常に多数のノードを自動的に管理するための機能が組み込まれています。(データセンターにおいて、ノード同士がお互いの状態を持ち合うことは効率的ではなく、そのために代替ノードをどこかで一元管理するのではなく、使用可能なノードの中から自動的に選出するような機能があります。)

Velocityでは、そこまでノード数が多くなることは稀だと思いますので、上記の自動選出機能は使っておらず、キャッシュノードの情報は構成情報としてSQL Server等で管理されます。しかし、パーティション単位でのレプリカ機能などはまさにSDSとVelocityで共有する機能です。

この図では同一サーバ上に3つのキャッシュインスタンスを立ち上げ、キャッシュとしてレプリカ機能を持つキャッシュNamedCache1があります。

  1. これにオブジェクトを1つ追加することで、2つのノードに同一のオブジェクトがプライマリとセカンダリとして登録されます。
  2. このうちプライマリを保持するノードを停止します(stop-cachehost)。
  3. このとき次の2つのことが起こります。
    1. セカンダリを保持していたDCacheServiceBがプライマリに昇格
    2. 別のノード(この場合DCacheServiceA)をセカンダリとして選出し、そこにレプリカを作成

つまり、単にフェールオーバーするだけではなく、常に複数のレプリカを持つために、別のノードを自動的に巻き込むという動作が行われます。このような動作が実はクラウドデータベースサービスであるSQL Data Serviceでも起こり、クラウドにおける可用性を高めています。