キャッシュ機能でアプリの高速化を実現! Amazon ElastiCache をグラレコで解説
Author : 米倉 裕基 (監修 : 堤 勇人)
※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。
builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。
本記事では、クラウド上で高速なデータキャッシュを実現するインメモリキャッシュサービス「Amazon ElastiCache (以下 ElastiCache)」を紹介します。
ElastiCache は、高速なデータアクセスを実現し、アプリケーションのパフォーマンス向上に貢献するサービスです。頻繁にアクセスされるデータをキャッシュに保存することで、データベースやバックエンドシステムへの負荷を軽減し、データアクセスへの迅速なレスポンスが可能です。ElastiCache では、シンプルかつ高速な Memcached と、柔軟なデータ構造や豊富な機能を持つ Redis という 2 つの主要なオープンソースのキャッシュエンジンをサポートし、要件に応じて自由に選ぶことができます。
本記事では、ElastiCache の主な機能や特徴を以下の項目に分けてご説明します。
- インメモリキャッシュサービス
- Memcached と Redis
- 主なユースケース
- 分散キャッシュシステム
- オンラインクラスターのサイズ変更
- クラスターモード
- セキュリティ
- ElastiCache の料金体系
それでは、項目ごとに詳しく見ていきましょう。
インメモリキャッシュサービス
ElastiCache は、高いパフォーマンスとスケーラビリティが求められるモダンなアプリケーションの構築において重要な役割を果たします。
ElastiCache を活用することで、ハイパフォーマンスなデータアクセスやデータベースへの負荷軽減を実現できます。具体的には、ユーザーのログイン状態やセッション情報、頻繁にアクセスされるオブジェクトやページ、データベースへのクエリ結果など、さまざまなデータをメモリ上にキャッシュすることで、データアクセスの高速化と同時にデータベースの負荷も軽減できます。
メモリ上のキャッシュデータは必要な時に即座に取り出せるため、リクエストごとに都度リソースから取り出すよりも応答速度が大幅に向上します。そのため、読み込みが多いワークロード (ソーシャルネットワーク、ゲーム、メディア共有、Q&A ポータルなど) や複雑な計算処理が必要なワークロード (レコメンデーションエンジンなど) のレイテンシーやスループットを改善することができます。
クリックすると拡大します
AWS を利用してモダンなアプリケーションを構築する際には、いくつか重要な要素があります。例えばロードバランサーを使用した負荷分散と可用性向上や、サーバーレスアプリケーションまたは外部サービスとの疎結合により、柔軟性や拡張性を確保することも重要です。さらに、システムの要件に適したデータベースの選定と、高いセキュリティの確保やモニタリング、ログ管理なども欠かせません。加えて、ElastiCache による高速なデータアクセスやバックエンドシステムの負荷低減は、モダンなアプリケーションを構築する上で非常に有効な選択肢となります。
その他 ElastiCache の特徴について詳しくは、「Amazon ElastiCache の特徴」をご覧ください。
Memcached と Redis
ElastiCache は、Memcached と Redis の 2 つのキャッシュエンジンをサポートしています。どちらも高速で柔軟なオープンソースのキーバリューストア型のキャッシュエンジンです。ユーザーは要件に応じて ElastiCache for Memcached または ElastiCache for Redis を選択することができます。
Memcached はシンプルなキャッシュニーズに対応し、高速な読み書きが重要な場合に適しています。一方、Redis はより多機能で、高度なデータ操作やデータを持続的に保存する要件がある場合に適しています。ElastiCache を利用する場合、具体的な要件や目的に基づいて、それぞれの特徴や機能を考慮した上でキャッシュエンジンを選択します。
クリックすると拡大します
Memcached と Redis の特徴と比較
Memcached と Redis の特徴と違いは以下のとおりです。
特徴 | Memcached | Redis |
スレッド | マルチスレッド: マルチスレッドを使用した並行処理が可能な分散キャッシュシステムです。 |
シングルスレッド: メインの処理はシングルスレッドで行われますが、非同期 I/O 処理とイベント駆動型のアーキテクチャにより、並列的なタスク処理と高いパフォーマンスを実現します。 |
データの持続性 | 揮発性のキャッシュ: データはメモリ内に一時的に保存されますが、ノード停止時にはデータが消失します。持続的なデータの保存には外部ストレージが必要です。 |
持続性のキャッシュ: メモリ内にデータを一時的に保存しながら、ディスクへの定期的な書き込みによりデータの持続性を確保します。さらに、AWS では S3 への自動バックアップが可能です。 |
データ構造 | シンプルなキーバリューストア: キーと値のペアの格納に特化しており、データの階層化や複雑な構造はサポートしていません。 |
多様なデータ構造のサポート: キーバリューストアだけでなく、リスト、セット、ソートセット、ハッシュなど、複数のデータ構造をサポートしています。 |
スケーラビリティ | 容易な水平スケーラブル: 水平スケーラビリティにより、アプリケーションの負荷が増えても、複数の Memcached サーバーを追加することで負荷を分散し、容易に処理能力を拡張することができます。 |
リードレプリカ/フェイルオーバー: リードレプリカを作成し、読み取り処理を並列化してスケーラビリティを向上させます。また、マスターノードのダウン時には自動的にフェイルオーバーが発生し、別のレプリカがマスターになります。 |
Memcached と Redis の機能と特徴について詳しくは、「Memcached と Redis の比較」をご覧ください。
主なユースケース
ElastiCache を利用したデータキャッシュの仕組みは、クライアント、アプリケーション、キャッシュ、およびデータベース間でのリクエストとレスポンスを効率化する目的で構築されます。ここでは、具体例として特定のユーザー情報の取得を通じて、データキャッシュのワークフローを説明します。
データキャッシュのワークフロー
アプリケーションは、クライアントからのリクエストを受け取ると、まずキャッシュに必要なデータが既に存在するかどうかを確認します。キャッシュに目的のデータが存在しない場合に限り、データベースへのクエリを実行するため、データベースへの頻繁なアクセスを避けながらキャッシュから効率的に必要なデータを取得することができます。
- クライアントからユーザー情報の取得リクエストがアプリケーションに送信されます。
- アプリケーションはまずキャッシュをチェックします。
- キャッシュにユーザー情報が格納されている場合、アプリケーションはそれを迅速に返します。
- キャッシュにユーザー情報が存在しない場合、アプリケーションはデータベースに対してユーザー情報をクエリします。
- データベースはリクエストを受け取り、ユーザー情報を検索してレスポンスを生成します。
- アプリケーションはデータベースからのレスポンスを受け取り、キャッシュにユーザー情報を格納します。同時に、情報の有効期限を設定するための TTL (Time-to-Live) も設定されます。
- アプリケーションは、取得したユーザー情報をクライアントに返します。
クリックすると拡大します
このようなワークフローでキャッシュを活用することで、高速なデータアクセスとデータベースへの負荷軽減が実現されます。アプリケーションはクライアントのリクエストに対し、キャッシュとデータベースを効果的に活用し、ユーザー情報を迅速に取得できるようになります。
ElastiCache を使ったキャッシング戦略について詳しくは、「キャッシング戦略とベストプラクティス」をご覧ください。
ElastiCache for Redis を使った人気のユースケース
ElastiCache for Redis の豊富なデータ構造や機能を使うことで、さまざまなユースケースに活用できます。以下は、特に人気のあるユースケースの例です。
- リーダーボード:
Redis のソートセット (Sorted Sets) は、スコアとメンバーのペアを持つ順序付けされたデータ構造です。ソートセットを使って、ユーザーのランキングを追跡し、リーダーボードを作成できます。例えば、ゲームアプリでプレイヤーのスコアを管理したり、ユーザーを特定の指標に基づいてランク付けしたりする場合に活用できます。
クリックすると拡大します
- リコメンド:
Redis の INCR (インクリメント) と DECR (デクリメント) コマンドは、数値の増減をサポートする機能です。INCR/DECR コマンドを使って、ユーザーの行動や評価に基づいたリコメンド機能を実装することができます。例えば、商品の評価やクリック回数をカウントし、その結果に基づいて関連商品をリコメンドすることができます。
- チャット:
Redis の Pub/Sub 機能は、パブリッシャーとサブスクライバーのモデルを使用してメッセージングシステムを実現する機能です。Pub/Sub 機能で、リアルタイムなチャットアプリケーションを構築することができます。ユーザーがメッセージを送信すると、パブリッシャーはメッセージを特定のチャンネルに送信し、サブスクライバーはそのチャンネルを購読してメッセージを受信します。
その他の一般的なユースケースについては、「ElastiCache の一般的なユースケースおよび ElastiCache がどのように役立つか」をご覧ください。
分散キャッシュシステム
ElastiCache は、Consistent Hashing (整合性のあるハッシュ機能) というアルゴリズムを使用して、データを複数のキャッシュノードに効率的に分散し、各ノードへの負荷を軽減します。
データ分散管理とキーの役割
クリックすると拡大します
Consistent Hashing
キャッシュノードの増減の仕組みは、使用される ElastiCache のエンジンにより異なります。ElastiCache for Memcached を使用する場合、キャッシュノードの増減はクライアント側で Consistent Hashing アルゴリズムを使って任意に行われます。一方、ElastiCache for Redis を使用する場合、ElastiCache がハッシュスロットを自動管理し、キャッシュノードの増減はそのハッシュスロットの配置に基づいて行われます。
Consistent Hashing は特定のハッシング方式で、キャッシュノードの増減によって生じるデータの再配置を最小限に抑えます。このアルゴリズムはキーをハッシュリング上に均等に分布させ、データがそのリング上の最も近いノードに保存されるようにします。キャッシュノードが追加または削除された場合でも、リング上の他の位置にあるキーのハッシュは影響を受けません。これにより、全体の再ハッシュを必要とせず、データの一貫性を保ちつつ、各ノードへの負荷を軽減します。
ElastiCache の負荷分散について詳しくは、「効率的な負荷分散のための ElastiCache クライアントの設定」をご覧ください。
オンラインクラスターのサイズ変更
ElastiCache for Redis のオンラインクラスターリサイズ機能により、管理者は手動で実行中の Redis クラスターのサイズを柔軟に拡張または縮小することが可能となります。これにより、クラスターサイズの適切な調整、高可用性の維持、そしてリソースの最適化が実現します。
柔軟なクラスターサイズの調整
ElastiCache for Redis では、トラフィックの増減に応じてクラスターサイズを手動で調整することができます。トラフィックが増加した場合はクラスターサイズを拡張し、減少した場合はクラスターサイズを縮小することで、システムのパフォーマンスとコスト効率を最適に保つことが可能です。
サイズ変更時のアプリケーションの動作
クリックすると拡大します
リソースの最適化
オンラインクラスターリサイズ機能により、需要に合わせて必要なリソースを適切に割り当てることが可能となります。クラスターサイズとそれに伴うスロットやノードの数を調整することで、不要なリソースの浪費を防ぎ、効率的なリソースの利用によりスケーラビリティとコストパフォーマンスの両方を実現することができます。
ElastiCache のオンラインクラスターのサイズ変更について詳しくは、「ベストプラクティス: オンラインクラスターのサイズ変更」をご覧ください。
クラスターモード
ElastiCache for Redis のクラスターモードは、Redis データベースを複数のノードに分散することで、パフォーマンス、可用性、スケーラビリティを向上させる機能です。クラスターモードを有効にすると、データを複数のノードで分散管理し、データベースの負荷を均等に分散させることができます。また、ノードの追加や削除による拡張性を実現することもできます。
ノード / クラスター / シャード
単位 | 内容 |
ノード | ElastiCache for Redis の基本的な処理単位です。ノードは計算リソースとメモリを提供し、Redis データベースを実行します。ノードは単独で動作する場合もありますが、通常は複数のノードがクラスターを形成します。 |
クラスター | 複数のノードから構成されるグループです。クラスターは高可用性と拡張性を提供します。クラスター内の各ノードはデータを分散して保存し、負荷を分散させます。また、クラスターはフェイルオーバー (障害時の自動切り替え) をサポートし、データの耐久性を確保します。 |
シャード | データを 1 個〜 6 個のノードに水平分割を実現するための論理的な単位です。各シャードはデータの一部を担当し、負荷を均等に分散させます。シャードによってデータベースのパフォーマンスが向上し、大規模なデータセットの処理が可能になります。 |
データレプリケーション
マスターノードに障害が発生した場合、自動的にレプリカノードの 1 つが新しいマスターノードに昇格します。このプロセスにより、システムの継続的な稼働が確保されます。また、フェイルオーバーが発生すると、DNS のエンドポイントが更新されるため、アプリケーションは新しいマスターノードに透過的に接続されます。
データのバックアップ
ElastiCache for Redis のクラスターは定期的にポイントインタイムのスナップショットを作成し、Amazon S3 にデータをバックアップします。バックアップを使用して、クラスターを復元したり、新しいクラスターをシードしたりできます。スナップショット機能により、データを保護し、予期しないデータの損失を防ぐことができます。
ElastiCache for Redis のクラスターについて詳しくは、「クラスターの管理」をご覧ください。
セキュリティ
ElastiCache は、他の AWS サービスと同様にセキュリティを最優先事項としています。主にネットワークレベルでのセキュリティと、データの暗号化によって、データをセキュリティ上の脅威から保護します。
ネットワークレベルのセキュリティ
セキュリティグループと VPC を使用することで、ElastiCache へのアクセスをネットワークレベルで制限することができます。
セキュリティグループは、ネットワーク上の通信を制御するためのファイアウォールのような役割を果たし、許可されたIPアドレスからのアクセスのみを許可します。
また、VPC を使用することで、ElastiCache をプライベートネットワーク内に配置することができます。これにより、外部からのアクセスが制限され、データの安全性が向上します。
クリックすると拡大します
データの暗号化
ElastiCacheは、データを保護するために「保存時の暗号化」と「転送時の暗号化」を行います。
- 保存時の暗号化:
保存時の暗号化では、データが保存される際に暗号化されます。これにより、データが外部から見られたり盗まれたりする心配がありません。ElastiCache では、AES-256 という強力な暗号化方式を使用してデータを保護しています。
- 転送時の暗号化:
転送時の暗号化では、データが送受信されるときに暗号化されます。これにより、データがネットワーク上で盗聴されたり改ざんされたりすることを防ぎます。ElastiCache では、SSL/TLS プロトコルを使用して、データの安全な転送を実現しています。
その他、ElastiCache のセキュリティについて詳しくは、「Amazon ElastiCache でのセキュリティ」をご覧ください。
ElastiCache の料金体系
ElastiCache は使用したリソースに基づいて課金され、最低料金はありません。料金は選択したノードタイプ、ノード数、料金モデルによって 1 時間ごとに算出されます。
コンピュート料金
ElastiCache では、選択したキャッシュノードのタイプと数に基づいてコンピュート料金が発生します。キャッシュノードのタイプはパフォーマンスとインスタンスファミリーによって決まり、要件に合わせて選択できます。
ストレージ料金
ElastiCache for Redis は、データをディスクに保存し、サービスの再起動時にもデータが保持されます。データを保存する際のストレージ料金は、使用するストレージ容量に基づいて計算されます。アクティブな Redis クラスターごとに 1 つのバックアップは無料で提供されますが、追加のバックアップやスナップショットの保存には追加料金が発生します。追加のバックアップについては、月間 1GB あたり 0.085 ドルがかかります。
クリックすると拡大します
追加のサービス料金
VPC ピアリングやデータ転送など、追加機能の使用に応じて追加料金が発生します。AWSのリザーブドインスタンスを適用すれば、料金割引を受けることができます。
ElastiCache の利用料金について詳しくは、「Amazon ElastiCache の料金」をご覧ください。
まとめ
最後に、本記事で紹介した機能の全体図を見てみましょう。
本記事では、ElastiCache の主要な機能と特徴をご説明しました。ElastiCache は単独の利用でも強力なクラウドキャッシュサービスですが、他の AWS サービスと組み合わせることで、さらに活用の範囲を広げることができます。例えば、AWS Lambda と連携することで、Lambda 関数のパフォーマンスを向上させるためのデータキャッシュを提供できます。また、Amazon CloudWatch と連携することで、ElastiCache のパフォーマンスメトリクスを監視し、スケーリングやトラブルシューティングを行うことができます。
本記事を読んで ElastiCache に興味を持たれた方、実際に使ってみたいと思われた方は、ぜひ製品ページの「Amazon ElastiCache」も合わせてご覧ください。
AWS グラレコ解説のその他の記事はこちら
- 選択
- 今話題のブロックチェーンをAWSで実現する仕組みをグラレコで解説 »
- サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説 »
- 機械学習のワークフローってどうなっているの ? AWS の機械学習サービスをグラレコで解説 »
- 外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説 »
- AWS でデプロイの自動化を実現するベストプラクティスをグラレコで解説 »
- コンテナを使ってモノリスを分割する方法をグラレコで解説 »
- クラウドへ移行する理由とそのステップをグラレコで解説 »
- Windows ワークロードをクラウドへ移行するためのベストプラクティスをグラレコで解説 »
- サーバーレスのイベントバスって何 ? Amazon EventBridge をグラレコで解説 »
- サーバーレスで SaaS を構築する方法をグラレコで解説 »
- 「あなたへのおすすめ」はどう生成するの ? Amazon Personalize で簡単に実現する方法をグラレコで解説 »
- クラウド設計・運用のベストプラクティス集「AWS Well-Architectedフレームワーク」をグラレコで解説 »
- 特定の顧客セグメントにメッセージ送信。「Amazon Pinpoint」の仕組みをグラレコで解説 »
- アプリにユーザー認証機能を簡単に追加できる「Amazon Cognito」をグラレコで解説 »
- わずか数分で WordPress サイトを構築できる「Amazon Lightsail」をグラレコで解説 »
- 異なるアプリケーション同士の疎結合を実現。「Amazon SQS」をグラレコで解説 »
- Web アプリを高速に開発できる「AWS Amplify」をグラレコで解説 »
- 機械学習の知識ゼロでもテキストデータを分析。Amazon Comprehend をグラレコで解説 »
- ビジネスデータをまとめて可視化 & 分析。Amazon QuickSight をグラレコで解説
- 人工衛星の地上局を 1 分単位で利用。AWS Ground Station をグラレコで解説
- カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説
- GraphQL API を簡単に作成 & 運用。AWS AppSync をグラレコで解説
- IoT 環境を必要な機能を選択するだけで構築。AWS IoT をグラレコで解説
- 高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
- サーバーレスでイベント駆動型アプリケーションを実現。AWS Lambda をグラレコで解説
- データサイエンス教育の強い味方。Amazon SageMaker Studio Lab をグラレコで解説
- 高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説
- リレーショナルデータベースを簡単・迅速に実現。Amazon RDS をグラレコで解説
- アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説
- データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説
- アプリケーションへのトラフィックを効率的に負荷分散。Application Load Balancer をグラレコで解説
- AWS で簡単にコンテナアプリケーションを構築 ! Amazon ECS をグラレコで解説
- 大規模データセットも簡単クエリ! Amazon Athena をグラレコで解説
- キャッシュ機能でアプリの高速化を実現 ! Amazon ElastiCache をグラレコで解説
- 使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説
- ストリーミングデータを簡単にキャプチャ、処理、保存 ! Amazon Kinesis Data Streams をグラレコで解説
- AWS で始める機械学習はじめの一歩 ! AWS の主要な AI/ML サービスをグラレコで解説
- リレーショナルデータベースをサーバーレス化 ! Amazon Aurora Serverless をグラレコで解説
- ML 駆動の検索エンジンで企業の情報管理を革新! Amazon Kendra をグラレコで解説
- オンプレミス、エッジ、どこでも楽々コンテナ管理 ! Amazon EKS Anywhere をグラレコで解説
- 生成 AI アプリケーション開発をもっと身近に、簡単に ! Amazon Bedrock をグラレコで解説
- わずか数クリックで多様な脅威を監視しクラウドを保護 ! 脅威検出サービス Amazon GuardDuty をグラレコで解説
- データの改ざん耐性と変更履歴の検証可能性を実現 ! 台帳データベース Amazon QLDB をグラレコで解説
- 生成 AI x クラウドがもたらす次世代のイノベーション ! AWS Summit Japan Day 1 基調講演をグラレコで解説
- ビジネス向け生成 AI アシスタント Amazon Q Business をグラレコで解説
- 生成 AI コーディングアシスタント Amazon Q Developer をグラレコで解説
- フロントエンドとバックエンドを統合開発 ! フルスタック TypeScript 開発環境 AWS Amplify Gen 2 をグラレコで解説
筆者プロフィール
米倉 裕基
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター・イラストレーター
日英テクニカルライター・イラストレーター・ドキュメントエンジニアとして、各種エンジニア向け技術文書の制作を行ってきました。
趣味は娘に隠れてホラーゲームをプレイすることと、暗号通貨自動取引ボットの開発です。
現在、AWS や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。
監修者プロフィール
堤 勇人
アマゾン ウェブ サービス ジャパン株式会社
Sr. Database Specialist SA
データベースを専門に、主に NoSQL 分野についてお客様を支援しています。最近の興味は部屋の防音です。
AWS を無料でお試しいただけます