Задать вопрос
delef
@delef
Разработчик (Crystal, Python, Ruby, PHP, JS)

Псевдо-персистентное соединение в PHP, возможно ли?

Доброго всем дня!

Почему "псевдо-персистентное"? Потому, как "PHP рождён, чтобы умирать". Именно поэтому я хочу найти способ, хоть каким-то образом держать соединения хоть какое-то время.

Сейчас около 500 RPS, и приходится держать у PGSQL ~6к соединений, большой таймаут использовать не хочу т.к. эти ограничения не всегда хороши. Подскажите, как я могу выйти на ~10? Хотя ладно, на 50 в пулле соединений и переключаться налету между ними?

P.S.
такое ощущение, что этот код вообще не работает:
new \PDO($dsn, $user, $password, [
  \PDO::ATTR_PERSISTENT => true
]);
  • Вопрос задан
  • 558 просмотров
Подписаться 2 Оценить 3 комментария
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Используйте pgbouncer.
Лучше всего в режиме transaction пула. Тогда backend postgresql будет выдаваться соединениям от приложения только на время выполнения транзакции. Что позволяет и очень эффективно утилизировать лишь небольшое число процессов postgresql и сохранить возможность транзакционной работы. В режиме транзакций не работают prepared statements, но PDO их и так эмулирует, так что проблемой это не является.

pgbouncer легко держит тысячи открытых соединений с приложением, легко их открывает и закрывает, развлечения начинаются при попытке прокачать через баунсер с гигабит трафика (и обходится банально запуском второго баунсера тут же на другом порту). Обычно размещается на машине непосредственно с базой на 6432 порту.
И вообще-то является фактическим стандартом для инсталляций postgresql.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Akdmeh
@Akdmeh
PHP, Yii2, Music
Теоретически вам могло бы помочь reactphp.org
На практике тяжело сказать, что это будет решением вашей проблемы на 100%.
Я бы скорее смотрел в сторону либо другого языка программирования (Node.JS, Go, Python, Java...) либо экстенсивным методом (добавлять дополнительные сервера и балансировать нагрузку)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект