ElastiCache for Redisをイチから構築


経緯

業務でAWSを触る機会が増えてきたので、インプットの備忘録として、
概要と簡単な設計での構築手順を記載します!

ElastiCacheとは

分散インメモリキャッシュサービスの構築管理及び、
スケーリングを容易に実施することができるサービスです。
AWSが提唱している11のベストプラックティス一つのキャッシュの活用と最適なデータベースの選択に影響します。

1.インメモリとは
データをメモリ上で動作させる仕組みで、ディスク上で動作させる場合と比較して、
高速に処理をすることが可能

2.キャッシュとは
一度アクセスしたデータを保持することで、次回アクセス時に高速にアクセス
できる様にする仕組み

インメモリキャッシュとは
1 + 2 より、メモリを活用して高速にキャシュへのアクセスを可能にした、
データベースの仕組みになります。

下記の様に2回目以降のアクセスをキャッシュからデータを取得することにより
高速にアクセスが可能になる。
またDBのアクセス負荷を軽減することで、可用性を高めることができる。

ElastiCacheの特徴

  • キャッシュクラスタを数クリックで起動すること
  • フルマネージド型でモニタリング、自動障害検出、復旧、拡張 バックアップに対応して、高可用性を実現している。
  • スケーラブルで変化するアプリケーションニーズに応じて、スケールイン、スケールアウト、スケールアップできる。
  • 高スループットかつ低レイテンシーなインメモリデータストアからデータを取得して、大量のデータを扱うアプリケーションを構築したり、既存のアプリケーションのパフォーマンスを改善したりすることが可能
  • 2種類のオープンソースのmemcahed,redisから選択することができる。

RedisとMemocahedの違い

ざっくり理解するなら、シンプルでスケーラブルなキャッシュレイヤーを構築する場合は、
Memocached を利用する。それ以外はRedisのを利用する。

共通点
・ 高速に値をRead/Writeできるインメモリキャッシュ型のDB

相違点
redis
・ シングルスレッドで動作
・ スナップショット機能がある
・ データを永続化できる。
・ インメモリデータセットのソート、ランク付けが必要
・ pub/sub機能を利用することができる。
・ 位置情報クエリを利用することができる

Memoched
・ マルチスレッドで動作
・ スナップショット機能がない
・ データを永続化できない
・ フェイルオーバーや復元ができない
・ 需要の増減に応じて、スケールアウト、スケールインが可能

利用事例

アプリケーションでデータの即時反映が必要なケースなどに活用していく。
具体的な基本的な利用パターンが下記のようになります。

・ よくある利用事例
クライアントからのアクセスに対して、RDSとElasticCacheにアクセスをわけ、DBの負荷軽減と高速アクセスを行う。
また、S3からデータをElasticCacheに取り込むことで、高速な表示を実現することができる。

・ pub/subを利用したイベント処理の利用事例(イベントの処理用として)
RedisのPublish(パブリッシュ)とSubcribe(サブスクライブ)のを利用して、イベント処理を行う。
上記の機能を利用し「イベントを起こす側」と「イベント処理を行う側」を分離することができる。
具体的な利用例としては、JSのイベント処理で、onclickではなく、addEventListenerして複数イベントをセットすることなどが挙げられる。

構築手順(ElasticCach for Redis)

ElasticCach簡易的に構築していく。EC2とRDSの説明については割愛

1.ElasticCachのRedisクラスターを作成する
2.EC2インスタンスからRedisに接続してデータ登録

1.今すぐ始めるをクリック

2.Redisの設定手順

※利用したことがなければ、無料枠を使用できるので、料金はかからない。
2-1 今回はRedisを選択し、クラスターモード(並列処理を行い高性能にする)を選択する
2-2 エンジンバージョンから、ポート、パラメーターグループはデフォルトを選択
2-3 t2microの最小サイズを選択、アルファベットは世代、数字がメモリサイズを表してる
2-4 シャードの数、シャードないのレプリカ数を決めて、性能を調整する。今回はデフォルト
2-5 複数のAZ(アベイラビリティーゾーン)を設定し、冗長性の確保できる。
今回はサブネットグループを新規作成して、publicの1aと1cに配置する。
2-6 詳細の設定でより詳細にredisの設定をすることができる。
今回は設定を変更せず、デフォルトで作成する
  ・ スロット及びキースペース 処理の分散方法を指定。均等分散が通常
  ・ アベイラビリティーゾーンの配置 AZごとにシャードを分散配置できる
  ・ セキュリティ SG、暗号化の設定
  ・ クラスターへのデータのインポート S3からのデータインポート  
2-7 起動をクリックし、redisの構築完了

・クラスタとは
シャードをまとめる論理グループ。クラスターモードを有効にするとクラスタ1つに対し、複数のシャードを持つことができる。
無効の場合はクラスタ1つに対し、シャードが1つ

・シャードとは
ノードをまとめるグループ。2つのノードを使用することで、レプリケーションを作成できる。
シャードはプライマリーノード(read/write)を1つ、セカンダリーノード(read)を5つ持つことができる。

・ノードとは
ElasticCachの最小単位

クラスタが最大単位でその中にシャード、シャードの中にノードがあるイメージ
クラスタ > シャード > ノード

(参考)Memcachedの方が選択項目が少なく、単純なキャッシングなどシンプルなケーズで利用される。

EC2作成

同じサブネットグループ内に作成する。
今回、EC2の作成は省略します。

SG(セキュリティグループ)の設定

EC2からredisへエンドポイントを使用してアクセスするため、EC2に割当てられている
セキュリティグループのインバウンドルールにredisのポート番号を追加する。

EC2にログインして、疎通確認

ec2にログインし、redisクライアントをインストール。
エンドポイントからredisにアクセスし、テストデータの登録を行い確認する。

#ec2にssh接続
ssh -i [pemキー] ec2-user@[publicIP]

#yumのアップデート
yum update

#管理者権限にログイン
sudo su

#Redisクライアントのインストール
amazon-linux-extras install redis5.0

#Redisへの接続
redis-cli -c -h [エンドポイント名をコピー] -p 6379

#データを登録する
set test hogehoge

#データを取得する
get test

最後に

ElastiCacheを削除し忘れて、無料枠を超えると高額になってしまうので、
勉強用に作成する場合は、疎通確認後削除をした方が良いかと思います。