記事検索

検索ワードを入力してください。
Sky Tech Blog
【AWS】ElastiCacheの​使用事例

【AWS】ElastiCacheの​使用事例

DBの接続プール枯渇という課題に対し、Amazon ElastiCacheを導入して解決した事例を紹介します。本記事では、ElastiCacheの2つのエンジン(MemcachedとRedis)の基本的な違いを比較しつつ、実際のプロジェクトでMemcachedを採用した経緯を解説。認証トークンのオフロードや、In-Memory DB Cacheパターンを用いたDBアクセスの削減、さらにBulk処理によるElastiCache自身の接続プール枯渇対策など、段階的な改善プロセスと、その結果としてリクエスト処理能力が約3倍に向上した効果を具体的に説明します。

ElastiCacheに関して深堀して以下の2点にフォーカスして紹介したいと思います。

  • ElastiCacheのエンジンの違い(MemcachedとRedis)
  • ElastiCacheの使用事例

Amazon ElastiCache エンジンの​違い

ElastiCacheには2種類あります。

  • Amazon ElastiCache for Memcached
  • Amazon ElastiCache for Redis

簡単に説明すると以下の特徴があるようです

  • Amazon ElastiCache for Memcached

    • シンプルである(機能が多くなく、データ構造がString型)
    • マルチスレッドでCPUのコア数によって性能UP
    • ノードをアプリケーション側で管理する必要がある
  • Amazon ElastiCache for Redis

    • 多機能を備えている(データ構造がKey-Value型)
    • シングルスレッド
    • ノードをアプリケーション側で管理する必要が無く、障害などが起きた際に勝手に切り替わったりする

詳しい比較は公式サイトで分かりやすい対比表があります。

Amazon ElastiCache for Memcachedの​使用事例

今回ElastiCacheを使用するに至った経緯を説明致します。
(長くなりすぎないように、ある程度端折っております)

社内オンプレサーバーからAWS環境のクラウドサーバーへのアクセス処理において、負荷試験で発生した問題が発端です。
事象としては、大量の要求が来た際にDBの接続プールが枯渇してしまっていました。
具体的には、AWS環境にあるクラウドサーバーからDBへのアクセスが多すぎたためです。

既存の​処理イメージ

というのも、AWS環境のクラウドサーバーに対してAPI要求を行う際には、以下の3つのリクエストが必要な制御が行われております。

  • 認証トークン要求
  • 何かしらの要求(実際に行いたい処理のリクエスト)
  • 認証トークン削除 そのため、1つの要求を捌くために最大で接続プールを3つも使ってしまう状態でした。

改善後の​処理イメージ

①と③については認証トークンに関する処理で、認証トークンは有効期限が来ると消える情報であるため、揮発性が高い情報であり、ElastiCacheで管理するのに最適な情報でした。

ElastiCache化課題​その​1

認証トークンはElastiCacheで管理することになりましたが、①の認証トークンを取得する処理では顧客情報等も見に行っているため、認証トークンをElastiCacheで管理するだけではDBアクセスは減らせませんでした。

ElastiCache化課題​その​1 解決方​法

CDP:Inmemory DB Cacheパターン
そこでこのクラウドパターンにあるように、DBの情報をElastiCacheにキャッシュしておくという方法を採用しました。

ElastiCache化課題​その​2

こうして①と③に関してはDB接続を基本的に無しにして、②の本来の要求のみが必要に応じてDBに接続するように改善しました。
単純に考えるとDB接続に関しては従来の3倍までは許容出来るような状態となりましたが、単純に置き換えただけでは今度はElastiCacheの接続プールが枯渇してしまいました。

ElastiCache化課題​その​2 解決方​法

ElastiCacheとクラウドサーバーの通信は、クラウドサーバー毎にBulkで行われるようにしました。

ElastiCache化完了

これで実際に計測をしてみた所、②の処理の負荷にもよりますがおおよそ3倍ほどのリクエストが捌けるようになっていました。

ElastiCache化 懸念事項

この辺りはそれぞれのシステムに応じた対策や実際のデータに応じて対策が必要となる部分だとは思いますが、簡単に紹介しておこうかと思います。

  • データの整合性をどこで担保するか?
    →DBの情報をキャッシュしている分の情報は不整合が発生する可能性がある。
  • ElastiCacheの方が容量が少ないので、限界値などの調査が必要。
    →ElastiCacheは断片化しづらいように出来ているので、キャッシュしている情報のサイズが分かれば計算自体は容易で、キャッシュ量が増えた際も概ね計算通り増えていきました。

\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム