疑問文

PythonとかRubyについて、疑問や学びをまとめる場所

勉強しないと。しないと。

ElastiCache導入検討

今日はAWS関連の学びメモ。
図なしの殴り書きですがご容赦…

Amazon ElastiCache

Amazon ElastiCache (キャッシュ管理・操作サービス)| アマゾン ウェブ サービス(AWS 日本語)

ElastiCache は、メモリ内キャッシュのデプロイ、運用、スケーリングをクラウド内で簡単に実行できるウェブサービスです。このサービスは、低速のディスクベースのデータベースに完全に依存せずに、高速の管理されたメモリ内のキャッシュから情報を取得できるようにすることで、ウェブアプリケーションのパフォーマンスを向上させます。

まあ要するにクラウドで利用できるキャッシュシステム。
エンジンとしてMemcachedかRedisの使用が可能。
EC2にキャッシュエンジンを載せて運用するよりも
セットアップが楽だったり、スケールしやすかったりします。

背景

開発中のプロダクトのキャッシュは
現在Memcachedlocalhostに保存しています。
ただ、今後のスケールを考えると辛いので
スケールしやすく、かつサーバごと分離できる
ElastiCacheを検討しています。

とりあえず試したのは
Memcached用のインスタンスを購入して
EC2からアクセスする部分まで。

機能

機能に関しては、ここの解説がわかりやすかった。

Cache Cluster

ElastiCacheでは複数のノード(サーバ)に
データを保持することが可能。
これらのノードをCache Clusterという単位で
まとめて管理します。

Auto Discovery

各ノードのEndpoint(接続口)は
Management Consoleから確認可能。
複数のノードを使うのであれば
各Endpointをアプリ側で知っておく必要があります。
これだとノードの増やしたり減らしたりするたびに
アプリ側のコードを書き換えないといけません。

それに対して、Auto Discoveryは
前述のCache ClusterのEndpointを登録しておくことで
自動的に紐付いているノードの情報を取得してくれます。
これでアプリ側からは実際の接続先を知らなくても
よしなに各ノードへ繋いでくれる。

ElastiCache Cluster Client

通常のMemcachedライブラリでは
Auto Discovery機能は使えない様子。

ElastiCache Cluster ClientはAmazonが提供しているClientで
Auto Discoveryが使えるMemcached互換Client。
現在はJava版とPHP版が提供されているようです。

導入

手順はここが比較的新しくて詳しかった。
ElastiCacheのmemcachedとEC2上のrailsとdalli-elasticacheを使ってキャッシュ管理する

あとは公式のよくある質問とドキュメント
よくある質問 - Amazon ElastiCache (キャッシュ管理・操作サービス)| アマゾン ウェブ サービス(AWS 日本語)
ElastiCache and Amazon Virtual Private Cloud - Amazon ElastiCache

ここでもよくわからん単語が多数だったので解説。

Cache Subnet Group

既存のVPCに対してElastiCacheを設置する際に必要。
要するにVPCのどこにおくかをSubnetで決めます。

接続元になるEC2と同じAZに置かなければ
通信費が発生する的なことがどこかに書いてあったような…
ElastiCacheのManagementConsoleから設定可能。

VPC Security Group

VPC内でどこからの接続を許すかを設定します。
基本的には接続元のEC2が属しているSecurityGroupからの
通信を許可するかたちにすればいいと思います。
EC2のManagementConsoleから設定可能。

Cache Security Group

VPCを使用していない場合に必要。
私はVPCがある環境での使用を想定していたので
あんまり確認してません。が、多分VPCの方とほぼ同じ?
ここもElastiCacheのManagementConsoleから設定可能。

気付き

前述の導入手順に従えばあっさりできます。
便利な世の中ですね。接続もバッチリでした。
アプリ側から設定したExpirationも正しく機能してます。

試してみての気付きとしては

  • ノードのRebootやDeleteは可能だがStopは不可
  • CloudWatch対応で、様々なメトリクスの閲覧が可能
  • CloudWatchのCurrent Itemsの項目は期限切れを反映しない
  • 複数ノードにしたときにどうデータが割り振られるのかが不明

というところ。確認が不十分なものの
Memcachedの仕様をきっちり理解すれば
3点目と4点目に関しては解決できそうかな?

公式曰く、現在RubyのClientを作成中とのこと。
Pythonでも十分に使えるようになればいいですねえ。