django ウェブアプリで AWS Elasticache を使い始めました。
自動検出機能を使用してキャッシュの場所を一意のエンドポイントに設定することから始めましたが、うまくいかないようです。
Python から memcached に接続するために、pylibmc (1.2.2) と django-pylibmc-sasl (0.2.4) を使用しています。
自動検出機能はこれらのクライアントで動作しますか? どうすれば有効にできますか?
はい、ジャンゴの場合: django-elasticache
ElastiCache は memcached インターフェイスを提供するため、それを使用する 3 つのソリューションがあります。
この場合、アプリケーションはクラスター内のノードにランダムに接続し、キャッシュは最適ではない方法で使用されます。しばらくすると、最初のノードに接続され、アイテムが設定されます。数分後、別のノードに接続され、このアイテムを取得できなくなります。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': 'cache.gasdbp.cfg.use1.cache.amazonaws.com:11211',
}
}
memcache クライアントはすべてのノード間でアイテムを分離し、クライアント側で負荷のバランスを取ります。新しいノードを追加するか、古いノードを削除した後にのみ、問題が発生します。この場合、新しいノードを手動で追加する必要があり、AWS でのすべての変更後にアプリを更新することを忘れないでください。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': [
'cache.gqasdbp.0001.use1.cache.amazonaws.com:11211',
'cache.gqasdbp.0002.use1.cache.amazonaws.com:11211',
]
}
}
クラスターに接続し、すべてのノードの IP アドレスを取得し、すべてのノードを使用するように memcached を構成します。
CACHES = {
'default': {
'BACKEND': 'django_elasticache.memcached.ElastiCache',
'LOCATION': 'cache-c.draaaf.cfg.use1.cache.amazonaws.com:11211',
}
}
ノード リスト (django-elasticache) を使用したセットアップと、1 つの構成エンドポイントのみへの接続 (DNS ルーティングを使用) の違いは、次のグラフで確認できます。
自動検出をサポートしていないように見える PyLibMC バインディングを使用しました。
Django に組み込まれ、ドキュメントで使用されている Memcached バックエンドは、Elasticache が提供する独自のエンドポイントとうまく連携しています。
現在、すべてが正常に動作しており、Memcached で応答時間が大幅に改善されました。