あるチームがElastiCache for Redisを使って頻繁にアクセスされるDynamoDBデータをキャッシュしている。突然ElastiCacheのCPU使用率が90%を超えてアプリのレイテンシが急増した。可能性のある原因と対策として正しいものを2つ選択してください。
- A. ElastiCacheの自動フェイルオーバーが頻繁に発生してCPUを消費している
- B. ElastiCacheのノードタイプをメモリ最適化インスタンスに変更することでCPU問題は自動的に解消される
- C. Redis上で複雑なLuaスクリプトまたはSORTコマンド・KEYS コマンドなどのO(N)オペレーションが実行されており、Redisの単一スレッドをブロックしている可能性がある。SlowLogを確認して重い操作を特定する
- D. ElastiCacheクラスターをMulti-AZに変更することでCPU負荷を複数AZに分散できる
- E. Redisのキャッシュキーが特定のスロット(ハッシュスロット)に集中するホットキー問題が発生しており、ElastiCache for Redisのコンソールでホットキーを確認してキー設計を見直す
解答と解説を見る
正解: C, E
ElastiCache for Redis(クラスターモードなし)のCPU急騰の主な原因として2つが最も可能性が高い。ホットキー問題(選択肢E)は特定のキーへのアクセスが極端に集中する問題で、ElastiCacheコンソールのメトリクスやredis-cliの「--hotkeys」オプションで確認できる。解決策はキー名にプレフィックスを追加してアクセスを分散させるか、Redisクラスターモードで複数シャードに分散させること。O(N)オペレーション(選択肢C)はRedisのSLOWLOGコマンドで実行時間の長いコマンドを確認でき、KEYS *やSORTなど全件スキャン系コマンドがRedisの単一スレッドをブロックして全リクエストのレイテンシが増大する。これらのコマンドをSCAN(カーソルベースの非ブロッキング反復)やZRANGEBYSCOREに置き換えることが根本対策。選択肢Bのノードタイプ変更はリソース増強だが原因特定なしには効果が限定的。選択肢DのMulti-AZはプライマリノードへの書き込みを分散しない(読み取りはレプリカで分散可能)。選択肢Aの自動フェイルオーバーはCPU消費の主因にならない。
📚 関連サービスの解説: Amazon ElastiCache