试图了解复制/一致性因素

时间:2014-09-18 01:13:31

标签: replication consistency datastax-java-driver

(cassandra noob) 我一直在做一些基本的配置/性能测试,并尝试更好地理解cassandra的工作原理,并对结果感到有些惊讶。

我的测试基本上是这样的:(多线程(每个线程只做插入),总共50k消息。)

测试1:仅单节点(无群集)插入一致性= 1。 (注意:测试在这台主机上运行,​​指向当地的cassandra)

结果:tps = 5000tps。

对于测试2,3,我们使用4个数据中心(每个节点1个节点),其中表格配置为USING REPLICATION = 4

**测试2/3(客户端再次直接在其中一个安装了Cassandra的节点上运行,并直接指向该localhost cassandra)。

测试2:插入一致性= 1

结果:tps = 423

测试3:插入一致性= 4

结果:tps = 149

最初我期望测试2以与测试1类似的方式执行,在以下假设下运行:插入将阻塞,直到插入被写入接收请求的本地cassandra节点的提交日志。

看到性能大大降低,我只能得出结论,当本地节点收到插入时,它会计算一个哈希值,而这个哈希/分区实际上可能由另一个Cassandra节点作为主节点托管?即使它最终将“复制”回“本地节点,因为ConsistencyFactor ==集群中的节点数”,这导致插入阻塞,直到远程节点将插入提交到提交日志。

这是对的吗? 如果是..有没有办法'改变'这种行为?即如果群集中的所有节点都有副本,那么当收到C = 1的插入时,请确保接收节点在本地提交,而不是将其委托出去?

注意:对于我的测试,我使用的是java DataStax 2驱动程序(可能是这个驱动程序,即使我明确连接到本地节点实际上是创建与整个集群的连接,并将请求分派给所有节点? )

由于 达诺

1 个答案:

答案 0 :(得分:0)

我能够确定它是java数据存储驱动程序的配置问题,它实际上使用的是RoundRobinPolicy,因为许多C = 1的请求被路由到其他数据中心。

当我切换到使用LatencyAwarePolicy(DCAwarePolicyRoundRobinPolicy)时,数字会在预期范围内进入。

然而,我看到一些奇怪的rpc超时访问集群(来自java驱动程序和cqlsh),它仍然在试验。

达诺