了解 Cassandra 池选项(setCoreConnectionsPerHost 和 setMaxConnectionsPerHost)?

Understand Cassandra pooling options (setCoreConnectionsPerHost and setMaxConnectionsPerHost)?

我最近开始使用 Cassandra,并且正在阅读有关连接池的更多信息 here。我对池大小感到困惑,无法理解这里的含义:

poolingOptions
    .setCoreConnectionsPerHost(HostDistance.LOCAL,  4)
    .setMaxConnectionsPerHost( HostDistance.LOCAL, 10)
    .setCoreConnectionsPerHost(HostDistance.REMOTE, 2)
    .setMaxConnectionsPerHost( HostDistance.REMOTE, 4)
    .setMaxRequestsPerConnection(2000);

下面是我想详细了解的:

  1. 我想知道setCoreConnectionsPerHostsetMaxConnectionsPerHostsetMaxRequestsPerConnection是什么意思?
  2. 这里的LOCALREMOTE是什么意思?

如果有人能举例说明,那真的会帮助我更好地理解。

我们有一个 6 节点集群,所有节点都在一个 dc 中,RF 为 3,我们 read/write 作为本地仲裁。

Cassandra 协议允许通过同一网络连接并行提交执行多个查询,而无需等待答案。 setMaxRequestsPerConnection 设置一个连接中可以同时进行多少个正在进行的查询 - 最大限制取决于协议,并且自协议 v3 以来,它是 32k,但实际上你需要将它保持在 1000-2000 左右 - 如果你有更多,则表明服务器未跟上您的查询。

驱动程序正在打开与集群中每个节点的连接,并且这些连接被标记为 LOCAL - 如果它们是到应用程序本地的数据中心中的节点(要么明确设置负载平衡策略,或从第一个联系点推断),或者如果它们是针对其他数据中心中的节点,则为 REMOTE

此外,驱动程序可以打开多个节点连接。并且有 2 个值控制它们的数量:core - 最小连接数,以及 max - 上限是多少。如果您提交不符合现有限制的新请求,驱动程序将打开新连接。

所以在你的例子中:

poolingOptions
    .setCoreConnectionsPerHost(HostDistance.LOCAL,  4)
    .setMaxConnectionsPerHost( HostDistance.LOCAL, 10)
    .setCoreConnectionsPerHost(HostDistance.REMOTE, 2)
    .setMaxConnectionsPerHost( HostDistance.REMOTE, 4)
    .setMaxRequestsPerConnection(2000);
  • 对于本地数据中心,最初每个节点会打开 4 个连接,可能会增长到 10 个连接
  • 对于其他数据中心,它将打开 2 个连接,最多可增加到 4 个连接