7

私はいくつかの負荷バランスのとれたEC2サーバ上で動作するwebappを持っているので、SimpleDBからのメタデータの格納と検索はS3に格納されています(SimpleDBの全部の1KBの制限のため)。 S3は非常に待ち時間が長く、とにかくたくさんのリクエストをしたくないので、私は情報のキャッシングレイヤーが必要です... ElastiCacheを入力してください。EC2のアプリケーションはどのようにしてElastiCacheインスタンスを自動検出できますか?

私はElastiCacheサーバーをエンドポイントXでプロビジョニングしていますので、EC2のアプリケーションにXをハードコードし、数十万人の新規ユーザーと突然のキャッシュサーバーが需要に恵まれない限り、 。幸いにも私はちょうどいくつかの新しい大規模なキャッシュサーバーを起動することができます...しかし、私はエンドポイントX、YとZを持っていることを実現し、私のアプリはXを試して知っているので、まだ問題があります。

今私は頭をさまざまな部分に囲んでこのパズルに巻き込もうとしていますが、まだコーディングの部分には手をつけていませんが、これは問題にはなりませんか? ElastiCacheのドキュメントを読んだところ、キャッシュ・クラスタだと言われていましたが、クラスタ内の各サーバーには独自のエンドポイントがあるようです。 EC2上で実行されているアプリケーションで、実行中のすべてのキャッシュサーバーについて知る方法はありますか?また、特定のキーのデータが含まれているポイントまで知る方法はありますか?クラスタ全体に情報の保存や取得を依頼することは可能ですか?

+0

私はそれがこの質問の答えに多大な重要、私のEC2その価値は何のために疑いますアプリはPHPで実行される可能性が高くなります。 –

+0

私はhttps://forums.aws.amazon.com/thread.jspa?threadID=74852で同じ行に沿って機能要求を気付きました。残念なことに、あなたのキャッシュエンドポイントを持つ設定ファイルを持っているようです今のところできます。 –

答えて

0

あなたのアプリがversioncontrolからデプロイされていれば(私はそうだと思いますが)、設定ファイルを編集してアプリケーションを再デプロイするだけです。私はこのアプローチに大きな問題は見当たりませんが、おそらく私は明らかなことを見逃しています。

私に知らせてください。

+2

キャッシュクラスターを単一のサーバーのようにアプリケーションに提示するための弾力性のあるメカニズムが必要だったと思います。特定のキーでどのエンドポイントがヒットするのか心配する必要はなく、キャッシュノードをスピンアップまたはシャットダウンするときにキャッシュ設定を気にする必要はありません。そのようなことはまだ存在しないようです。 –

+0

それはありません。一般に、AWSのElastiCacheはノードを提供します。これらのノードの使用方法(たとえば、すべてを巨大な店舗として使用しているのか、ミラーリングしているのかなど)はあなた次第です。これは単にmemcacheの仕組みです。おそらく定期的なAPI呼び出しにあなたの発見をラップすることができますが、私はそれをお勧めしません。我々はこれらの変更を再展開します。 – Till

+0

私はこれの周りに長い魔法をかけません。例えば。単にノードを追加するだけでは、通常は良いアイデアではないか、アプリケーションでおそらく対処できるものではありません。例えば。別のノードをElasticCacheクラスタに追加すると、キャッシュクラスタのバランスをとって話を進める必要があります。通常は、設定に追加する方が簡単です。ext/memcache(PHPを使用します)の設定を調整してから、キャッシュを空にして再投入してゼロから始めます。 – Till

0

AmazonのElasticache Autodiscoveryは絶対に恐ろしいです。それは非常に簡単にする必要がありますので、狂ってインストールすることは基本的に不可能です。

実行しているノードの数が指定されている場合、私はPHPで単純な関数を使って弾力的なノードのURLを生成しました。はい、ノードの数を変更した場合(またはおそらくこの値をenv varに入れる場合)、コードを更新する必要があります。

それは同じノードに同じキーをマッピング:

function get_elasticache_node_url($key, $config_url, $num_nodes) { 
    $node = hexdec(substr(md5($key), 0, 15)) % $num_nodes + 1; 
    $nodestr = str_pad($node, 4, "0", STR_PAD_LEFT); 
    return str_replace('.cfg.','.'.$nodestr.'.',$config_url); 
} 

$num_nodes = 10; 
$config_url = 'cluster-name.xyzxyz.cfg.use1.cache.amazonaws.com'; 

echo get_elasticache_node_url("key1", $config_url, $num_nodes); 
echo get_elasticache_node_url("key2", $config_url, $num_nodes); 

出力:

cluster-name.xyzxyz.0001.use1.cache.amazonaws.com 
cluster-name.xyzxyz.0004.use1.cache.amazonaws.com 
関連する問題