Amazon ElastiCacheは、フルマネージドのインメモリ型キャッシングサービスです。アプリケーションのパフォーマンスを向上させ、レイテンシーをマイクロ秒のレベルに短くできます。フルマネージドですので、必要なときクリックするだけで容易にスケーリングできます。ゲーミングリーダーボード、ストリーミング、分析といった耐久性を必要としないデータにも有効活用できます。
Amazon ElastiCacheの特徴やメリット、利用シーン
Amazon ElastiCacheの特徴ある技術、価格、ユースケースなどを紹介します。
簡単に運用できる高速インメモリキャッシュ
Amazon ElastiCacheは、キャッシュ機能を提供するサービスです。よく利用するデータをキャッシュと呼ばれるデータのI/Oに近い場所に置くことで、データのやり取りを高速に行うことができます。加えてAmazon ElastiCacheは、ハードディスクよりもI/Oが高速なメモリにデータを配置しますので、さらに高速にデータをやり取りできます。ミリ秒単位のデータ応答時間が必要とされる、要求の厳しいアプリケーションを利用するときに最適なサービスです。
フルマネージドサービスなので、ハードウェアやソフトウェアを用意するといった運用のための時間は不要です。利用したいと思ったら、数クリックでサービスを使い始められます。スケールイン、スケールアウト、スケールアップが自由にできるスケーラブルな点も特徴です。
超高速な2つのエンジン「memcached」と「Redis」の違い
Amazon ElastiCacheのキャッシュシステムには「memcached(memory cache daemon の略、メムキャッシュディーと呼ぶ)」「Redis(REmote DIctionary Server の略、レディスと呼ぶ)」という2種類があり、それぞれの仕組みごとに、Amazon ElastiCache for memcached 、Amazon ElastiCache for Redisと呼ばれています。どちらも優れたキャッシュシステムですが、いくつか機能的に異なる部分があります。
・Amazon ElastiCache for memcached
Amazon ElastiCacheは最小の構成単位をノード(EC2のインスタンスに相当)と呼び、このノードの組み合わせ集合体をクラスターと呼びます。Memcachedにおけるクラスターは、ノードを増減することで負荷を分散できます。ノードの増減は、アプリケーション側から指示して行います。
ノードそのものの性能は、Memcachedはマルチスレッドで動作できるので、CPUのコア数を上げれば性能を上げることができます。格納できるデータ型はStringのみですので、その他のデータ形式の場合はアプリケーション側で型を変える必要があります。AWSによるバックアップのサポートはありません。
・Amazon ElastiCache for Redis
Redisのクラスターはノードのエンドポイントを自ら把握できるので、memcachedのようにアプリケーションがノードの管理をする必要はありません。あるノードに問題が発生したら、自動的に異なるノードに切り替えデータを複製できます。この機能はシャーディングと呼ばれます。このシャーディングによって、ユーザーはノード管理の手間を削減することができます。
ノードの性能は、Redisの動作がシングルスレッドなため、CPUのコア数を上げてもMemcachedほどパフォーマンスは上がりません。ただ、Redisはアクセスが高速なキーバリューモデルのNoSQLですから、基本的に高速にデータをやりとりできる仕組みになっています。またNoSQLなので、Stringに加え、List、Set、Sorted Set、Hash、Bit Array、HyperLogLogなどのデータ型も扱えます。バックアップは、AWSのサービスとして対応していて、クラスターごとスナップショットを取れ、S3に保存できます。このスナップショットを使って復元も行えます。
それぞれ特徴はありますが、単一ノードの性能を上げたいならMemcachedを、いろいろな機能を利用したいならRedisを選ぶほうがおすすめです。
![AWSを活用した障害への対処法](https://cloudnavi.nhn-techorus.com/wp-content/uploads/2022/08/awsoperationautomation.png)
“AWSを活用した障害への対処法”
Webサーバーへのアクセス集中に効果的に対応するにはどのサービスを利用するのがよいのでしょうか?
AWSサービスを例にご紹介します。
Amazon ElastiCacheのユースケース「The Pokémon Company が AWS 専用データベースに移行」
Amazon ElastiCacheのユースケースとしては、億単位のユーザーが参加している著名ゲーム会社「The Pokémon Company」におけるAmazon ElastiCacheの活用とデータベース刷新の例が、AWSの公式サイトで紹介されています。
The Pokémon Company が AWS 専用データベースに移行
https://aws.amazon.com/jp/solutions/case-studies/the-pokemon-company-case-study/
ポケモントレーナークラブは、3 億人を超えるポケモン GO ユーザーのすべてのユーザープロファイルデータと変更ログを、サードパーティの NoSQL ドキュメントデータベースでサポートしていました。ここでもMemcachedの仕組みを利用し、ユーザーセッションのデータへの高速アクセスを提供していました。
しかし、ゲーム参加者がどんどん増えて、管理すべきノードは300を超え、このままではダメだと言う声が出てきました。そこで、データベースをAmazon Auroraに変更し、Amazon ElastiCacheの活用を決定しました。これによってノード数を300から30に下げることが可能になり、毎月のデータベースコストが数万ドルも削減できました。さらに重要なのは、移行前にあった168 時間のダウンタイムもしくはパフォーマンスの低下が移行後はゼロになったことです。
キャッシュシステムはRedisとMemcached の両方を利用していて、Redisでは新しいユーザーのタスク処理を行い、Memcachedは新しいユーザーが参加したときに既存のユーザーのセッションが中断されないように、チケットをライブに保つのに役立っています。
当社NHNテコラスでは、AWSの活用を支援する AWS総合支援サービス C-Chorus から、システムの構築、最適化のご提案や技術支援を行っています。お気軽にご相談ください。
Amazon ElastiCacheの料金
Amazon ElastiCacheは、最低料金がなく顧客が利用した分に対して料金が発生します。選択したノード数、ノードタイプ、料金モデルごとに1 時間単位で課金されます。1年もしくは3年契約を結ぶことで割引できるノードもサポートしています。
Amazon ElastiCacheはAWS無料利用枠に含まれており、無料で開始することもできます。新規にAWSを利用する場合は、ElastiCache cache.t2.micro/cache.t3.microノードの750時間分の使用が最大12 ケ月間無料になります。なおcache.t2.microとcache.t3.microは0.026USD(時間あたり)です。
Amazon ElastiCacheの使い方を学ぶ
Amazon ElastiCacheの使い方を学べるチュートリアルなどがAWSの公式サイトには用意されています。以下に3つ紹介します。
どれも実際にコンソールを利用して試してみることができます。最初のチュートリアルは書かれている通り10~20分で終わりますが、他の2つは2時間程度の時間が必要です。どれも無料枠内で行えます。
ElastiCache for Redis を使用して 無料で初めてのRedis Clusterを設定
AWSチュートリアル1:
「10分間のチュートリアル」無料で初めてのRedis Clusterを設定
ElastiCache for Redisを使ってRedis クラスターを作成、設定します。Redisは、クラスターモードを有効にするとスケーラビリティと可用性を向上できるので、小さなデータから始めても、アプリケーションの拡大に合わせて簡単にスケーリングできます。さまざまなAZにレプリカを配置すれば、読み込みのキャパシティーを増やすこともできます。
チュートリアルは、Cコンパイラが無い場合は、ターミナルから「$ sudo yum install gcc」と打ち込んで、Cコンパイラをインストールするところから始まります。次にRedisクライアントをダウンロードしてコンパイルします。その後は、ElastiCache ダッシュボードでの操作が中心になります。クラスター作成のために「ダッシュボードを開く」というステップから開始し、クラスターを「削除する」まで12のステップが操作画面とともに用意されています。初めてでも戸惑いは少ないでしょう。
途中の「ステップ 11: フェイルオーバーをトリガーする」では、ノードが停止した時にクラスターが自己修復するという動作の確認も行います。本チュートリアルの対象は「開発者」で、レベルは「初心者」です。
MySQL データベースのパフォーマンスを向上
AWSチュートリアル2:
「プロジェクト」Amazon ElastiCache for Redis with Cachingを使い、MySQLデータベースのパフォーマンスを向上させる
MySQL データベースに、Amazon ElastiCache for Redisを使ってインメモリ型キャッシュのレイヤーを追加して、アプリケーションのパフォーマンスを向上させる方法を学びます。
通常、アプリケーションはデータベースにデータを要求するときは、最初にキャッシュをクエリします。そこでデータが見つからない場合は、データベースをクエリして結果をキャッシュに入力します。この方法はキャッシュアサイド戦略と呼ばれ、データベースのパフォーマンス向上に役立つ最も一般的な手法です。また関連するレコードが変更された場合は、キャッシュを無効にする必要がありますが、ここでは、Redisの有効期限 (TTL) 機能を使用します。
実際の作業は、EC2インスタンスにアクセスする必要があるので、事前にEC2をプロビジョニングしておきます。そしてPythonで必要なmysqlなどソフトウェアをインストールしておきます。そこからはElastiCacheダッシュボードを中心に作業を行います。
作業の手順は、5つのステップに別れていて「ステップ 1: Redis クラスターを作成する」でクラスターを作成しますが、これは10分ほどで終わります。次に「MySQL データベースを作成する」「入力する」などデータベースの操作を行い、「ステップ 4: キャッシュとベストプラクティス」でデータを格納および取得するための2つのテクニックを学びます。
オンラインアプリケーション用の高速セッションストアを構築
AWSチュートリアル3:
「プロジェクト」Amazon ElastiCache for Redisを使い、オンラインアプリケーション用の高速セッションストアを構築する
Amazon ElastiCache for Redisを使って、セッション管理用の分散キャッシュを利用する方法を学びます。加えて、ElastiCacheノード構成のベストプラクティスと、アプリケーションからのセッションを処理する方法も学びます。
ここではPythonのウェブ開発用マイクロフレームワーク「Flask」を使ったコンパクトなアプリケーションを実装して利用します。また途中、EC2インスタンスにアクセスする必要があるので事前にプロビジョニングしておきましょう。加えてインスタンスのセキュリティグループがポート 5000 での着信 TCP 接続を許可していることを確認しておきます。
実際のチュートリアルは「ステップ 1: Redis クラスターを作成する(10分)」「ステップ 2: Redis によるセッションのキャッシュ(60-90分)」まででResisクラスターを作成、実践し、「ステップ 3: クリーンアップ(10分)」で削除します。時間を見てもわかるように、クラスター作成は指示通りに操作すれば容易に行えます。時間がかかるステップ2では、サーバー側セッションの基本を学び、サーバー側セッションに有効期限 (TTL) を設定するといった工程も学びます。本チュートリアルの対象は「開発者」で、レベルは「初級から中級」です。
Amazon ElastiCacheの活用はNHNテコラスにお任せください
Amazon ElastiCacheを活用すると、アプリケーションのパフォーマンスを高速化できます。現状のシステムのパフォーマンスに満足できないなら、ぜひ活用を検討してください。
ただ効率的な活用には、過去の実績やノウハウが大切です。AWS プレミアティア サービスパートナーであるNHNテコラスは、 マネージドサービス よりAmazon ElastiCacheを活用したシステムの最適化をご提案します。お気軽にご相談ください。
![インフラ担当者の業務負担軽減のためにAWSで活用すべき運用自動化機能](https://cloudnavi.nhn-techorus.com/wp-content/uploads/2022/05/awsoperationautomation1.png)
AWS運用の自動化機能とは?
AWSにはシステム運用を自動化できるサービスが多数取り揃えられており、本資料では、これら機能の概要をわかりやすく解説します。