GAEでMemcacheを利用した経験はありますでしょうか?
MemcacheとはGAEで利用可能な分散型のキャッシュシステムのことです。
主な利用目的はデータアクセスの高速化です。例えば、何度も同一クエリを実行する場合、最初の結果をMemcacheに保存し
それ以降はMemcache上のデータを取得することでデータストアへの無駄なアクセスを軽減させることができます。
(Memcache上にデータが存在しない場合は再度データストアでクエリを実行します。)
これまでMemcacheは無料版(共有Memcache)として公開されてきましたが
GAE 1.8.2から有料(プレビュー版)の「専用Memcache」がリリースされました。
この新しいMemcacheでは、最大20GBのキャッシュ容量(0.12ドル/GB/時)が保証され、プレビュー公開終了後には
これまでのMemchache(共有Memcache)にはなかったSLAも提供されると言われています。
ただ、この専用Memcacheは課金をしてまで必要となる割に合うサービスなのでしょうか?
今回は、この専用Memcacheが共有Memcacheよりも本当に優れているのかを検証してみました。
1. キャッシュ容量の比較
そもそもこれまで利用されてきた共有Memcacheは最大どの程度のキャッシュ容量があるのでしょうか?
また、専用Memcacheは本当に20GBも保存できるのでしょうか?
まずは共有Memchacheの容量を検証してみることにします。
1.1. 共有Memchacheの容量検証
1キーに対して約1.2KBの画像データをMemcacheに保存するプログラムをタスクキューで並列実行し、保存データ数と最大保存容量を計測してみました。GAE管理コンソールのMemcache Viewerで確認した結果は以下(画像1参照)の通りです。
画像1. 共有Memcacheの検証結果
検証の結果、データ総数は3,966,298で、保存容量はおよそ4.9GBとなりました。
想定以上のデータを保存することができましたが、共有Memcacheはデータ容量がSLAで保証されているわけではないため
データの消失は自己責任となります。そのため、共有Memcacheを利用する場合はデータが消えることが前提となるプログラムを実装する
必要があります。(GAE経験者としては常識的な話だとは思いますが…)
1.2. 専用Memchacheの容量検証
検証をおこなう前に、まずはMemcacheの利用クラスを専用Memcache用のクラスに切り替える必要があります。GAE管理コンソールの左メニューから「Application Settings」を選択し、Memcache Serviceのクラスを「Shared」から「Dedicated(10k ops/s/GB)」に変更します(画像2参照)。
クラスの変更が保存されると、専用Memcacheが有効となります。
※ クラス、または容量の数値を変更した場合、既に保存されているキャッシュデータは削除されますので注意してください。
画像2. 専用Memcacheへの切り替え
専用Memcacheへの切り替え完了後、1.1と同様のプログラムを実行し、保存データ数と総容量を計測してみました。
Memcache Viewerで確認した結果は以下の通りです。
画像3. 専用Memcacheの検証結果
検証の結果、データ総数は17,042,892で、総保存容量は約21.1GBとなりました。
最大20GBということでしたが、計測上は20GB以上の数値となりました。
これらの結果から、キャッシュ容量については、専用Memcacheの方が優れていることは確かなようです。
2. Memcacheへの書き込み・読み込み速度の計測
次に共有・専用Memcacheそれぞれの書き込み・読み込み速度の計測をおこないました。
保存データには1の検証で利用した1.2KBの画像データを利用しました。
2.1. MemcacheへのR・W速度の比較
検証として、共有・専用それぞれのMemcacheに対して、1,000件のデータの書き込み・読み込みをおこないました。
計測結果は以下(図1参照)の通りです。
※ 検証結果の数値は1000件のデータに対して1処理当たりの平均処理時間(ミリ秒)を表しています。
共有Memcache | 専用Memcache | |
---|---|---|
キャッシュへの書き込み | 85.946ms | 69.9ms |
キャッシュからの読み出し | 7.497ms | 5.017ms |
表1. 共有・専用MemcacheのR・W速度検証結果
専用Memcacheの方がR・Wのいずれの値でも共有Memcacheを上回っていることがわかります。
3.まとめ
以上の検証の結果から、専用Memcacheはこれまで利用されていた共有Memcacheよりも性能がスケールアップしていることがわかりました。
ただし、専用Memcacheを利用する場合1GB毎に毎月$86.4の課金が発生することになります。制限があったとはいえ、これまで無料で利用していたAPIにそれだけの金額を払うのは割高に感じるかもしれません。とは言っても非常に強力なAPIであることには代わりはないので、もし要件として必要になった場合は見積りを立てて利用してみては如何でしょうか。
4. 次回の検証について
次回は、Memcacheの残存期間についての検証をおこなう予定です。1度保存されたデータが一体いつまで残存することができるのかを検証します。また、本サイトではMemcache以外の検証も随時おこなっていますので定期的にチェックしてみてください。