Couchbase:只有一个节点,速度提高了160倍:为什么?

时间:2014-05-12 07:48:14

标签: couchbase

在couchbase网站上,可以看到couchbase每秒可轻松达到10万个请求。 由于我的应用程序基本上只需要键/值存储,我尝试一下couchbase。 所以我尝试在我的提供者中构建一个小集群。 我使用python客户端和Couchbase服务器2.2.0社区版。

单个节点进入“集群”:我每秒可以做16000个请求:很好! 但是当集群中有2个节点时,'set(key,val)'每秒只有100个请求,而'get(key)'则相同(我使用默认存储桶)。 这适用于非常少量的密钥:10 000个密钥,长度:仅10个字节!

查看统计数据时,似乎没有瓶颈(CPU /磁盘/ RAM)。

我的硬件:

Core i5 (3.4 Ghz)
32 GB RAM
Disk : SSD 120Go
Network : Gigabit, bandwith limited to 200 Mbps

我看到的唯一一点是,我在2个节点之间有10毫秒的延迟:

  • 节点之间应该有什么“好”的延迟?
  • 千兆位连接可以带来什么样的性能?
  • 我使用默认存储桶,我应该使用另一个具有特定参数吗?

1 个答案:

答案 0 :(得分:2)

如果您在同一数据中心运行客户端和服务器,那么10毫秒的延迟相当高,所以我要做的第一件事就是弄清楚为什么您的网络会给您带来如此高的延迟。

正如您所提到的,您正在做大约100次操作/秒,如果您的网络延迟为10毫秒,这是有意义的。这也意味着您可能通过网络进行同步IO。这意味着您在发送下一个请求之前等待一个请求进行往返。 python客户端应该具有异步API,允许您发送多个请求,而无需等待响应稍后返回。这将极大地提高你可以做的操作/秒的数量。

我知道该网站提到Couchbase可以为单个节点执行100k操作/秒,但我已经达到了近250k操作/秒。真正让你失望的唯一因素是网络(在这种情况下我最大化)以及当你请求它们时内存中有多少项,因为必须转到磁盘会降低你的性能,特别是如果你只有几个与数据库的连接。

以下是您发布的问题的一些答案。

  1. 如果节点属于同一群集,则它们应位于同一数据中心。 (如果它们位于不同的数据中心,请使用交叉数据中心复制功能)
  2. 期望能够最大化网络连接,并且当所有数据都驻留在内存中时服务器不会成为瓶颈。
  3. 为了从Couchbase获得性能,您无需调整任何特定参数。
  4. [编辑]没有理由说1个节点的性能优于2个节点。事实上,拥有更多节点应该会让您拥有更多的吞吐量。