【问题标题】:difference between core connections and i/o threads in Datastax Cassandra C++ driverDatastax Cassandra C++ 驱动程序中核心连接和 i/o 线程之间的区别
【发布时间】:2019-07-25 04:53:13
【问题描述】:

我使用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 台主机连接,那么速度不会减慢。或者这些设置与速度无关?任何更多信息或链接表示赞赏!

【问题讨论】:

  • "10k hosts" - 这是雄心勃勃的
  • 我的意思只是强调多个客户端而不是确切的主机数量,无论如何我已经修改了这个问题。

标签: c++ cassandra datastax


【解决方案1】:

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

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

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

我想知道 i/o 线程和 核心连接?

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

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

我正在尝试调整这些值,因此如果集群连接了 100 同时主机,那么速度不会减慢。

您可以保持最大连接数不变并增加 i/o 线程数,或者以其他方式进行缩放。两者之间没有明确的更好方法。您需要进行基准测试,看看哪种方法适合您的情况。

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

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

【讨论】:

  • 感谢@Abhishek,您的解释很有道理。我通过保持核心连接不变和不同数量的 i/o 线程进行了一些速度/可扩展性测试,反之亦然,但没有看到任何显着差异。也许不同的主题 - 你知道为什么 8 kb blob 的行比 16 字节的 blob 的速度要高得多吗?
  • 我需要更多详细信息来回答它,例如表架构、查询类型等,所以您可能应该将其作为一个单独的问题提出。如果您认为此问题已得到解答,您可以接受此问题作为已回答。
猜你喜欢
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 2014-03-27
  • 2023-03-21
  • 2023-03-25
  • 2017-05-17
  • 1970-01-01
  • 2021-02-09
相关资源
最近更新 更多