【问题标题】:Trying to understand Replication/Consitency Factors试图了解复制/一致性因素
【发布时间】:2014-09-18 01:13:30
【问题描述】:

(卡桑德拉菜鸟) 我一直在做一些基本的配置/性能测试,并尝试更好地了解 cassandra 的工作原理,并且对结果有点惊讶。

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

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

结果:tps=5000tps。

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

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

测试 2:插入 Consistency=1

结果:tps = 423

测试 3:使用 Consistency=4 插入

结果:tps = 149

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

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

这是正确的吗? 如果是的话..有没有办法“改变”这种行为?即如果集群中的所有节点都有一个副本,那么当接收到 C=1 的插入时,确保接收节点在本地提交它,而不是委派出去?

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

谢谢 达诺

【问题讨论】:

  • 嗨,dano,你能分享你设置一致性级别的代码吗?

标签: replication consistency datastax-java-driver


【解决方案1】:

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

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

然而,我看到一些奇怪的 rpc-timeouts 访问集群(来自 java-driver 和 cqlsh),这仍在试验中。

达诺

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2021-08-04
    • 2016-12-11
    相关资源
    最近更新 更多