7

django ウェブアプリで AWS Elasticache を使い始めました。

自動検出機能を使用してキャッシュの場所を一意のエンドポイントに設定することから始めましたが、うまくいかないようです。

Python から memcached に接続するために、pylibmc (1.2.2) と django-pylibmc-sasl (0.2.4) を使用しています。

自動検出機能はこれらのクライアントで動作しますか? どうすれば有効にできますか?

4

3 に答える 3

8

素早い回答

はい、ジャンゴの場合: django-elasticache

長い答え

ElastiCache は memcached インターフェイスを提供するため、それを使用する 3 つのソリューションがあります。

1. 場所 = 構成エンドポイントで構成された Memcached。

この場合、アプリケーションはクラスター内のノードにランダムに接続し、キャッシュは最適ではない方法で使用されます。しばらくすると、最初のノードに接続され、アイテムが設定されます。数分後、別のノードに接続され、このアイテムを取得できなくなります。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': 'cache.gasdbp.cfg.use1.cache.amazonaws.com:11211',
    }
}

2. すべてのノードで構成された Memcached。

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',
        ]
    }
}

3. django-elasticache を使用します。

クラスターに接続し、すべてのノードの IP アドレスを取得し、すべてのノードを使用するように memcached を構成します。

CACHES = {
    'default': {
        'BACKEND': 'django_elasticache.memcached.ElastiCache',
        'LOCATION': 'cache-c.draaaf.cfg.use1.cache.amazonaws.com:11211',
    }
}

ノード リスト (django-elasticache) を使用したセットアップと、1 つの構成エンドポイントのみへの接続 (DNS ルーティングを使用) の違いは、次のグラフで確認できます。

2 つのノードを持つクラスターの統計を取得する

于 2014-02-28T23:11:20.347 に答える
1

自動検出をサポートしていないように見える PyLibMC バインディングを使用しました。

Django に組み込まれ、ドキュメントで使用されている Memcached バックエンドは、Elasticache が提供する独自のエンドポイントとうまく連携しています。

現在、すべてが正常に動作しており、Memcached で応答時間が大幅に改善されました。

于 2013-02-01T01:26:13.573 に答える