経緯
業務で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を削除し忘れて、無料枠を超えると高額になってしまうので、
勉強用に作成する場合は、疎通確認後削除をした方が良いかと思います。