使用memcached,每个服务器实例每秒连接/ GETS / SETS的安全范围是多less?

我有兴趣了解每个memcached实例的以下指标:

  • 连接的安全范围/每秒GET / SETs
  • 上下文连接数/ GETs / SETs每秒

我有一种感觉,真正的瓶颈是连接,但是想要在他们的网站上build立memcached安装的人的input。

背景

我运行一个网站,在一个月的过程中看到了数以亿计的页面浏览量。 它分布在多个Web服务器上。 该网站最初是使用基于文件的caching架构进行编码的,该架构不是由Web服务器池共享的; 每个Web服务器都维护着自己的每个页面的caching副本。

出于显而易见的原因,我们正在迁移到memcached。 我们转换了stream量较低但dynamic较多的页面(即“caching命中率较低的页面”),没有问题。 现在我们正在转向更高stream量但更静态的页面(也就是应该看到更高的caching命中率的页面)。 我们已经把交通stream量最低的那个转换成了平均水平,我们已经看到平均每秒从3.5k GETs跳到每秒11k GETs。 平均而言,在任何给定的时间,我们都会看到400-600个连接活动。 我们的连接限制在我们的configuration文件中设置为4k。

考虑到我们仍然有最高的stream量页面来执行,这似乎是研究memcached的可接受范围和上限的好时机。 这样,我们可以确定是否需要扩展到其他memcached实例,然后再将我们网站的stream量最高的部分移至memcached。 我意识到我们的使用现在是没有理由的,但是我想知道什么时候会发生,我想事先知道。

根据我的经验,许多并发连接比GET / SET更重要。 我现在正在查看一个历史的Cacti图,该图表明,memcached实例在最大值(每秒2.8M GET和1.2M SET)上每秒获得大约4M的访问次数。 我怀疑这些数字是真实的。 无论如何,它们只使用一个活动连接。 问题在于,当我使用网站负载testing工具强调testing这个设置时,memcached开始以每秒2-3K的速度访问CPU。 我不得不build立一个memcacheds场来分配负载。 正如您所看到的,memcached可以处理的并发连接数和访问次数之间存在非线性关系。 Memcached似乎开始在一定数量的并发连接上快速降级,你真的需要压力testing你的设置来确定这个关键的数字。

也许更好的方法是看看你的性能与memcached交互的限制。 一些确定整个典型日子的平均响应时间的脚本将是一个很好的开始。

在你的主要问题上:

我认为总的来说,并发活动(获取/设置)的数量在硬件configuration上会有所不同,所以任何响应都是主观的。 我认为find一个更好的方式来衡量相对于自己的环境的成功,以达到正确的目的。 如上所述,压力testing在这个过程中自然是非常重要的。

干杯

有没有预测能力的魔术公式 – 你需要通过实验和数值分析来做到这一点。

我们已经看到从平均每秒3.5k GETs跳到平均每秒11k GETs

如果您认为这是实施更改的结果,那意味着由于性能问题,您之前丢失了三分之二的stream量?

虽然这些指标表明您可以用更less的硬件来服务更多的stream量,但您是否对响应时间进行了测量? 使用适当的networking模拟?

您需要规划一个架构,允许您控制caching的内容和位置 – 您希望能够轻松地将负载分布到多个具有故障转移function的memcached实例上。 这非常复杂,非常快 – 这是我倾向于离开memcached到最后一个手段的原因之一 – 而不是前端caching。 另一个原因是,在我testing过的地方,与其他共享数据的方法(前端反向代理,中间调优,后端分布式共享存储)相比,其收益微不足道。 但是我非常清楚架构需要反映用于构build系统的组件 – 我的经验主要是中等规模的LAMPtypes的系统 – 但是具有分离的应用服务器层的模型是非常不同的。