Сбои серверов с 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.

Следуйте этому процессу:

  1. Устранить PHP из стека. Предоставляйте только небольшие статические файлы для тестирования.
  2. Наблюдайте за результатами и настройте apache/OS для размещения желаемых соединений
  3. Вновь ввести PHP. Сервер не сможет соответствовать производительности обслуживания статических файлов
  4. Профилируйте ваш код PHP, идентифицируйте замедления и устраните их
  5. Наконец: кэшируйте все результаты PHP, которые вы можете.

"Как я могу получить неописуемое php-приложение для соответствия x тесту?" это очень широкий вопрос, но процесс, как правило, заключается в том, чтобы ваша статическая сервировка внешнего интерфейса соответствовала вашим требованиям, а затем добавьте свой код бэкенда в набор. Либо ix медлительность в бэкэнд-коде, либо устраните ее.

Как только вы начнете обращаться к тысячам одновременно работающих пользователей... Вы собираетесь преодолеть определенные ограничения (скорость файловой системы, память, скорость процессора, задержка связи, неэффективный код wordpress и медленные вызовы базы данных, а также тонна переключения контекста на процессор) которые собираются и быстро приводят к экспоненциальному снижению качества обслуживания.

Другие вопросы по тегам