0

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

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

我们已经将YACassandraPDO 驱动程序移到了这个驱动程序上。我发现的最大问题之一是连接池将为每个HTTP 线程连接到集群中的所有服务器。

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

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

我们如何优化它?无论如何要停止datastax/php-drive进行集群发现吗?

4

1 回答 1

0

驱动程序会自动发现集群中的节点,并在会话(连接)建立时根据负载均衡策略与每个节点建立连接。要限制与特定主机的连接,您可以使用白名单策略;但是,不建议这样做,因为这会在主机关闭/不可用的情况下破坏好处或路由请求。白名单政策有它的位置,但在我看来主要是为了测试目的。

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

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

// fork!

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

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

    // do child stuff
}
于 2017-12-12T15:56:24.693 回答