EC2上的应用程序如何自动发现ElastiCache实例?
假设我有一个Web应用运行在一些负载均衡的EC2服务器上,存储和检索SimpleDB中的元数据,并在S3上存储更大的数据块(由于SimpleDB的整个1 KB限制)。 由于S3的延迟非常高,我不希望在那里发出大量请求,所以我需要缓存层来获取信息......进入ElastiCache。
好的,我为ElastiCache服务器配置了端点X,以便将X硬编码到我的EC2应用程序中,并且它运行愉快,直到我获得了几十万新用户,并且突然间,我的缓存服务器因需求而受到不利影响。 幸运的是,我可以启动一些新的更大的缓存服务器......但后来我意识到我已经有X,Y和Z端点,而我的应用只知道尝试X,所以我仍然有问题。
所以现在我只是试图让我的脑袋围绕着各种各样的难题来解决这个难题,而且我还没有涉足编码部分,但是这不是一个问题吗? 我已经阅读了ElastiCache的文档,它提到它是一个缓存集群,但是集群中的每台服务器似乎都有自己的端点。 在EC2上运行的应用程序是否有办法知道所有正在运行的缓存服务器,还有更多关于哪个包含特定密钥数据的点? 是否有可能要求整个集群存储或检索一条信息?
今天Aws宣布缓存发现。 你的问题解决了。 http://aws.typepad.com/aws/2012/11/amazon-elasticache-now-with-auto-discovery.html。
如果您的应用程序是从版本控制部署的(我希望是这样),那么您只需编辑配置文件并重新部署该应用程序即可。 我没有看到这种方法的一个巨大的问题,但也许我错过了显而易见的。
让我知道。
亚马逊的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
链接地址: http://www.djcxy.com/p/9161.html
上一篇: How can an app on EC2 autodiscover ElastiCache instances?