Как мне управлять общим количеством соединений с datastax/php-driver
?
Мы сталкиваемся с проблемой избыточных TCP-соединений и подозреваем, что это связано с работой этого драйвера.
Мы переехали YACassandra
Драйвер PDO на этот. Одна из самых больших проблем, которую я обнаружил, — это пул соединений, к которому все серверы в кластере для каждый HTTP поток.
У нас есть 4 коробки в нашем кластере. Это 4 открытых стойкий соединения, в Апач ребенок. Я подозреваю, что это виновник наших неприятностей.
Исторически мы использовали YACassandra PDO, который использовал только 1 соединение на поток.
Как мы это оптимизируем? В любом случае, чтобы остановиться datastax/php-drive
делать обнаружение кластера?
Драйвер автоматически обнаружит узлы в кластере и на основе политики балансировки нагрузки устанавливает соединения с каждым узлом при установлении сеанса (соединения). Чтобы ограничить соединение с конкретным хостом, вы можете использовать политика белых списков; однако это не рекомендуется, так как это побеждает преимущества или запросы маршрутизации в случае недоступности / недоступности хостов. Политика белого списка имеет свое место, но, по моему мнению, главным образом для целей тестирования.
Другая проблема, которая может возникнуть, связана с разветвлением. Проблема в том, что все дочерние и родительские процессы имеют одни и те же базовые сокеты, и для 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
}
Других решений пока нет …