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

dra*_*ons 3 cassandra datastax-java-driver

最近,我开始与卡桑德拉工作,我正在读更多的连接池这里。我对池大小感到困惑,无法理解这是什么意思:

poolingOptions
    .setCoreConnectionsPerHost(HostDistance.LOCAL,  4)
    .setMaxConnectionsPerHost( HostDistance.LOCAL, 10)
    .setCoreConnectionsPerHost(HostDistance.REMOTE, 2)
    .setMaxConnectionsPerHost( HostDistance.REMOTE, 4)
    .setMaxRequestsPerConnection(2000);
Run Code Online (Sandbox Code Playgroud)

以下是我想详细了解的内容:

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

如果有人可以用一个例子来解释,那么它真的会帮助我更好地理解。

我们在一个 DC 中有 6 个节点集群,RF 为 3,我们作为本地仲裁读/写。

Ale*_*Ott 5

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);
Run Code Online (Sandbox Code Playgroud)
  • 对于本地数据中心,最初每个节点会打开 4 个连接,可能会增长到 10 个连接
  • 对于其他数据中心,它将打开 2 个连接,最多可以增长到 4 个连接