在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个节点之间有10ms的延迟:
-
节点之间的延迟应该是多少"good"?
-
千兆位连接可以带来什么样的性能?
-
我使用默认存储桶,我应该使用另一个具有特定参数的存储桶吗?
1 回答
如果你在同一个数据中心运行客户端和服务器,10ms的延迟是相当高的,所以我要做的第一件事是试图弄清楚为什么你的网络给你如此高的延迟 .
正如您所提到的,您正在做大约100个操作/秒,如果您的网络延迟为10毫秒,这是有意义的 . 这也意味着您可能通过网络进行同步IO . 这意味着您在发送下一个请求之前等待一个请求进行往返 . python客户端应该具有异步API,允许您发送多个请求,而无需等待响应稍后返回 . 这将极大地提高您可以执行的操作/秒的数量 .
我知道该网站提到Couchbase可以为单个节点执行100k操作/秒,但我已达到近250k操作/秒 . 真正让你失望的唯一因素是网络(在这种情况下我最大化)以及当你请求它们时内存中有多少项,因为必须转到磁盘会降低你的性能,特别是如果你只有一些与数据库的连接 .
以下是您发布的问题的一些答案 .
如果节点属于同一群集,则它们应位于同一数据中心 . (如果它们位于不同的数据中心,请使用交叉数据中心复制功能)
期望能够最大化网络连接,并且当所有数据驻留在内存中时服务器不会成为瓶颈 .
为了从Couchbase获得性能,您无需调整特定参数 .
[编辑]没有理由为什么1个节点的性能优于2个节点 . 事实上,拥有更多节点应该会让您拥有更多吞吐量 .