7

假设我有一个 web 应用程序在一些负载平衡的 EC2 服务器上运行,从 SimpleDB 存储和检索元数据,其中存储在 S3 上的更大数据块(由于 SimpleDB 的整个 1 KB 限制)。由于 S3 的延迟非常高,而且我不想在那里发出大量请求,所以我需要一个缓存层来存储信息……输入 ElastiCache。

好的,所以我配置了一个带有端点 X 的 ElastiCache 服务器,因此我将 X 硬编码到我在 EC2 上的应用程序中,它运行良好,直到我获得了几十万新用户,突然之间,我的缓存服务器严重不足,无法满足需求。幸运的是,我可以启动一些新的更大的缓存服务器……但后来我意识到我有端点 X、Y 和 Z,而我的应用程序只知道尝试 X,所以我仍然有问题。

所以现在我只是试图让我的头脑围绕这个难题的各个部分,我还没有进入编码部分,但这不会是一个问题吗?我已经阅读了 ElastiCache 的文档,它提到它是一个缓存集群,但是集群中的每个服务器似乎都有自己的端点。有没有办法让在 EC2 上运行的应用程序了解所有正在运行的缓存服务器,以及更详细地了解哪个缓存服务器包含特定键的数据?是否可以要求整个集群存储或检索一条信息?

4

3 回答 3

3

今天,AWS 宣布了缓存发现。你的问题解决了。http://aws.typepad.com/aws/2012/11/amazon-elasticache-now-with-auto-discovery.html

于 2012-11-29T21:41:00.880 回答
0

如果您的应用程序是从版本控制部署的(我希望是这样),您只需编辑配置文件并重新部署应用程序。我认为这种方法没有什么大问题,但也许我错过了明显的问题。

让我知道。

于 2011-10-30T17:07:35.553 回答
0

亚马逊的 Elasticache Autodiscovery 绝对是可怕的。基本上是不可能安装的,这很疯狂,因为它应该很简单。

我在 PHP 中编写了一个简单的函数,根据您运行的节点数生成一个 elasticache 节点 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
于 2014-04-02T15:56:40.167 回答