cassandra — Управление соединениями через datastax / php-драйвер

Как мне управлять общим количеством соединений с datastax/php-driver?

Мы сталкиваемся с проблемой избыточных TCP-соединений и подозреваем, что это связано с работой этого драйвера.

Мы переехали YACassandra Драйвер PDO на этот. Одна из самых больших проблем, которую я обнаружил, — это пул соединений, к которому все серверы в кластере для каждый HTTP поток.

У нас есть 4 коробки в нашем кластере. Это 4 открытых стойкий соединения, в Апач ребенок. Я подозреваю, что это виновник наших неприятностей.

Исторически мы использовали YACassandra PDO, который использовал только 1 соединение на поток.

Как мы это оптимизируем? В любом случае, чтобы остановиться datastax/php-drive делать обнаружение кластера?

0

Решение

Драйвер автоматически обнаружит узлы в кластере и на основе политики балансировки нагрузки устанавливает соединения с каждым узлом при установлении сеанса (соединения). Чтобы ограничить соединение с конкретным хостом, вы можете использовать политика белых списков; однако это не рекомендуется, так как это побеждает преимущества или запросы маршрутизации в случае недоступности / недоступности хостов. Политика белого списка имеет свое место, но, по моему мнению, главным образом для целей тестирования.

Другая проблема, которая может возникнуть, связана с разветвлением. Проблема в том, что все дочерние и родительские процессы имеют одни и те же базовые сокеты, и для 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
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]