我是否应该担心Cassandra c++驱动程序的负载平衡选择?
Should I be worried about the load balancing choices of the Cassandra C++ driver?
我有一个4个节点的小型Cassandra集群,运行Cassandra 3.9。
我将4个IP地址传递给connect()
函数,当我检查与netstat -a4n | grep 9042
的连接时,我可以看到它们都连接了。请注意,我是否通过1个IP或4到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
(6856/2736 = 2.51 and 13581751/806023 = 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/相关文章:
- 具有内存顺序的原子负载存储
- 堆栈问题(平衡表达式问题集)
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 二叉树结构平衡,使用递归时EXC_BAD_ACCESS
- 我正在尝试制作一个自平衡机器人,但编译时存在错误。我不知道如何解决它
- 迭代器范围的平衡分区,没有LegacyRandomAccessIterator
- 如何使用boost/beast从HTTP POST请求中解析和提取有效负载?
- 使用堆栈从黑客等级中解决平衡括号检查的错误
- 如何从标头确定有效负载大小?
- 错误 - 自定义数据类型作为有效负载,带有提升::几何
- C++如何在宏调用后平衡括号?
- 签入二叉树的函数是平衡C++
- 我应该将哪种有效负载类型发送给webrtc::P ayloadRouter的构造函数?
- 检查BST中每个节点的平衡因子并将其存储在节点中
- OpenMP C++:并行化 for 循环的负载不平衡
- 如何在 C++ 中使用 MPI 对简单循环进行负载平衡
- 了解C++应用程序负载平衡
- 我是否应该担心Cassandra c++驱动程序的负载平衡选择?
- 分区是一个类似生活游戏的程序,用于负载平衡的并行计算