Datastax Cassandra C++ 驱动程序中核心连接和 i/o 线程之间的区别

difference between core connections and i/o threads in Datastax Cassandra C++ driver

我使用 cass_cluster_set_max_connections_per_host() 设置每个主机的核心连接数,使用 cass_cluster_set_num_threads_io() 设置 i/o 个线程。 我看到我的客户主机正在建立, core connections * num i/o threads,使用 netstat 命令与我集群中每个主机的 tcp 连接数。我想知道 i/o 线程和核心连接有什么区别?此外,如果客户端正在与 10 台主机的 Cassandra 集群通信,并且核心连接数设置为 2,i/o 线程设置为 4,那么基本上有 10*4*2,从主机到 80 个连接建立集群 - 这一切都在一个会话中,这些连接是如何利用的?不觉得很奇怪吗?

我正在尝试调整这些值,以便如果一个集群同时由 100 台主机连接,则速度不会减慢。还是这些设置与速度无关?如有更多信息或链接,我们将不胜感激!

这是当前字段的官方文档here

cass_cluster_set_num_threads_io :这是将处理查询请求的线程数。默认值:1

cass_cluster_set_max_connections_per_host:设置每个IO线程中与每个服务器建立的最大连接数。默认值:2

I am wondering what is the difference between an i/o thread and a core connection?

I/O线程基本上负责做Client和Server之间的所有网络操作。因此,如果您有 1000 条消息等待网络操作,该线程将一条一条地挑选请求并执行它们。默认值为 1。

一旦 I/O 线程选择了一条消息,它就会使用 set_max_connections 中指定的连接来发出请求。默认值为 2,因此 I/O 线程可以根据服务器延迟和吞吐量智能地切换连接。

I am trying to tune those values so if a cluster is connected by 100 hosts simultaneously then the speed wouldn't slow down.

您可以保持最大连接数不变并增加 i/o 线程的数量,或者反过来进行扩展。两者之间没有明确的更好方法。您将需要进行基准测试并查看哪种方法适用于您的案例。

我认为,如果您的请求数量较少,但请求数量很大,那么增加连接数量会更有意义,但它仍然需要进行基准测试。

This link 还提供了一些额外的信息。