Memcached – 一个大的服务器vs几个较小的服务器

我正在考虑是否应该得到一个大的(48 Gb RAM)服务器,或者购买4个较小的(12Gb RAM)服务器来运行memcached服务。 在任何一种情况下,我都会有备用的冗余备份,如果以后需要,我将能够添加更多的服务器,所以这个问题纯粹是关于性能 ,而不是容错或可伸缩性。

我倾向于拥有一台大型服务器,因为它更容易pipe理,“更环保”,占用空间更less,但我不知道它是否能够与一组较小的服务器相提并论。

任何想法将不胜感激!

安德烈,

要回答你的问题,我会引用你到下面的代码片段。 性能明智的memcache客户端库将仍然在做两个内部查找,无论你是否有1个或更多的实例。

但是只有一个实例可能会受到影响,因为备份在线时需要一段时间进行预热。

http://www.linuxjournal.com/article/7451?page=0,1请求获取/设置具有值的密钥要求密钥通过散列函数运行。 哈希函数是一个单向函数,它将一个键(数字或string)映射到某个数字,这个数字将成为存储区编号。 一旦计算了桶号,就search该桶的节点列表,查找具有给定键的节点。 如果找不到,可以在列表中添加一个新的。

那么这与Memcached有什么关系呢? Memcached提供给用户一个字典界面(键 – >值),但它在内部实现为双层散列。 第一层在客户端库中实现; 它通过将密钥散列到虚拟存储桶列表中决定将哪个Memcached服务器发送给请求,每个虚拟存储桶代表一个Memcached服务器。 一旦到达,所选的Memcached服务器将使用典型的哈希表。

请记住,你有更多的memcached客户端,你必须打开更多的连接。 如果它是在Apache预分支下运行的Web服务,并且希望能够处理10,000个同时连接,则一个服务器与4之间的差异是30,000个TCP连接。

就性能而言,这取决于你的应用程序。 但有4个服务器可能会给你4倍的CPU和4倍的networking接口,除非你真的强化了中央服务器。 在某种程度上,这种升级的成本是非线性的(例如,32核系统的成本将超过双核四核的4倍)。 但是,我还没有看到memcached的CPU通常是有限制的,所以单个服务器可能不必是如此高端的服务器。

但是,与许多事情一样,这可能是您必须针对特定应用程序testing自己的事情。 在我看来,一台48GB的服务器似乎可以处理负载,所以可以尝试使用48GB内存的适中服务器,然后将munin放在上面,然后运行一些压力testing。 如果你发现瓶颈,你会得到更多关于是否需要再增加3台服务器,并将RAM扩散到其周围的信息,或者采取其他措施。

那么,你确定它是绿色的? 我宁愿有几个,只是为了可靠性,并保持在你的头。