助け合いフォーラム

AWS

AWS ソリューションアーキテクト - アソシエイト(SAA-C03)
問題ID : 30295
問題を開く
Amazon RDS for PostgreSQLを利用しているサービスがある。サービスのユーザー数が増えてトラフィックが増大したことでしばしば遅延が見られる問題が発生している。対策としてリードレプリカの数を最大の15台に増やしたが、今後の拡張性の観点からできれば減らしておきたい。
この問題を解決しつつ、パフォーマンスも向上させられる対応はどれか。

正解

Amazon ElastiCacheと連携する

解説

Amazon ElastiCacheは、AWSが提供するデータベースサービスの一つです。


ElastiCacheはフルマネージド型のインメモリデータベースサービスです。
インメモリデータベースとは、データストレージにメモリを使用するデータベースのことです。SSDのようなディスクストレージよりも高速・安定したアクセスが可能で、主にパフォーマンスを重視するアプリケーションに利用されています。RDSやRedshiftなど他のデータベースサービスと連携し、クエリの結果をElastiCacheにキャッシュさせることで全体的なパフォーマンスを向上させる、というような使い方ができます。

本設問のポイントは以下の通りです。
・リードレプリカ(参照専用のデータベースとして動作する、データベースのレプリカ)が最大数(15台)に達している
 → これ以上リードレプリカによる参照リクエストの分散はできない
・パフォーマンスの改善施策が必要である
リードレプリカを増やすことなくパフォーマンスを改善するためには、ElastiCacheとの連携が有効です。ユーザーが高頻度でアクセスするデータをElastiCache上に保持しておくことでRDSへのリクエストを減少させ、リードレプリカの数も減らすことができます。

以上より正解は
・Amazon ElastiCacheと連携する
です。

その他の選択肢については以下の通りです。

・データベースエンジンをAmazon RDS for MySQLに変更する
データベースエンジンをMySQLに変更してもリードレプリカの最大数など環境の違いはないため、パフォーマンスの向上は望めません。

・Amazon DynamoDBと連携する
DynamoDBはNoSQLのデータベースサービスです。キャッシュとして利用できるサービスではありませんので、パフォーマンス改善は見込めません。

・Amazon Redshift Spectrumと連携する
Amazon Redshiftの機能です。Redshift Spectrumを利用すると、S3上のデータを外部テーブルとして参照できるようになります。パフォーマンス改善を目的とした機能ではありませんので誤りです。

参考

【Amazon ElastiCache】
Amazon ElastiCacheは、AWSが提供するデータベースサービスの一つです。


ElastiCacheはフルマネージド型のインメモリデータベースサービスです。
インメモリデータベースとはデータストレージにメモリを使用するデータベースのことです。SSDのようなディスクストレージよりも高速・安定したアクセスが可能で、主にパフォーマンスを重視するアプリケーションに利用されています。RDSやRedshiftなど他のデータベースサービスと連携し、クエリの結果をElastiCacheにキャッシュさせることで全体的なパフォーマンスを向上させる、というような使い方ができます。
また、ElastiCacheはフルマネージド型のサービスですので、データベースの拡張や障害の検出・復旧、バックアップなどはAWSによって管理されています。

【ElastiCacheのデータベースエンジン】
ElastiCacheにはKVS(Key-Value Store:Key-Value型のデータストア)型のデータベースエンジンが2つ用意されており、データベースを構築する際に選択することができます。
※Key-Value型 ... 保存するデータ(Value)とそれを特定するためのキー(Key)がペアになった構成のデータセットのこと


MemcachedおよびRedisの特徴は以下の通りです。


Memcachedにはデータの永続保持やバックアップ機能はありませんので、障害や再起動などが発生した場合はデータは残りません。保持しておかなければならないデータはストレージや他のデータベースサービスへ保存しておき、アプリケーションの高速化を目的としてキャッシュとして利用する、といったケースに向いています。

RedisはMemcachedよりも高機能なデータベースエンジンです。スナップショット(Amazon S3への保存)機能によるバックアップ・リストアが可能で、データを永続的に保持しておくことができます。
また、耐障害性の機能として「自動フェイルオーバー」「マルチAZ」があります。
自動フェイルオーバー機能により、プライマリノードに障害が発生した場合は自動的にレプリカノードがプライマリノードへ昇格します。またマルチAZではAZ(Availability Zone)を跨いだレプリケーションが可能なため、プライマリノードが存在するAZに障害が発生した場合でも、別のAZのレプリカノードを昇格させることにより運用を継続することができます。

※ElastiCacheにおいて各ノードは「キャッシュノード」と呼ばれます。キャッシュノードのうち、プライマリノードは更新・参照などを行えるノード、レプリカノードは参照のみを行えるノード(リードレプリカ)です。

さらに、RedisにはMemcachedにはない機密性があります。保管しているデータの暗号化やSSL/TLSによる通信の暗号化、クライアントをパスワードで認証するRedis認証を行うことができます。これらを利用するには、ElastiCacheのデータベース作成時に「Redis」を選択し、暗号化を有効にする必要があります。


【キャッシュ戦略】
高速アクセスを実現するElastiCacheは、アプリケーションのパフォーマンス向上に主に使用されます。データをどのように保存するかというキャッシュ戦略は、データの整合性や可用性を保ちながら、パフォーマンスを最大化するために重要です。
以下に、代表的なキャッシュ戦略の2つを紹介します。

■ライト(書き込み)スルー戦略
データベースへのデータ書き込みや更新が行われるたびに、同時にキャッシュにも書き込みます。この戦略では、キャッシュのデータが常に最新の状態を保たれるため、データの整合性が維持されます。しかし、書き込み性能が若干低下する可能性があるのと、アクセスされないデータがキャッシュに蓄積されるというデメリットもあります。



■遅延読み込み戦略
データベースへの書き込みを優先し、必要な時にのみキャッシュにデータを書き込みます。アプリケーションがデータを要求した際には、まずキャッシュを確認します。キャッシュにデータが存在する場合、そのデータをアプリケーションに返します。データが存在しない場合には、データベースからデータを取得し、そのデータをアプリケーションに提供した後でキャッシュに書き込みます。この方法では要求されたデータのみがキャッシュされるため、リソースの無駄遣いを減らすことができますが、キャッシュとデータベース間で一時的なデータの不一致が生じる可能性があります。また、キャッシュミス(キャッシュからデータを取得できなかった)した場合には、データ取得に時間がかかることがあります。



【TTL(Time To Live)】
TTL(Time To Live)とは、データがキャッシュやその他のストレージシステムに保持される時間の長さを指します。これはキャッシュ管理における非常に重要な要素であり、リソースの効率的な使用とデータの整合性維持に広く利用されています。具体的には、データに保存期間が設定され、その期間が経過すると自動的にキャッシュからデータが削除されます。このメカニズムにより、使用されない古いデータや不要なデータを効率的に整理でき、リソースの確保につながります。
上に戻る

リードレプリカントの最大数

投稿日 2024/08/08

解答には直接関係しませんが、問題文中に
 Amazon RDS for PostgreSQLのリードレプリカの数を最大の5台に増やした
と記載がありますが、リードレプリカの数は最大15台ではないでしょうか。

https://aws.amazon.com/jp/rds/features/read-replicas/

2024/08/09 15:57

解説文も「5台」のままです。


コメント

この返信に対して
コメントを記入できます

スタッフからの返信

s staff_satomi

2024/08/08 17:10

Pnt704_010様 ご指摘の点を修正いたしました。 ご報告いただきまして、誠にありがとうございます。

s staff_satomi

2024/08/14 14:17

Rrrr3ika様 大変失礼いたしました。 ご指摘の点を修正いたしました。

この投稿に対して返信しませんか?