Performance Overhead of Clustering/Replication?
I'm wondering what the expected performance degradation is of running with clustering/replication enabled vs. running multiple independent nodes.
I have 2 nodes, and adding them both to a cluster seems to degrade my performance benchmarks significantly (in terms of latency under load). Do you have any guidance on what should be expected?
-Corey
Hey Corey - what language are you developing in...and with which client?
thanks-
james.
james,
C# with the Enyim client.
-Corey
Good news there is that discussions are already underway in getting C# to vbucket awareness. We don't have a timeline yet, but that's certainly one of the top priorities.
I'm not sure additional hops are the issue. let me try to clarify.
I have these scenarios:
A) 2 independent nodes running membase, client is aware of both nodes
B) 2 clustered nodes running membase, client is aware of both nodes.
scenario B is significantly slower than sceanrio A. The only difference I can think of is that B is replicating and A is not.
Are you saying there is a difference in network hops for operations between scenario A and B?
or can this degradation be attributed to the fact that replication or other internal operations are happening when running in a cluster?
Corey, scenario B would still have the extra network hops since you're going through a proxy on both nodes. I suspect that the soon-to-be-released vBucket aware client will solve this. Let's retest with that, and if there is still a performance problem we'll diagnose that.
Thanks!
Perry
Hi Corey,
I have 2 nodes, and adding them both to a cluster seems to degrade my performance benchmarks significantly (in terms of latency under load). Do you have any guidance on what should be expected?
In the case that you have two nodes, since the proxy you're going to is across the network and there may be one more physical network hop, latency may be as high as double, but it depends on where the item is hashed to. Everything is local when you have one node, so there is no additional hop.
In the not too distant future, the best approach for this would be to run the proxy local to the client, so there is one "local" hop and then only one direct hop to the machine. In the future beyond that, we plan to get to vbucket aware clients, so it's all direct.