InfoQ

News

Velocity: Microsoftの分散型インメモリキャッシュ

作者 Jonathan Allen, 翻訳者 編集部 投稿日 2008年6月17日 午前4時23分

コミュニティ
.NET,
Architecture,
SOA
トピック
.NETフレームワーク,
エンタープライズアーキテクチャ
タグ
Caching

分散型インメモリキャッシュは、主流のJavaアプリケーションからErlangのような非主流の言語に至るすべてにおいて、ここ数年でかなりポピュラーになった。Microsoftは、主にオープンソース界で見られる技術に追いつくよう、かなりすさまじい努力を続け、独自の分散型キャッシュを発表した。

Velocity(サイト・英語)は.NETプラットフォーム用に特別に設計された分散型キャッシュである。その機能の多くは他の分散型インメモリキャッシュに慣れている人ならすぐに分かるであろう。Velocityは現在、コミュニティ技術プレビューとして利用可能である(source)

Velocityのクライアントには2つのタイプがある。単純なクライアントは単一のキャッシュサーバーについてしか把握していない。要求されたオブジェクトをそのキャッシュサーバーで入手できない場合、キャッシュサーバーはそのオブジェクトを適切なサーバーから取り出す。ルーティングクライアントはもっと深くかかわる。ルーティングクライアントは特定のオブジェクトがどこに存在するかを常に把握し、該当のキャッシュサーバーに直接クエリーを送ることができる。キャッシュロケーションデータのすべてをルーティングクライアントに送信するパフォーマンスインパクトについては、これまで議論されていない。キャッシュサーバーに加え、どちらのタイプのクライアントも、ローカルキャッシュオプションをサポートしている。これはまだ、サーバーの無効なデータをチェックすることを必要とするが、大規模なキャッシュオブジェクトを処理する際のネットワークトラフィックは低減される。

並行性(コンカレンシー)に関して、2つのオプションが存在する。楽観的な並行性では、現在無効なオブジェクトへの最初の更新は成功し、それ以上の更新は失敗する。悲観的なロッキングでは、ロックハンドルが返される。ロックを解除するか、タイムアウトが終了するまで、ロックを取得する試みはすべて失敗する。ロックの取得に失敗した場合は、ノンブロッキング操作である。

オブジェクトは、有効期限になると、またはメモリ圧力が制限を超えると、明示的にキャッシュから削除される。このeviction(追い出し)として知られている最後の方法には、LRU(Least Recently Used; 最小使用頻度)アルゴリズムが採用されている。

オブジェクトには、キーの他に、タグの集合が関連付けされていることがある。タグのリストと一致する1つまたはすべてのオブジェクトを取り出す方法はいくつか存在する。

ASP.NETのセッションモデルに対するサポートはあるが、それはMicrosoftが思い描いている数ある用途の1つにすぎない。S Muralidhar氏(source)は次のように書いている。

ASP.NETに対する当社のサポートは、統合された.NETプラットフォームの話の一部にすぎません。ASP.NETアプリケーションだけに焦点を合わせているのではないので安心してください。一例として、当社はASP.NETが関係するとはかぎらないプレーンな.NETアプリケーション(たとえば、windowsサービス)やIISアプリケーションとの統合を計画しています。

次に、これから登場する機能について話します。現在のCTPは、スケールアウト、ローカルキャッシング、ASP.Net SessionStateの統合、その他多くのサポートを特徴としています。当社は、今後のCTPやRTMのために検討している作業項目が一杯に詰まったバッグを持っています。それには、可用性、複製されたキャッシュ、通知のサポートや、より良い管理サポートなどが含まれます。

プッシュベースの通知は、当社が多くの人々から受けている要求です。確かにそれは当社が深く調査している領域です。現在のCTPはこれをサポートしていませんが、近日のリリースで改善される可能性が非常に高いです。それまでの次善策として、ローカルキャッシュでVelocityを使用している場合は、ローカルキャッシュ内の無効または期限切れの可能性があるオブジェクトを処理するのに役立つ、GetIfVersionMismatch()のようなAPIを使用するといった方法があります(適切な動作を得るにはGet()とGetIfVersionMismatch()の組み合わせを使用する必要があります)。 

より高度な技術のサポートも計画されている。Anil Nori氏(source)は次のように言い添えている。

> アプリケーションは、データアクセスにキャッシュを使用し始めたように、クエリー、トランザクション、分析性、同期化など、より豊富なデータサービスを要求するようになると私は考えています。たとえば、.NETアプリケーションは、バックエンドSQL Serverデータベースにクエリーを実行するのと同じように、分散型キャッシュでLINQクエリーを必要とするようになると当社は考えています。私たちは、「Velocity」がそのような包括的な分散型キャッシュプラットフォームになることを心に描いています。

原文はこちらです:     http://www.infoq.com/news/2008/06/Velocity

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

特集コンテンツ一覧

トップスポーツチームの監督に教わる秘訣

この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。

事例研究:Dutch Railwaysのプロジェクトにおける分散拠点でのスクラム・プロジェクト

この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。

Agile2008チーム参加レポート - 帰国そして変化

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。

SilverlightとJavaのインターオペラビリティ

マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。

Agile2008 チーム参加レポート - カンファレンス参加編

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。

Agile2008 チーム参加レポート - 動機/準備編

筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。

Javaトラブルシューティングメルマガ総集編 2008/08~09

エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。

モデル駆動アプローチがうまく機能しない(しなくなる)8 つの理由

この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。