AWSには「Amazon ElastiCache」というマネージドキャッシュサービスが存在します。
マネージドキャッシュサービスというと、ピンと来ない方も多いかと思われます。
それもそのはずです。サービスの稼働にあたってキャッシュというのは本来無くてもよいものなのです。故にEC2やECSといった目玉サービスに比べると存在感が薄いのです。。
しかしこのキャッシュを上手く利用することで、サービスのコストパフォーマンスを大幅に向上させることができます。
キャッシュはフロントエンド、バックエンド、アプリ、インフラ問わず、どのような職種にも関わる部分ですので、是非この機会にElastiCacheでキャッシュの勉強をしましょう!!
Amazon ElastiCacheについて
キャッシュサーバとは?
キャッシュサーバとは、システムが外部に提供しているデータを複製して、システムの代わりに複製したデータを提供するサーバのことです。
要は顧客情報や購入履歴等のサーバとクライアントで頻繁にやり取りされるようなデータを、やり取りを代わりに肩代わりしてくれるような機能を提供します。
キャッシュ(データ)の種類については、システムやデータ形式、アプリケーションによって、様々なデータをキャッシュとして利用することができます。
キャッシュサーバは、用途に応じてその呼び名を変えます。
(例:httpキャッシュサーバやDNSキャッシュサーバ)
サーバ単位で用意しなくても、機能として利用することもできます。
例えば、Webサービスでは、プロキシサーバーにキャッシュサーバの機能を付けてプロキシサーバーがキャッシュを保持することが可能になります。
このようにキャッシュサーバとは、様々な種類のデータをキャッシュとして保持することができ、元サーバの負担を減らすことが可能になります。
ElastiCacheとは?
ElastiCacheとは、Amazonの提供するフルマネージドのインメモリキャッシングサービスです。
…と言われても意味が分かりませんよね?(笑)
大丈夫です。こんな分かりづらい書き方をされたら分かるものも分かりません。
では、分かりやすく情報を整理していきます。
結論から言うと、ElastiCacheとはAmaozonの提供するキャッシュサービスのことです。
キャッシュサーバとは違い、サービスとしてサーバレスにキャッシング機能を利用することができるのです。
サーバレスなので、サーバの管理が不要となりキャッシング機能の管理だけ行えばいいので非常に使い勝手が良いです。
ElastiCacheには、2種類の超高速エンジンがあります。
- memcached
- Redis
どちらも非常に高速な処理を行うことができます。
ミリ秒単位のデータ応答時間が必要とされる、要求の厳しいアプリケーションにも対応しています。
単純なキャッシングサービスとしても世界中で評価されているサービスなのです。
memcachedとredisの違い
ElastiCacheには2種類の超高速エンジンがあると言いましたが、それぞれの違いについて記載してみます。
memcached
“memory cache daemon” の略で メムキャッシュディー もしくわ メムキャッシュ と読みます。
memcachedとは、マルチスレッドで動作するキャッシュエンジンです。
memcachedでは、分散キャッシュシステムを構築できます。ただ、管理自体はクライアントが行う必要があり、クライアント側で各サーバへの振り分けや読み込みを管理する必要があります。
オンメモリ(プログラムを実行する際に、利用される全てのプログラムコードがメモリ上に書き出され、ハードディスクなどから読み込まないようにされた状態のこと※引用元:ZDNet Japan)上でKVS(キーバリューストア)で動作し、キャッシュをデータ(key)に格納したいデータ(value)を一対一に対応付けて保管します。
機能面ではなく、単一ノードの性能を上げたい場合には、memcachedを利用するのがオススメです。
Redis
”リモートディクショナリサーバー” の略で、レディース と呼びます。
Redisは、シングルスレッドで動作するキャッシュエンジンであり、オンメモリで動作するインメモリデータベースでもあります。
もっと具体的に言うと、NoSQL型でのデータベースのことで、KVS(キーバリューストア)として動作します。
ですので実態としてはデータベースの一種です。
しかしリレーショナルデータベースとして使われることは極めて稀で、一般的には、複製したデータを高速で吐き出すキャッシュサーバとして使用されます。
マスタースレーブ構成を組むことができ、データの複製を行うマスター、複製したデータの吐き出しを行うスレーブと分けて利用することができます。
最近のElastiCacheは、Redisに関するアップデートが多く実施されているので、様々な機能を利用したい場合はRedisがオススメです。
ElastiChacheの構成
ElastiChacheはクラスター構成を組むことができます。
クラスター構成とは一言で言うと、「複数のサーバを一つに集約させて、利用者や他のサーバから、全体で1台のサーバであるかのように見せる構成」のことです。
ElastiChacheの最小構成単位は、ノードと表します。
各ノードが、キャッシュサーバとしての処理を実行します。
そして複数のノードで構成されるグループをシャードと呼びます。
シャード1単位では、読み書きができるプライマリノードと、読み込み専用のセカンダリノード(リードレプリカ)を持ちます。
これらをまとめると、下記の通りとなります。
- クラスター
複数のシャードによって構成されます。 - シャード
複数のノードによって構成されます。
※プライマリノードとセカンダリノード(リードレプリカ)を持つ - ノード
ElastiChacheの最小構成単位のこと。
また、エンジンによって構成できる構成は異なります。
- Redis
- 単一ノード
- クラスターモード無効(単一のシャード)で1つ以上のレプリカノードが存在する
- クラスターモード有効で1つ以上のシャード上それぞれで 1つ以上のレプリカノードが存在する
- memchached
- 単純なクラスターモード
※単純にノードを追加したり減らしたりして負荷を分散する構成しかとれない
- 単純なクラスターモード
ユースケース
ElsaatiChacheの使い道について考えてみましょう。
上記でも説明しましたが、ElastiChacheは非常に高速なデータの複製が可能です。
しかし、例えば障害等でサービスが落ちてしまうと大切なデータを全て失ってしまうことになります。
ですので、前提として、失っても問題のデータを保管するようにしましょう。
となると自然とどういうデータを扱えばいいのか分かるようになってくると思います。
一番分かりやすい例だと、Webセッションが挙げられるでしょう。
Webセッションを保存し、共通のセッション情報を参照できるようにしたり、データを保管しアプリケーションのキャッシュとして利用したりすることもできます。
料金
ElastiChacheは利用するノードの種類によって料金形態が異なります。
- オンデマンドノード
オンデマンドノードとは簡単に言うと、使った分だけ利用料金が請求される料金形態のことです。
料金はノードが起動してから終了するまで 1 時間ごとに課金されます。
例えば東京リージョンでノードタイプ cache.t2.micro を選択した場合、1時間あたりの利用料は0.026USDとなります。 - リザーブドノード
リザーブドノードとは簡単に言うと先払いのことです。
ElastiChacheでは以下の3種類の中から支払い形態を選択することができます。
上手く使えばオンデマンドより安く利用することができますので、ご自身や職場の予算に合わせた適切な支払い形態を選択するのがよいでしょう。- 前払いなしで低額な時間単位の料金を支払う
- 一時的に一部を前払いすることで、時間単位の料金を抑えることができます。
- 全額を前払いすることで、さらに安い時間単位の料金で利用できます。
また、データ転送時やバックアップストレージについての料金形態についても以下にまとめてみます。
- バックアップストレージ
バックアップストレージとは文字通り、キャッシュデータのバックアップストレージのことです。
バックアップストレージはRedisでのみ利用することができます。
料金形態は自動バックアップも手動バックアップもどちらも同じで、1スナップショットのストレージ分は無料ですが、そこからの追加分については毎月 0.085 USD/GB (すべてのリージョンで同じ料金)掛かります。
また、バックアップにおけるデータ転送については料金は掛かりません。 - データ転送時
- 同じリージョンの場合
- 同じAZ内でのEC2インスタンスとElastiChacheとのデータ通信 == 無料
- 異なるAZ間でのEC2インスタンスとElastiChacheとのデータ通信 == 0.01 USD/GB
- 異なるリージョンの場合
Amazon ElastiCache for Redis の Global Datastore でのみ異なるリージョン間でのデータ通信が可能になります。
東京リージョンの場合、データ転送時に0.09USD/ギガバイトの利用料金がかかります。
- 同じリージョンの場合
ハンズオントレーニング
Amazon ElastiChacheには公式から以下のハンズオントレーニングが公開されています。
基本料金無料で、Amazon ElastiChache for Redisを構築して、MySQLで保管しているデータパフォーマンスを上げる一連の流れを実施します。
初めてElastiChacheに触る方にはとてもオススメのハンズオンですので、是非この機会に取り組んで見て下さい。
コメント