c++ - 我应该担心 Cassandra C++ 驱动程序的负载平衡选择吗?

标签 c++ networking cassandra cassandra-3.0

我有一个运行 Cassandra 3.9 的 4 个节点的小型 Cassandra 集群。

我将 4 个 IP 地址传递给 connect() 函数,当我使用 netstat -a4n | 检查连接时grep 9042,可以看到都连上了。请注意,无论我将 1 个 IP 还是 4 个 IP 传递给 connect(),一旦完全连接,结果都是相同的,包括到 10.0.1.1 节点的双连接...(10.0.1.1 和 10.0 .1.3 是种子,但不知何故只有 10.0.1.1 有双重连接,所以我不太确定为什么会发生这种情况,我试图洗牌用于连接的 IP 列表,再次,它没有任何区别结束。)

tcp        0      0 10.0.0.1:45012      10.0.1.3:9042      ESTABLISHED
tcp        0      0 10.0.0.1:48400      10.0.1.4:9042      ESTABLISHED
tcp        0      0 10.0.0.1:51514      10.0.1.2:9042      ESTABLISHED
tcp        0      0 10.0.0.1:56460      10.0.1.1:9042      ESTABLISHED
tcp        0      0 10.0.0.1:56452      10.0.1.1:9042      ESTABLISHED

当我查看 nodetool status 的输出时,它看起来不错:

Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address   Load       Tokens       Owns (effective)  Host ID  Rack
UN  10.0.1.1  7.92 MiB   256          76.1%             (id)     rack1
UN  10.0.1.4  12.26 MiB  256          77.7%             (id)     rack1
UN  10.0.1.3  10.08 MiB  256          72.2%             (id)     rack1
UN  10.0.1.2  8.77 MiB   256          74.0%             (id)     rack1

(注意:我删除了 ID,它们在这里没有用)。

但是,在网络方面,当我查看传输到这些机器的数据量时,我发现存在巨大差异。我使用 iptables -L -nvx 命令,令我惊讶的是,我发现我向第一个 Cassandra 节点发送了大约 3 倍的数据包和近 20 倍的数据:

6856 13581751 RETURN     all  --  eth1   *  10.0.1.1    0.0.0.0/0
2736   816810 RETURN     all  --  eth1   *  10.0.1.2    0.0.0.0/0
2831   807426 RETURN     all  --  eth1   *  10.0.1.3    0.0.0.0/0
2745   806023 RETURN     all  --  eth1   *  10.0.1.4    0.0.0.0/0

(6,856/2,736 = 2.51 和 13,581,751/806,023 = 16.85)

我想在某种程度上这并不重要,只要节点不忙就行,但我仍然想知道为什么我会看到如此巨大的差异?为什么不是所有 4 个连接都以相似的级别参与?

最佳答案

驱动程序将使用接触点作为初始连接点来设置连接池。在此之后,将根据您的架构拓扑、本地平衡策略和池化选项创建池。在此处引用一些有用的文档(抱歉,如果您已经看过这些文档):

http://datastax.github.io/cpp-driver/topics/

http://datastax.github.io/cpp-driver/topics/configuration/

额外的流量很可能是驱动程序使用的控制连接,它使自身与模式拓扑保持同步以帮助驱动程序运行:

http://datastax.github.io/cpp-driver/topics/basics/schema_metadata/

关于c++ - 我应该担心 Cassandra C++ 驱动程序的负载平衡选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40096567/

相关文章:

c++ - Visual Studio c++ 包括字符串最大长度

c++ - 解包 std::reference_wrapper 的成本

c++ - 智能指针列表的段错误

通过网络的 C# 高速 MD5/SHA 散列

cassandra - 在 Cassandra 节点上迁移到增量修复后执行完整修复

java - 更改Groovy使用的JVM版本在Drone.io中构建

c++ - 使用自定义删除器 boost scoped_ptr/scoped_array

linux - 简单通用即插即用 ( uPNP ) 在网络上查找 Raspberry Pi

c++ - 使用 libpqxx 查看网络连接是否丢失

mysql - 关于 Cassandra 与 MySQL 的一些建议