みなさん。こんにちは。サニービュー事業部の小寺です。

今日は、Amazon ElastiCacheサービスについて、お伝えします。
どんなときに活用できるサービスなのか?RedisとMemcachedの違いについて、概要を理解いただくことがゴールです。

■キャッシュとは

Amazon ElastiCacheサービスは、「キャッシュ」とサービス名がついている通り、キャッシュサービスの一つです。

キャッシュサービスと聞いて、ピンと来ない方もいますでしょうか。キャッシュとは、とても大雑把な言い方をすると、一度利用したデータなどを、その後また使う場合に高速にアクセスできるような形で保存することです。
キャッシュの目的は、データを保管しているストレージにアクセスする回数を減らすことによって、データ取得のパフォーマンスをアップさせることです。

ブラウザを例とすると、Webブラウザが過去に取得したデータがデバイスに保存されます。その後、ブラウザに保存されているデータと同じものが必要になった場合、サーバーにリクエストを送らずに、キャッシュデータを参照します。

ブラウザ以外でもキャッシュの仕組みを利用しているケースはたくさんあります。
Webサイトに関する部分だけでも、サーバーのOSがもつファイルキャッシュ、データベースサーバーのインデックスキャッシュ/テーブルキャッシュ/クエリキャッシュ、サーバーサイドスクリプト言語の中間コードキャッシュ、コンテンツ管理システムのデータキャッシュ/ページキャッシュ、クライアントOSのDNSキャッシュなど、さまざまなレイヤーでキャッシュが使われています。

■Amazon ElastiCacheとは

Amazon ElastiCacheは、セットアップ、運用や拡張が簡単にできるマネージド型インメモリキャッシュサービスです。超高速な2つのエンジン(memcachedとRedis)を提供しています。
どの位高速なのかというと、公式サイトには「ミリ秒未満の応答時間が必要な最も要求の厳しいアプリケーション向け」との記載があり、なんと Stack Overflow 2020 Developer Survey でデベロッパーで最も投票数の多かったサービスです。

特徴は3つあります。
・完全なフルマネージドサービス
フルマネージドサービスなので、ハードウェア、ソフトウェアに関する運用の
時間を取られることがありません。
数クリックでサービスを始めることができます。

・優れたパフォーマンス
はインメモリデータストアやインメモリキャッシュとして機能し、ミリ秒単位の応答時間が必要とされるような、要求の厳しいアプリケーションに対応しています。

・スケーラブル
スケールイン、スケールアウト、スケールアップをすることができます。
書き込みおよびメモリのスケーリングは、シャーディング(※)でサポートされています。

※シャーディング:データベースにおける負荷分散の手法の一つです。
データを複数のノードのディスクに分割配置することで、データベースへのリクエストを分散し全体のスループットを上げる目的で利用されます。

■memcachedとredisの違いについて

2つの違いについて、簡単にまとめてみました。

・memcached
memory cache daemon の略でメムキャッシュディーと読みます。
マルチスレッドで動作します。
CPUのコア数を上げると、パフォーマンスも上がります。
キーとバリューをシンプルな1対1で組み合わせて保存します。

・redisとは
シングルスレッドで動作します。
snapshotベースでのバックアップ・リストアに対応しています。
マスターと複数のスレーブのクラスター構成により、負荷分散ができます。
クラスターモードについては、有効・無効を選ぶことができます。
また、メモリ上のデータをディスクに保存する事で、停電等の電源消失時にデータを失わずにすみます。

memcachedとredisの比較表です。

Memcached Redis (クラスターモード無効) Redis (クラスターモード有効)
データ型 シンプル複雑複雑
データのパーティション化 はいいいえはい
クラスターが変更可能 はい はい 3.2.10 以降
オンラインリシャーディング いいえ いいえ 3.2.10 以降
Encryption いいえ3.2.6、4.0.10 以降 3.2.6、4.0.10 以降
コンプライアンス認定 いいえ 3.2.6、4.0.10 以降 3.2.6、4.0.10 以降
マルチスレッド はい いいえ いいえ
ノードタイプのアップグレード いいえ はい はい
エンジンのアップグレード はい はい はい
高可用性 (レプリケーション) いいえ はい はい
自動フェイルオーバー いいえオプション必須
パブリック/サブ機能 いいえはいはい
ソートされたセット いいえはいはい
バックアップと復元 いいえ はいはい
地理空間インデックス作成 いいえ 3.2.x 以降 – あり はい

ここからは、個人的な所感です。
memcachedはシンプルで、メモリの使用効率というパフォーマンスの観点からすると、優れているといえます。
ただ、レプリケーションや自動フェールオーバーなど、redisの方が機能的には充実していて、永続性という観点も踏まえると、redisを選ぶケースがやはり多くなるのかな、と改めて思いました。

■まとめ

いかがでしたでしょうか。
Amazon ElastiCacheサービスについて、少しは参考になると幸いです。

参考サイト:https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/mem-ug/SelectEngine.html

AWSをご利用いただくには、直接契約するより断然お得。
AWS利用料が5%割引、さらに日本円の請求書による支払いが可能です!