クラウド サービス シリーズ: Windows Azure キャッシュの新機能


このポストは、6 月 25 日に投稿された Cloud Services Series: What's new in Windows Azure Caching  の翻訳です。

Windows Azure キャッシュは、拡張性と信頼性の高い、メモリ内の分散キャッシュ ソリューションであり、Windows Azure のアプリケーションの処理速度を高め、データベースの負荷を軽減します。最初の運用サービスは 2011 年 5 月にリリースされました。現在まで、多くのお客様にご利用いただいており、誠に嬉しいかぎりです。リリース以来、お客様からお寄せいただいた貴重なご意見をもとに検討を重ね、さらに新たなキャッシュ利用パターンをサポートするための取り組みを続けた結果、今回 Windows Azure SDK (2012 年 6 月版) においてプレビュー版を公開する運びとなりました。今回は、プレビュー版の新機能をご紹介したいと思います。ですが、その前に...。

キャッシュの現状について

現在、Windows Azure キャッシュは Windows Azure サービスの一つとして提供されています。このサービスでは、Windows Azure 内においてマルチテナント間で共有されるマシンを使用します (これ以降、Windows Azure 共有キャッシュと呼びます)。それぞれ一定のメモリ容量 (128 MB ~ 4 GB) に基づいた料金が発生し、選択したメモリ容量に応じてトランザクション スループットやネットワーク帯域幅の上限が設定されています。これにより、テナント間での “公平さ” が保たれ、制限を超えた場合にはキャッシュの使用が調整されます。この方法により、多くのアプリケーションでキャッシュをうまく使用できます。しかし中には、必要なリソース量 (メモリ、トランザクション、帯域幅) を前もって正確に見積もることができないアプリケーションもあり、その場合、アプリケーションで事前に割り当てられたマシンに基づく一貫した動作が求められます。キャッシュがパフォーマンスの重要な要素であることを考えれば、こうしたアプリケーションにとって一貫性のあるパフォーマンスを実現することは、きわめて重要と言えます。

課題を解決するために...

最新の Windows Azure SDK には、顧客のクラウド アプリケーションの一部としてホストされる Windows Azure キャッシュのプレビュー版が導入されています。これにより、クォータによる制限はなくなり、顧客がキャッシュに割り当てるリソース量によってのみ制限されることになります。

それだけではありません...

Windows Azure キャッシュは、より高度なパフォーマンス、より一貫性の高いパフォーマンス、そして高可用性を実現しています。Visual Studio と統合された、よりシンプルな開発エクスペリエンスと、Windows Azure ポータルによる管理および監視エクスペリエンスが提供されます。今回リリースされるキャッシュでは、新機能 (リージョンとタグ、通知付きのローカル キャッシュ) も利用できます。さらに、memcached を使用しているアプリケーションでもご利用いただけるように、memcached プロトコルをサポートして移行パスを提供します。これにより、高可用性をはじめとする Windows Azure キャッシュの特有の機能を利用しながら、いつでも好きなときに移行が可能となります。ここからは、さらに詳しく説明していきたいと思います。ご興味がおありの方は、どうぞ引き続きお付き合いください。

新しい展開モデル

前述したように、キャッシュは顧客のアプリケーションの一部となっています。キャッシュ (プレビュー版) は分散型のサーバーおよびクライアント ライブラリで構成され、新しい Windows Azure SDK のプラグインとして出荷されます。キャッシュを使用するアプリケーションを構築すると、キャッシュ ライブラリは他のアプリケーション アイテムとともに cspkg ファイルにパッケージされます。アプリケーションを Windows Azure に展開すると、キャッシュは指定に従い Web ロールまたはワーカー ロールに展開されます。このインスタンスのサイズやキャッシュ用インスタンスの数は選択でき、また、Windows Azure の他のロールと同様に、これらを拡張/縮小することで実行時のキャッシュ容量を管理できます。

展開方法

キャッシュを使用するには、次の 2 種類の展開方法のうち、どちらかを選択します。

  1. Web/ワーカー ロールに配置: 既にいくつかのノードでキャッシュを使用せずにアプリケーションを展開している場合は、キャッシュを追加し、空いているメモリ、CPU、および帯域幅を活用することにより、アプリケーションの処理速度を高めることができます。このときコストは実質的に不要です (実際には費用がかかっているわけですが、無料のキャッシュとみなすことができます)。必要な作業は、Web ロールまたはワーカー ロールでさらにキャッシュのホストを実行するだけです。これで、アプリケーション内の自分のどのロールからもキャッシュを呼び出すことができます。
  2. 独立したノードに一貫性のあるキャッシュを配置: 一貫性が高く予測可能なパフォーマンスが必要となる、より厳しいキャッシュ要件が求められる場合には、キャッシュをホストする専用のロールを設定することをお勧めします。キャパシティ プランニング ガイド (英語) では、キャッシュに対して予想される負荷の種類に応じて、必要なロールのサイズやインスタンスの数を判断する方法についてご紹介しています。

それだけですか?

そんなことはありません。Windows Azure キャッシュは、異なる種類の展開において使用できるキャッシュの優れた柔軟性を実現するだけでなく、さまざまな機能を組み合わせて提供しており、市場の他のキャッシュ ソリューションとは一線を画しています。いくつかのメリットをご紹介します。

  1. コスト効率が高い: キャッシュをホストしているコンピューティング インスタンスに対してのみ料金が発生し、追加料金はありません。Web/ワーカー ロールに配置する方法では、実質的にコストをかけずに、コンピューティング VM 上で空いている CPU、帯域幅、およびメモリ資源を有効活用できます。
  2. 柔軟な拡張性により 100 GB 以上のキャッシュを実現: インスタンスの数を必要に応じて増減できるとともに、設定の変更なしでキャッシュ クライアントが自動的に新しいロールの利用を開始します。また、負荷を分散するために既存のデータが全ノードにわたって再分配されます。10 XL の VM にまでキャッシュを拡張することができ、この場合には 100 GB を超えるキャッシュ データを利用できます。私たちは、さらなる拡張も可能と考えています。より大規模なキャッシュが必要な場合は、ぜひご相談ください。さらに、キャッシュのスループットは、Windows Azure に割り当てられたリソース容量によってのみ制限されます。
  3. スピーディに処理: キャッシュを高速化するために、私たちはいくつかの改善を施しました。その結果、キャッシュを適切に構成した場合に予想される遅延は 1 ミリ秒程度となり、従来の約 5 分の 1 に向上されました。Windows Azure キャッシュでローカル キャッシュ機能を適切に使用すれば、さらなる大幅な短縮が可能です。さらに、ラウンドトリップと遅延を削減するために、一括操作をサポートしています。
  4. 新機能: その他にもさまざまな新機能が使用できます。これらの機能の中には、オンプレミス版のキャッシュ (Microsoft AppFabric 1.1 for Windows Server) で提供されていた機能もあり、Windows Azure でも提供してほしいとの要望が多く寄せられていたものです。
    1. 複数の名前付きキャッシュ: 複数の名前付きキャッシュに、キャッシュを論理的に分割することができます。それぞれの名前付きキャッシュには、利用状況に応じて個別のデータ ポリシーを適用できます。
    2. 高可用性キャッシュ: キャッシュを考慮したアプリケーションのために、キャッシュに高可用性を設定できます。この機能では、キャッシュ内に保存された各データのコピーを追加作成し、別のインスタンスに保存します。これにより、ノード障害時にデータを損失する危険が大幅に低減され、高いキャッシュ ヒット率を維持できます。HA が有効になっていない場合でも、Windows Azure キャッシュは、基盤のキャッシュ コンピューティング インスタンスに影響のある Windows Azure 環境の変更を行う際に、データの削除を防ぎます。
    3. 通知機能付きのローカル キャッシュの利用: メモリ内の分散キャッシュへのアクセスは DB アクセスに比べてはるかに高速ですが、キャッシュにローカルでアクセスすれば、処理速度はさらに増します。そこで、私たちはローカル キャッシュ機能を導入しました。データの読み取り操作が多く、かつ、一貫性への要件がそれほど高くない場合に有効です。キャッシュ クライアント ライブラリがローカル キャッシュをネイティブにサポートし、キャッシュからのデータ取得は通常、きわめて高速に実行されます (ネットワーク ホップもシリアル化/逆シリアル化コストも不要です)。さらに、ローカル キャッシュをキャッシュ クラスターから定期的に更新するために、通知登録が行えます。
    4. リージョンとタグの利用: この機能を使うと、関連するオブジェクトをまとめることができます。たとえば、あるユーザー セッションのオブジェクトすべてを 1 つのリージョンにまとめれば、クエリを同時に実行できます。さらに、リージョン内のオブジェクトにタグ付けすれば、API 呼び出しを使用するだけで、タグによってクエリをフィルタリングすることも可能です。
  5. コード変更せずに memcache アプリケーションを実行可能: お客様の中には、既にキャッシュ ソリューションをお使いの方もいらっしゃると思います。人気の高い memcache をお使いのお客様も多いでしょう。これまでご紹介した各種機能に興味があり、Windows Azure キャッシュへの移行を考えてはいるものの、全面的な変更には不安を感じている方もいらっしゃるかもしれません。そんな方のために、Windows Azure キャッシュが memcache クライアントに対応可能になりました。これにより、memcache クライアントを直接キャッシュ クラスターに関連付けることで使用を開始することができます。多くの場合はこの方法で問題ありませんが、パフォーマンス要件の厳しいお客様は、私たちが提供する memcache クライアント shim をご利用いただくことで、より優れたパフォーマンスが得られます (通常はキャッシュ クラスター内の “ゲートウェイ” を通過しますが、shim を使うことで、これを回避します)。どちらの場合も、クライアント アプリケーションを書き換えることなく、キャッシュの機能を活用できます。

今後数週間にわたって、各トピックをさらに掘り下げていく予定です。監視、デバッグ、修正に関する一般的な課題に対応するために、キャッシュの処理計画を行う方法をブログから発信しようと考えています。取り上げてほしい内容などがありましたら、ぜひコメントをお寄せください。Windows Azure キャッシュ (プレビュー版) をしばらくお試しいただき、その結果についてもお知らせいただければ幸いです。ご要望やご質問がございましたら、このブログにコメントするか、フォーラムにクエリを投稿してください。私たちのチームが定期的に回答を行っています。

キャッシュをぜひ活用してください。

- Prashant Kumar (Windows Azure 担当シニア プログラム マネージャー)

クラウドサービスシリーズ

次の投稿を読む

Comments (0)

Skip to main content