У меня есть веб-приложение, написанное на Laravel / PHP, которое находится на ранних стадиях и обычно обслуживает около 500 - 600 запросов / мин . Мы используем Maria DB и Redis для кэширования, и все на AWS.
Для событий, которые мы хотим продвигать на нашей платформе, мы рассылаем push-уведомление (мобильная платформа) всем пользователям, что приводит к примерно 2-минутному всплеску трафика, который приводит нас к 3,5 тыс. Запросов / мин
В нашем текущем масштабе сервера это полностью перегружает ЦП серверов приложений, которые обычно работают при 10% ЦП . Базы данных и кластеры Redis выглядят хорошо во время этого взрыва.
Глядя на журналы, кажется, что все процессы рабочего пула PHP-FPM заняты и начинают ставить в очередь запросы от восходящего потока Nginx.
В настоящее время у нас есть:
три сервера m4.large (2 ядра, 8 ГБ ОЗУ каждый)
динамическое управление процессами PHP-FPM с максимумом 120 дочерних процессов (серверы) в каждом блоке
Мои вопросы:
1) Должны ли мы увеличить пул FPM? Кажется, что в отношении памяти, мы, вероятно, приближаемся к нашему пределу
2) Должны ли мы уменьшить пул FPM? Кажется возможным, что мы запускаем так много процессов, что процессор зависает и не может по-настоящему завершить ни один из них. Интересно, если бы мы получили лучшие результаты с меньшими затратами.
3) Должны ли мы просто использовать большие коробки с большим количеством ОЗУ и ЦП, что позволит нам добавить больше рабочих FPM?
4) Есть ли какие-либо настройки производительности FPM, которые мы должны рассмотреть? Однако мы используем Opcache, стоит ли нам переходить на статическое управление процессами для FPM, чтобы сократить накладные расходы на процессы, вращающиеся вверх и вниз?