Memcached - 一个大型服务器与多个小型服务器

Memcached - 一个大型服务器与多个小型服务器

我正在考虑我们是否应该购买一台大型(48 GB RAM)服务器或购买 4 台小型(12 GB RAM)服务器来运行 memcached 服务。无论哪种情况,我都会有备用备用服务器以实现冗余,并且以后如果需要,我可以添加更多服务器,所以这个问题是纯粹关于性能,而不是容错能力或可扩展性。

我倾向于使用一台大型服务器,因为它更易于管理、“更环保”并且占用更少的空间,但我不知道它的性能是否能与一组小型服务器相媲美。

任何想法都将不胜感激!

答案1

安德烈,

为了回答您的问题,我建议您参考下面的代码片段。从性能角度来看,无论您有 1 个还是多个实例,memcache 客户端库仍将执行两次内部查找。

但是只有一个实例可能会造成损害,因为备份上线时需要一些时间来预热。

http://www.linuxjournal.com/article/7451?page=0,1 获取/设置带有值的键的请求需要通过哈希函数运行该键。哈希函数是一种单向函数,它将键(数字或字符串)映射到某个数字,该数字将成为存储桶编号。计算出存储桶编号后,将搜索该存储桶的节点列表,查找具有给定键的节点。如果未找到,则可以将新节点添加到列表中。

那么这与 Memcached 有何关系?Memcached 向用户呈现了一个字典接口(键 -> 值),但它在内部实现为两层哈希。第一层在客户端库中实现;它通过将键哈希到虚拟存储桶列表中来决定将请求发送到哪个 Memcached 服务器,每个存储桶代表一个 Memcached 服务器。到达那里后,选定的 Memcached 服务器将使用典型的哈希表。

答案2

请记住,您拥有的 memcached 客户端越多,您需要打开的连接就越多。如果它是在 Apache 预分叉下运行的 Web 服务,并且您希望能够处理 10,000 个同时连接,那么一台服务器和四台服务器之间的差异是 30,000 个 TCP 连接。

至于性能,这实际上取决于您的应用程序。但拥有 4 台服务器可能会为您提供 4 倍的 CPU 和 4 倍的网络接口,除非您真正增强该中央服务器。超过某个点后,这些升级的成本将呈非线性(例如,32 核系统的成本将远远超过双插槽四核系统的 4 倍)。但是,我还没有看到 memcached 通常受到 CPU 限制,因此单个服务器可能不必是高端服务器,这绝对是合理的。

但是,与许多事情一样,您可能需要使用特定应用程序亲自测试。在我看来,一台 48GB 的​​服务器很可能可以处理负载,因此请尝试获取一台具有 48GB RAM 的中等服务器,在其上安装 munin 并运行一些压力测试。如果您发现瓶颈,您将获得更多信息,了解是否需要再获取 3 台服务器并在它们周围分配 RAM,或者采取其他措施。

答案3

那么,你确定它更环保吗?我宁愿有多个,只是为了可靠性,并让你的头脑保持可扩展性。

相关内容