Сбои серверов с 3000 одновременных клиентов - как правильно настроить? PHP и Apache
У меня есть 4 веб-сервера, 2 сервера баз данных (чтение и запись), Redis и балансировщик нагрузки. Я использую PHP 7.0 и Apache2 & MySQL 5.7, однако, когда я выполняю нагрузочные тесты с 3000 пользователей, которые работают одновременно, серверы выходят из строя один за другим.
Серверы Apache сильны, каждый имеет 32 ГБ оперативной памяти, и, к сожалению, все они достигают максимального использования оперативной памяти.
Мы внесли много изменений в код, однако он мне не подходит, мои провайдеры хостинга не могут помочь мне в дальнейшей настройке моего сервера, так как говорят, что это лучшее, что они могут сделать, и здесь мне нужна ваша помощь - что нам не хватает? Какие конфигурации в PHP / Apache / MySQL должны быть установлены?
Я хотел бы уточнить, что сайт хорошо работает, скажем, для 300 клиентов, но по мере того, как все больше и больше клиентов посещают, время ответа достигает 50 секунд на запрос, что действительно странно, как только 400 клиентов заставляют мой сервер реагировать так медленно?
Я действительно в отчаянии и растерянности, на что нам смотреть?
Большое спасибо.
1 ответ
У нас было еще 6000 прошлым летом. Как 4 сервера с балансировщиком нагрузки не обрабатывают такие запросы?
Так что изменилось? Чтобы ответить на этот вопрос, почти всегда это связано с обработкой кода бэкэнда, а иногда и с такими вещами, как исчерпание сокета tcp, а иногда и просто ограничение пула /etc между apache и php.
Следуйте этому процессу:
- Устранить PHP из стека. Предоставляйте только небольшие статические файлы для тестирования.
- Наблюдайте за результатами и настройте apache/OS для размещения желаемых соединений
- Вновь ввести PHP. Сервер не сможет соответствовать производительности обслуживания статических файлов
- Профилируйте ваш код PHP, идентифицируйте замедления и устраните их
- Наконец: кэшируйте все результаты PHP, которые вы можете.
"Как я могу получить неописуемое php-приложение для соответствия x тесту?" это очень широкий вопрос, но процесс, как правило, заключается в том, чтобы ваша статическая сервировка внешнего интерфейса соответствовала вашим требованиям, а затем добавьте свой код бэкенда в набор. Либо ix медлительность в бэкэнд-коде, либо устраните ее.
Как только вы начнете обращаться к тысячам одновременно работающих пользователей... Вы собираетесь преодолеть определенные ограничения (скорость файловой системы, память, скорость процессора, задержка связи, неэффективный код wordpress и медленные вызовы базы данных, а также тонна переключения контекста на процессор) которые собираются и быстро приводят к экспоненциальному снижению качества обслуживания.