多个运行 Auto Scaling 和分布式 Memcache 的 AWS EC2

多个运行 Auto Scaling 和分布式 Memcache 的 AWS EC2

我计划在 Amazon EC2 上的一系列 Linux Web 服务器上使用分布式 Memcache。这些 EC2 当前运行自动扩展,因此会随着负载的增加或减少而增加。

我已经使用这篇文章来指导初始设置。

memcache/php 的最佳实践 - 多 memcache 节点

它在回复中引用了另一个链接。

http://techgurulive.com/2009/07/22/a-brief-to-memcached-hash-types/

我有点不确定当服务器增加或减少时,Web 服务器的本地 AWS IP 将如何在 Memcache 客户端代码中的节点列表中更新。

我目前在客户端上使用 PHP PECL - Memcache。

是否有人知道使用 AWS 环境来管理这一点的最佳实施方案?

在此先感谢您的任何建议。

戴夫

答案1

听起来你正在设计一个相当大的系统来处理相当多的负载。如果是这样,你可能希望为 Memcache 和 Web 节点设置单独的实例,因为它们的性能特征截然不同。通过分离这两个实例,你可以使用实例类型更适合每一个。

在正常情况下,Memcache 几乎不使用 CPU,因此使用高内存实例是有意义的。同样,Web 服务器通常是处理器密集型的。为它们使用高 CPU 实例。

请记住,memcached 本身非常简单。它只是等待命令,说“获取此密钥”或“将此密钥设置为此值”(还有其他一些命令,但这些是基本命令)。任何哈希等操作都完全在客户端 memcached 库中完成。

考虑到这一点,虽然 memcached 的自动扩展是相当雄心勃勃的,但它肯定是可以实现的。如果您经常启动和停用服务器,您要么必须接受某些缓存数据会定期丢失,这可能会给数据库带来更多负载,要么确保将存储在 memcached 实例中的所有数据首先复制到另一个实例。

答案2

有点晚了,但你真的不想让 memcache 节点自动缩放。哈希会漂移,所以每次发生扩展或缩小事件时,你都会丢失很大一部分缓存。

相关内容