LinuCレベル4 システムアーキテクト 性能・拡張性の設計 問8
性能・拡張性の設計/性能の拡張ゲームのランキング機能で、スコア順に並んだ上位の利用者を高頻度で参照する。リレーショナルデータベースへの負荷を下げるためにインメモリのデータストアを導入するが、再起動してもデータを失いたくなく、スコア順の並びをデータストア側で維持させたい。選択として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「性能・拡張性の設計」に対応。実際の試験問題ではありません)
- Amemcachedを導入し、スコアの一覧をキーと値の組で保持して、並べ替えはアプリケーション側で毎回行う
- BRedisを導入し、ソート済みセット型でスコア順を維持させ、RDBやAOFによる永続化を有効にする
- CCDNを導入し、ランキングのページをエッジサーバーにキャッシュして、オリジンへのアクセスを減らす
- Dリードレプリカを導入し、ランキングの集計クエリをレプリカで実行させてプライマリの負荷を下げる
正解:B
解説
Redisはインメモリのデータストアで、文字列のほかにリスト、ハッシュ、ソート済みセットなどのデータ構造を持ち、ソート済みセットではスコア順の並びをデータストア側で維持できるため、ランキングの上位取得を効率よく行えます。また、スナップショット(RDB)や追記ログ(AOF)による永続化の機能があり、再起動後にデータを復元できます。memcachedは単純なキーと値のキャッシュで、ディスクへの永続化の仕組みを持たず、障害やOSの再起動でデータが失われます。CDNやリードレプリカも負荷軽減の手段ですが、スコア順の維持や頻繁な更新への追従という要件には合いません。
選択肢ごとの解説
- A誤り。memcachedは単純なキャッシュ向けでディスクへの永続化の仕組みがなく、障害やOSの再起動でデータが失われます。並べ替えもアプリケーション側で行う必要があるため、要件を満たしません。
- B正しい。ソート済みセットでスコア順を維持でき、RDBやAOFによる永続化で再起動後もデータを復元できます。
- C誤り。CDNは静的なコンテンツや共通のページの配信に向き、頻繁に変わるスコア順の維持や永続化の要件には合いません。
- D誤り。参照の負荷は分散できますが、集計クエリ自体の重さは変わらず、インメモリによる高速化にもなりません。