エクスポート (0) 印刷
すべて展開

Azure キャッシュの Memcached ラッパー

更新日: 2010年7月

Memcache は、データベースから負荷を取り除くことにより、規模の大きい Web アプリケーションの速度を向上させるために役立つ、分散型のインメモリ キャッシュ ソリューションです。Memcache はインターネットの多くの大規模 Web サイトで使われており、革新的な方法で、他のテクノロジと統合されています。

Azure は、既存の Memcache 実装を有しているお客様が簡単に Azure に移行できるようにするため、Memcache プロトコルをサポートしています。アプリケーションで既に Memcache を使用している場合、既存のコードを新しいコードで置き換える必要はありません。

Azure Caching を Memcache と共に実行することは、たとえばワーカー ロールで Memcache だけを実行するよりも優れた手法です。これは、Azure Caching が、正常なシャットダウン、高可用性、ローカル キャッシュ (クライアント shim 上)、通知 (クライアント shim 上)、データの整合性、高可用性 (HA)、およびクライアントに透過的で簡単な拡大/縮小などの付加価値のある機能を提供するためです。たとえば、Azure Caching と Memcache を使用したサーバー ハッシュ スキームとパーティション管理は、負荷分散やデータの整合性の維持に対して有効です。

Azure Caching は Memcache ワイヤ プロトコルをサポートしています。このプロトコルには、バイナリ バージョンとテキスト バージョンの 2 つのバージョンがあります。

Azure Caching は、独自のワイヤ プロトコルに加えて、このプロトコルをサポートしています。Memcache クライアントでは、Azure との互換性を予期する必要があります。Azure Caching は、他の Memcache 実装でサポートされるほとんどすべての API をサポートします。

そのため、ユーザーが Azure に Memcache アプリケーションを導入し、そのアプリケーションで Memcache の Azure の実装をポイントすれば、追加のアプリケーションの変更なく、そのまま動作し続けるはずです。

Memcache は、"サーバー ゲートウェイ" の使用と、"クライアント shim" の使用という、2 つの異なる開発者の作業をサポートします。

実装、展開、および概念の理解の観点からは、サーバー ゲートウェイは単純ですが、以下で説明する重要な注意事項もあります。

サーバー ゲートウェイを使用するときは、サーバー キャッシュ クラスターは Memcache ソケットでリッスンします。つまり、ソケットを開き、Memcache プロトコルでパケットをリッスンします。変換レイヤーはありません (以下で説明します)。

この機能を有効にするには、キャッシュ クラスターで追加の内部エンドポイントを開き、それに名前を付けて Memcache ポートにします。このポートにバインドされたすべてのトラフィックは、Memcache プロトコル経由で受信されます。

ただし、サーバー ゲートウェイでは、クライアント shim のシナリオの使用と比較すると、パフォーマンスが非常に重要となるシナリオにおいてパフォーマンスが低下します。これは、Memcache 実装でのハッシュの実装が Azure Caching でのハッシュの実装と異なるためです。Memcache 実装はキャッシュ クライアントへのハッシュ スキームを遅らせます。Azure では、キャッシュ サーバーがハッシュを生成します。Azure Caching は、キャッシュ サーバーがハッシュ動作を指定するように動作します。これにより、サーバーは負荷分散を行い、膨張、収縮し、データ損失が発生しないようにするなどします。

Azure は項目をキャッシュし、項目のキーに基づいてハッシュが生成されます。Azure はこのハッシュを使用して、キャッシュされた項目が含まれているキャッシュ クラスターのサーバーを判断します。その結果、Azure サーバー ゲートウェイはキーを再ハッシュする必要が生じ、項目をキャッシュ クラスターの宛先サーバーにルーティングします。この操作には余分なネットワーク ホップが関連するため、これによってパフォーマンスが低下します。

Memcache クライアント shim は、キャッシュにアクセスするクライアントにインストールされます。通常、これはアプリケーションそのものを持つ Azure ロールです。クライアント shim はローカル キャッシュをサポートします。

この shim は変換レイヤーであり、Azure Caching API への Memcache クライアント呼び出しを変換します。shim には、Memcache プロトコル ハンドラーと、Azure Caching クライアントという 2 つの部分があります。変換レイヤーである shim は、Azure Caching API への Get および Put 呼び出しが行われる場所にかかわらず、クライアントそのものにインストールされます。

Memcache クライアントが Memcache サーバーとして localhost を指すと、Put 操作は最初に Azure のキャッシュ サーバーではなく、shim のローカル インスタンスによって扱われます。次に、shim はキャッシュ クラスターの正しい宛先サーバーを判断し、Put 操作を Azure にリダイレクトします。

これにより、サーバー ゲートウェイ シナリオに存在する余分なネットワーク ホップが排除されます。欠点は、この shim を取得し、それをアプリケーションに配置しなければならないことです。

キャッシュのトポロジには、共存キャッシュと専用キャッシュ ロールの 2 つがあります。

キャッシュ クラスターを専用のキャッシュ ワーカー ロールに展開する場合は、キャッシュ クライアントから Memcache shim を使用します。これにより、パフォーマンスが向上し、自動検出コードを避けることができます。

共存キャッシュを使用し、キャッシュ クライアントが同じロールにホストされている場合は、Memcache サーバー ゲートウェイを使用します。クライアント shim の使用には追加の処理レイヤーとリダイレクトが必要ですが、同じロール内からキャッシュにアクセスするときは必要ありません。追加のリダイレクトにより、不要なオーバーヘッドが発生します。

サーバー ゲートウェイまたはクライアント shim を使用するプログラミング モデルはありません。必要なものは、構成設定の変更です。クライアント shim ではインストールも必要です。

サーバー ゲートウェイまたはクライアント shim の使用は、プログラミング モデルというよりは展開操作です。プログラマは同じ Get または Put API を呼び出そうとして、アプリケーションのみが少し異なって送信されます。元のキャッシュ サーバーを指すのではなく、サーバー ゲートウェイまたはクライアント shim のどちらかを指すようになります。

最後に、サーバー ゲートウェイおよびクライアント shim のいずれに対しても、使用中の Memcache クライアント ライブラリは不明です。これは、標準 Memcache 実装で同じプロトコルが使用されるためです。キャッシュ サーバーは、標準 Memcache プロトコルに準拠するデータのパケットに関係するのであって、Memcache クライアント実装そのものには関係しません。

  1. キャッシュ サーバーをホストするロールで、ロールのプロパティおよび [Caching] タブに移動します。

  2. [キャッシュを有効にする] チェック ボックスをオンにします。これにより、csdef、importModule 要素、およびその他の csdef/cscfg 設定に入力エンドポイントが追加されます。次の展開エクスペリエンスでは、"memcache_default" という名前の入力エンドポイントを [エンドポイント] タブに手動で追加します。

  3. ここでは、クライアントはこのクラスターを指すように構成する必要があります。サーバー ゲートウェイと共存キャッシュまたはクライアント shim と専用キャッシュを使用している場合は、アプリで "localhost_thisrolename" をポイントするだけで、自動検出は必要ありません。

  1. Memcache クライアントのあるロールで、ロール名を右クリックし、[ライブラリ パッケージ参照の追加] を選択して、NuGet ウィンドウを起動します

  2. [Azure Caching Memcache Shim] を検索します。この NuGet パッケージをインストールします

  3. このパッケージは起動タスクを作成し、memcache_default の内部エンドポイントを追加し、それを 11211 にマップし、適切な dataCacheClients セクションを App.config および web.config に追加します。これは [内部エンドポイント] タブで変更できます。

  4. App.config または Web.config autoDiscovery 要素でロール名を指定します。

  5. ここでクライアントは shim を "ポイント" するように構成する必要があります。memcache クライアント構成を編集し、サーバーを "localhost" に設定します。正しいポート番号を設定する必要もあります。

表示:
© 2014 Microsoft