📝

Amazon ElastiCacheってなんだろ?

2021/05/12に公開

Amazon ElastiCache(インメモリキャッシングシステム)| AWS

概要

  • オープンソース互換のインメモリデータストアをシームレスにセットアップ、実行、およびスケーリングできる
  • 高スループットかつ低レイテンシーなインメモリデータストアからデータを取得して、大量のデータを扱うアプリケーションを構築したり、既存のアプリケーションのパフォーマンスを改善したりすることが可能
  • 完全マネージド型の Redis および Memcached を提供

メリット

  • 非常に高いパフォーマンス
    • インメモリデータストアやインメモリキャッシュとして機能
    • ミリ秒単位の応答時間が必要とされるような、要求の厳しいアプリケーションにも対応
  • フルマネージド型
  • スケーラブル

ユースケース

  • キャッシュ
  • セッションストア
  • 機械学習
  • リアルタイム分析

ポイント

  • インメモリデータストアをフルマネージドで提供するサービス
  • RedesとMemcachedがある

よくある質問 - Amazon ElastiCache | AWS

Q: Amazon ElastiCache とは何ですか?

  • Memcached または Redis プロトコルに準拠するサーバーノードのデプロイと実行をクラウド内で簡単に実行できるウェブサービス
  • 管理された高速のインメモリシステムからの情報の取得を可能にする
  • ウェブアプリケーションのパフォーマンスを向上
  • 障害が発生したノードは自動的に検出され置き換えられる

Q: インメモリキャッシュとは何ですか? アプリケーションでどのように利用できますか?

  • アクセスのレイテンシーを低くするためにデータの重要な部分をメモリ内に保存する
  • キャッシュされる情報には、大量の I/O を伴うデータベースクエリの結果や大量の演算を行う計算の結果などが含まれる

Q: Amazon ElastiCache のノード、シャード、クラスターとは何ですか?

  • クラスター
    • 複数のシャードによって形成される
  • シャード
    • プライマリノードおよびゼロ個以上のリードレプリカ
  • ノード
    • ネットワークに接続されたセキュアな RAM の固定サイズの断片
    • 各ノードでは Memcached または Redis プロトコル準拠サービスのインスタンスが実行され、それぞれの DNS 名とポートがある

ポイント

  • インメモリキャッシュはデータをメモリ内に保存する
  • クラスターは複数のシャードの集まり
  • シャードはプライマリノードとリードレプリカの集まり
  • ノードはインスタンス

ElastiCacheは良いサービス!!特徴や使い方をおさらいしましょ! | DevelopersIO

どんな特徴があるの?

  • データをノードのメモリに保存
  • 非常に高速でデータの出し入れが可能
  • メモリにデータを保存しているのでノードが落ちてしまう(再起動を含む)と中のデータが無くなる
  • 無くなっても良いデータを保存する

どんなデータを保存したら良いの?

  • セッション情報
  • キャッシュ

どのように使うと良いの?

  • キャッシュを確認、なければデータストアへ
    • データストアのクッション的な役割
  • 結果整合性を前提で設計する
  • TTLをセットしましょう
    • TTLが切れるデータが並列で多く存在するとCPU使用率の上昇に繋がる事があります
    • TTLが長すぎるとTTLが切れる前にメモリが溢れるといった自体になる事があります。

エンジンはMemcachedとRedisどっちにしたら良いの?

  • いろんな機能を利用したい場合にはRedis
  • 単一ノードの性能を上げたい場合にはMemcached

どんな構成にしたら良いの?

  • Memcachedは単純にノードを追加したり減らしたりして負荷を分散する構成
  • Redisクラスターモードを有効化するか無効化するか
    • 無効化
      • アップデートが多い
      • リーダエンドポイントやほぼダウンタイムなしの垂直スケールがサポート
      • プライマリノードが一台になるので書き込み処理においてはそこが単一障害点(SPOF)
    • 有効化
      • データがノード毎に分割して保存(パーティション)される
      • より多くのデータを保存できる

ぶっちゃけDynamoDBじゃダメなの?

  • DynamoDBはノードやクラスターの管理不要
  • 複数AZへの保存やSSLの影響でやや書き込みが遅くなる
  • セッション情報のような頻繁に書き/読み込みされるようなデータの場合にはリクエストの度に課金されていくDynamoDBだとElastiCacheに比べて料金が割高になる可能性がある
  • 高速な通信がしたい、保存するデータは書き込みと読み込みが頻繁に発生するためコストが心配
    • ElastiCache
  • データの永続化がしたい
    • DynamoDB

オンプレから使いたい

  • VPC内から使う設計になっているので残念ながらVPC外からの使用は非推奨

ポイント

  • 無くなっても良いセッションやキャッシュデータを保存する
  • データストアのクッション的な役割で使う
  • 結果整合性を前提で設計する
  • TTLをセットする
  • 多機能が欲しい場合はRedis
  • 単一ノードの性能を上げたい場合にはMemcached
  • データの永続化がしたい場合はDynamoDB
  • VPC内で使用する

インメモリデータベースとは

インメモリデータベース(IMDB)とは - IT用語辞典 e-Words

  • データをメインメモリ(主記憶装置、RAM)上の領域に格納するよう設計されたデータベース
  • ハードディスクなどのストレージ(外部記憶装置)上に構築されるデータベースに比べ、データの読み書きを数桁高速に行うことができる
  • メモリ上のデータは電源を切ると失われてしまう
  • システムの終了・再起動時や一定時間ごとなどに、メモリ上の内容をストレージに保存してデータの永続性を確保する機能が搭載されている

インメモリデータベースとは何ですか?

概要

  • 専用データベースの一種
  • データをディスクや SSD に保存するデータベースではなく、データストレージ用のメモリに主に依存
  • ディスクにアクセスする必要性を除くことによって、最小限の応答時間を達成する
  • すべてのデータはメインメモリにのみ保存および管理されているので、処理やサーバー障害によって失われてしまうリスクがある
  • すべてのオペレーションをログに保存したりスナップショットを取得したりすることで、データを存続することができる

ユースケース

  • リアルタイム入札
  • ゲームのリーダーボード
  • キャッシュ

ポイント

  • データをメモリ上に持つことで高速化
  • メモリ上のデータは揮発性なので永続化する機能が搭載されている
  • リアルタイム処理などに向いている

コンソール

まとめ

  • インメモリデータストアをフルマネージドで提供するサービス
  • インメモリはデータをメモリ内に保存することで高速化
  • メモリ上のデータは揮発性なので無くなっても良いデータを保存する
  • データストアのクッション的な役割で使う
  • 多機能が欲しい場合はRedis
  • 単一ノードの性能を上げたい場合にはMemcached
  • データの永続化がしたい場合はDynamoDB
  • クラスターは複数のシャードの集まり
  • シャードはプライマリノードとリードレプリカの集まり
  • ノードはインスタンス

Discussion