通过datastax / php-driver管理连接

时间:2017-12-12 00:56:41

标签: php cassandra datastax-php-driver

如何管理datastax/php-driver的连接总数?

我们遇到了TCP连接过多的问题,我们怀疑它与此驱动程序的工作方式有关。

我们已将YACassandra PDO驱动程序移至此处。我发现的最大问题之一是连接池将连接到群集中的所有服务器,用于每个 HTTP线程。

我们的群集中有4个盒子。这是4个开放持久性连接,每个 Apache子级。我怀疑这是我们麻烦的罪魁祸首。

从历史上看,我们使用的是YACassandra PDO,每个线程只使用1个连接。

我们如何优化这个?反正是否阻止datastax/php-drive进行群集发现?

1 个答案:

答案 0 :(得分:0)

驱动程序将自动发现群集中的节点,并根据负载平衡策略在建立会话(连接)时建立与每个节点的连接。要限制与特定主机的连接,您可以使用whitelist policy;但是不建议这样做,因为这会在主机关闭/不可用时失去优势或路由请求。白名单政策有其自己的位置,但在我看来主要用于测试目的。

可能发生的另一个问题是分叉。问题是所有的子进程和父进程共享相同的底层套接字,并且没有一种可移植的方式让php驱动程序来处理这个问题。以下是在分叉时如何在应用程序代码中处理此问题的示例:

$cluster = Cassandra::cluster()->build();

// fork!

if ($pid) { // parent process
    $session = $cluster->connect();

    // do parent stuff
} else { // child process
    $session = $cluster->connect();

    // do child stuff
}
相关问题