1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[AWS]キャッシュサーバーの作成

Posted at

キャッシュの仕組み

アプリのクライアントとサーバー間の通信の高速化を実現するための手法として、「キャッシュ」が存在します。キャッシュは時間のかかる処理を、キャッシュサーバーにデータを保存することで、2回目以降の通信は保存済みのデータから処理の結果を返すことによって、通信の高速化を実現化しています。

オリジンサーバーは、配信するデータの元となるオリジナルのコンテンツ(動画・画像・文字データなど)を格納しているサーバーです。キャッシュサーバーは、このオリジンサーバーから配信されるデータを複製して格納したサーバーのことで、複数のキャッシュサーバーは物理的に離れたところに配置されており、2回目のサーバーへの接続はユーザーから一番近いキャッシュサーバーから配信されます。

名称未設定ファイル-ページ4.drawio.png

キャッシュサーバーがあることで、オリジンサーバーへのアクセスが集中することを防ぐことができ、ユーザーはWebコンテンツなどのレスポンスが向上するなど、メリットがあります。しかし、デメリットも存在しています。具体的には、サーバー内に残っているキャッシュが古い場合は、最新の情報が配信されない、キャッシュに個人情報が残っていると、個人情報の漏洩のリスクなどが挙げられます。これらを解決するためにも、キャッシュを最新なものにする、そしてキャッシュの保持する期間を短くするなど、さまざまな対応が求められます。

キャッシュサービスの種類

オープンソースで提供されているキャッシュで、よく利用されているものにRedis、Memcachedと呼ばれるものがあります。これらはより効率的、高速、信頼性を実現するのに適しています。

AWSには、ElastiCacheと呼ばれるRedis、Memcachedと互換性のあるマネージドサービスが用意されています。利用者は単に、利用するキャッシュを選択するだけで簡単にキャッシュサーバーを構築できます。また、キーバリュー方式型の仕組みを採用しており、データ種類や量に応じて効率的に管理をすることができます。

ElasiCacheの特徴

ElastiCacheには、ノードと呼ばれるキャッシュを保存する場所が存在します。また、ノードが1~6個集まるとシャードと呼ばれます。ノードには2種類存在し、更新と照会を行うプライマリーノードと、プライマリーノードが行った更新をコピーしたレプリカノードがあり、シャード1単位をこれら2つを含めたものになります。データの照会はプライマリーノードが行い、レプリカノードはプライマリーノードが更新されると、複数のレプリカノードにコピーを行います。これによって、例えプライマリーノードに障害が発生しても、照会はレプリカノードでもできるといった耐障害性を持っています。

そして、複数のシャードで構成されているものをクラスターと呼び、ElastiCacheではクラスター構成を取ることができます。クラスター構成によって、複数のサーバを一つに集約させて、利用者や他のサーバから、全体で1台のサーバであるかのように見せることができます。

ElastiCacheの作成

今回は、キャッシュエンジンにRedisを使って、シャード内にノードを3つ(プライマリー1+レプリカ2)の構成で作成していきます。

ElastiCacheダッシュボード=>Redisクラスターを作成 をクリックします。

ELCache 作成①.png

名前 説明 ロケーション マルチAZ
sample-elasticache Sample Elasticache AWSクラウド 有効化

マルチAZ構成を有効化することで、片方のAZに障害が発生してもキャッシュサーバーが機能するようにします。

クラスター情報.png

クラスター設定.png

ネットワークタイプ 名前 説明 VPC
IPv4 sample-elasticache-sg 任意の説明 作成したVPC

接続性.png

ELCache AZ.png

動作確認

$ ssh web01

Amazon linnux2にはredis-cliコマンドがインストールされていないため、まずはインストールします。

$ amazon-linux-extras list (redis6ライブラリーがあるかの確認)

$ sudo amazon-linux-extras install redis6

次に、クラスターに接続テストを行っていきます。まずは、キャッシュサーバーに接続して、キーのオブジェクトを取得した際に、バリューが返ってくるかを確認していきます。

$ redis-cli -c -h <Redisクラスターの設定からエンドポイントを指定(末尾のポート番号は消去)>
$ set key1 "hello wrold"
$ expire key1 10
$ get key1

setで"key1"に"hello world"を設定し、expireで"key1"の有効期限を10秒間とします。getで"key1"の中身が帰ってきますが、10秒たった後にgetコマンドを入力すると、nillが返ってきます。

参考

AWSではじめるインフラ構築入門 翔泳社出版

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?