над одним POC, где есть один общий расшареный PHP-fpm бекэнд и большая куча Nginx фронтендов с fast-cgi proxy (на совсем других машинах либо контейнерах).
Все настроено прекрасно работает и вроде бы POC прошел на отлично, но если бы не один вопрос.
А мы хотим предоставить фиксированное количество php-fpm child процессов для фронт энда.
Этого можно добиться с nginx?
—-
то есть по логике нужен какой-то connection limit на fast-cgi proxy
Можно попробовать параметр max_conns у директивы server в блоке upstream. Но, если у вас несколько nginx, а бекенд один и квота на нем суммарная для всех nginx, то задача на стороне этих nginx не решится. Кажется, не должно быть сложно сделать на fpm отдельный пул только для этих nginx и лимитировать в нем количество воркеров. Отдельный вопрос: что должен делать nginx, которому не хватает квоты? Ждать или возвращать ошибку клиенту?
ок разверну всю идею. Текущая инфраструктура бегает на вм-ках на LXC (линукс контейнеры). На машине стоит Нгинкс в качестве прокси и проксирует реквесты на nginx, который в контейнере. Там же есть и php-fpm с ограничением по Children Управление этой инфрой чистый кошмар, нужно какое-то более гибкое решение, чтобы во-первых легче было обновлять контейнеры ну и скейлиться динамично. Я сделал следующее на кубике - поставил отдельный деплоймент для ФПМ... он висит на 2-ух node-pool-ах с дорогими и постоянными машинами и второй пул динамичный на дешевых preemptible машинах. То есть при нагрузке фпм будет скейлиться на дешевые машины и получается нехилая экономия. Nginx поды же висят на постоянных и дорогих машинах так как их мало и для них нужна макимальная доступность. Можно конечно вообще сделать мультиконтейнерную поду с нгинкс и пхп и в каждой поде иметь индивидуальные настройки и для нгинкс и для фпм , но я уже не смогу в таком случае эффективно использовать preemptible машины
Обсуждают сегодня