1

业务场景要求:

50M键值对,每个2K,总共100G内存。

大约 40% 的 key-value 会在一秒钟内发生变化。

对于每个更改的对,Java 应用程序需要一次 Get() 和一次 set(),它将是 50M*40%*2=4M qps (query per second) 。

我们测试了 memcached——它显示了非常有限的 qps。
我们的基准测试与此处显示的结果非常相似 http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html

10,000 左右 qps 是一台 memcached 服务器的限制。

这意味着我们的业务场景需要 40 个分区的 memcached 服务器——这看起来非常不经济和不切实际。

根据您的经验,就 memcached 的设计性能而言,基准测试是否准确?

对调整 memcached 系统(客户端或服务器)有什么建议吗?

或者任何其他能够更经济地满足要求的替代内存存储系统?

提前谢谢了!

4

1 回答 1

1

如果您查看您谈到的基准测试中的图表,您需要意识到在许多情况下,限制是网络而不是内存缓存。例如,如果您的所有项目都有 2k 值,那么您在 GigE 网络上的最大吞吐量约为 65k ops/sec。(1024*1024*128/2048=65536)。Memcached 每秒可以执行比这更多的操作。我个人用(我认为)512b 值达到了 200K ops/sec,而且我听说其他人的吞吐量比我高得多。不过,这一切都在很大程度上取决于网络。

此外,memcached 几乎没有以 10k ops/sec 的速度执行任何操作。我的猜测是您没有在基准测试中利用并发性。

于 2012-04-17T01:47:05.617 回答