SAAに向けてAWS勉強していて表題のような疑問を抱いたので、調べてみました。
そもそもElasticacheとは?
完全マネージド型のインメモリデータストアです。
Amazon ElastiCacheを使用すると、インメモリデータストアをシームレスにセットアップ、実行、スケーリングができ、データをノードのメモリに保存するのでかなり高速に処理できます。
ほうほう。。えっと、ノードって何でしたっけ??
ノードとは
ElastiCacheでは最小の構成単位を「ノード」と呼びます。EC2で言うところのインスタンスに相当するものです。
ちなみに、、
クラスターとは
ノードを組み合わせた集合体をクラスターと呼びます。ノードに直接接続してしまうと、もしそのノードに問題が発生した場合には新しいノードのアドレス(エンドポイント)をアプリケーション側で書き換えなくてはなりませんし、サービスの成長と共に負荷が上がってくるとノードの台数を増やして負荷やメモリ(キャッシュ)を分散したりといった要件も出てきます。クラスター構成を組んでおいて、常にアプリケーションはエンドポイントを見ておくようにすればノードの増減によってアプリケーションに変更を行う必要がありません。よって、運用を行う上でこのクラスター機能という観点は非常に大事になってくるのです。
なるほど。
ということで、
Elasticacheとは「フルマネージド型でスケーラブルなインメモリデータストア」ということですな。
で、そのElasticacheにはエンジンが下記の2種類存在する。
それぞれ特徴としてはザックリいうと
という違いがあるみたいっす。
より詳しく見ていくと
Memcached
Memcachedのクラスターは単純にノードを追加したり減らしたりして負荷を分散することができる。
この仕組みは自動検出と呼ばれる機能に依存している。クライアントアプリケーション側で定期的にノードの状態をチェックし、その情報を元にノードにアクセスしにいっている。
Redis
Redisにはいくつか種類があるらしく、
- クラスターモードを有効にするか無効にするか
- シャードを有効にするか無効にするか
選択できるとのこと。
だが、Memcachedとの大きな違いはクラスターのエンドポイントを持っていること。
Memcachedはノードの状態をポーリングしてノードにアクセスしにいく形なのに対し、Redisの場合はクラスターがエンドポイントを持っており、アプリケーション側でポーリングする必要がない。
クラスターモードを有効にする
スケールアウト・インが可能になる。
シャードを有効にする
また、シャードを有効にすると、レプリケーションが可能になり、1つのプライマリノードに最大5つまでのレプリカノードを登録することができる。
常にデータのバックアップをレプリカノードで取っておいて、もしプライマリノードで故障が発生した場合にはレプリカノードが昇格してプライマリノードになることができる。そして新たなレプリカノードが追加され、これにより障害に対して可用性を担保している。
といった違いがあるみたいっす。
まとめ
正直、初学者の自分としては全て理解できているとは言い難いですが、
今の時点では
ElastiCacheは「フルマネージド型なインメモリデータストア」であり、
Memcachedを選択すると、「あくまでシンプルにノードの増減で処理負荷を分散させる」。
Redisを選択すると、「スケーラブルに加えて耐障害性が上がる」。
という風に理解してます。
初学者なので、認識に誤りがあるかもしれません。
その際は都度更新していこうと思います。
参考サイト
https://aws.amazon.com/jp/elasticache/memcached/
https://dev.classmethod.jp/articles/which-choice-redis-memcached/
https://dev.classmethod.jp/articles/elasticache-is-very-good-lets-review/