AWS_ElastiCacheとは #379
ElastiCacheはインメモリキャッシュ型のデータベースと呼ばれるものです。NoSQLデータベースの1種であるキーバリューストアの、RedisまたはMemcachedをAWS上で扱うことができます。
メモリとキャッシュについて
まずはそもそもメモリとキャッシュがどういうものなのかについて整理します。
メモリ
通常、メモリとはCPUが直接アクセスして演算を実行する「主記憶装置」を指します。高速な処理を実現させるため、電気伝導性が高い半導体集積回路(IC)を使用しており「半導体メモリ」とも呼ばれます。
よく耳にする「SSD」とはこの半導体メモリの一種で、電源なしでデータを保持できる不揮発性のフラッシュメモリを使用した記憶装置です。メモリを使って構築されたデータ保存の仕組み、と言えます。
外部記憶装置(ストレージ)として使われるHDDと比べて、メモリは高速にアクセスできます。そのためメモリを使った方が性能は高くなりますが、保存容量はHDDの方が大きいです。
このメモリを活用したデータベースがインメモリデータベースです。その名の通りコンピューターのメモリ上でデータを管理するDBで、従来のDBより高速にデータの読み書きが可能です。
キャッシュ
キャッシュは一度アクセスしたデータを保存して、次回アクセス時に高速にアクセスできるようにする仕組みです。常にオリジンからデータを取得するとアクセス処理による負荷もかかり、レイテンシーが高まります。
身近な例としてはブラウザの機能で、キャッシュが保存されると一度見たWebページの表示速度が上がります。
インメモリキャッシュについて
ではRedisに代表されるインメモリキャッシュとは何なのでしょうか?
一言で言うと、メモリを活用して高速にキャッシュへのアクセスを可能にしたデータベースに仕組みです。キャッシュ自体をメモリに保存してやり取りしようというもので、DBをメモリで処理することで高速化します。
例えば繰り返し使われるクエリの結果をインメモリキャッシュに溜め込むことで、毎回データベースにアクセスする必要がなくなりますし、メモリはディスクよりも高速なので、アプリケーションの高速化が実現されます。
ElastiCacheとは
分散インメモリキャッシュサービスの構築・管理・スケーリングが簡単に実施できるサービスです。広く利用されているエンジンであるRedisとMemcachedの2種類から選択できます。
ElastiCacheでは「キャッシュクラスター」が基本的な構成単位です。
キャッシュクラスターとはキャッシュが収められているノードの集まりのことで、1つ以上の同サイズ・同タイプのノード(インスタンス)で構成されます。
各ノードには専用のDNS名とエンドポイントがあり、かつ各ノードが独自のメモリとCPUリソースを持っています。つまり、各ノードがユーザーからのリクエストをそれぞれ独立して処理し、その結果を自身のメモリに格納します。
クラスター構成になっていることで、必要なキャッシュ容量やパフォーマンスに応じて簡単にスケールアップやダウンが可能です。
RedisとMemcachedの違い
これはMemcachedの特性を知れば理解しやすいです。
Memcached
Memcachedは軽量かつシンプルなため、高速性と水平スケーラビリティに強みを持ち、大量のリクエストを短時間で処理できます。
つまりページキャッシュなどの単純なキャッシュや、速度が求められるセッションストアが必要な場合に有利です。
Redis
一方でRedisは複雑なデータ構造(文字列・ハッシュ・リスト・セット・ソート済みセット等)をサポートしており、トランザクション、Pub/Sub機能、データの永続性(ディスクへの書き込み)、レプリケーションなどの追加機能も提供しています。
つまりデータの一貫性や耐久性が求められる場合はRedisが有利です。
蛇足ですが、データの一貫性が担保されない場合に起きうることは以下です。
・読み取りの不一致: 更新された値を見る人と古い値を見る人が混在する
・ロストアップデート: 2つのトランザクションが同時に同じデータを更新しようとすると片方が失われる可能性
・データの重複: 同じデータが複数回書き込まれる可能性
これらを防ぎたい場合はRedisを選択した方が良いですね。
ここまでお読みいただきありがとうございました!
参考
この記事が気に入ったらサポートをしてみませんか?