Защита Magento от ситуаций с большим трафиком

Защита Magento от ситуаций с большим трафиком

Привет, у меня есть сервер Apache 2.2 со скриптами PHP (Magento).

В обычном режиме PHP-страница отображается за 1-2 секунды, что нормально.

Иногда при высоком трафике или неэффективных ботах-пауках все слоты Apache блокируются.

Отдельные запросы выполняются очень медленно и используют все больше и больше памяти, пока MySQL не вызовет oom-killer, который убивает мой нуждающийся tomcat.

Сначала я попробовал mod_evasive. Но если я настрою его слишком строго, я не смогу просматривать страницы мгновенно, если я настрою его слишком свободно, то запросы могут приходить быстрее, чем они могут быть обработаны.

Проблема в файлах php. Другие ресурсы, такие как изображения и т. д., не будут загораживать слоты.

Во-вторых, я попытался ограничить его, уменьшив MaxClients. Но теперь один клиент может заблокировать все слоты.

Есть идеи, как ограничить максимальное количество подключений на одного клиента или, лучше сказать, максимальное количество одновременных PHP-скриптов на один IP...

Как настроены другие клиенты Apache, чтобы избегать большего количества запросов, чем они могут обработать, не отдавая предпочтения ни одному клиенту?

решение1

Поместите свой сайт в сеть CDN с исходным кодом (Клаудфлерприходит на ум как один из вариантов, есть и другие.)

В обычном режиме PHP-страница отображается за 1-2 секунды, что нормально.

Нет, это не так.

Оптимизируйте свой код, чтобы он не занимал много времени.двасекунд для создания страницы.

Затем кэшвсевещи.

  • Кэшировать запросы страниц с помощьюЛак
  • Кэширование поиска в базе данных с помощью Memcached.
  • Кэшируйте изображения на CDN.
  • Кэшируйте уровень PHP с помощью APC или eAccelerator (или аналогичного кэша опкодов)
  • Кстати, кэшируйте целые страницы на CDN.

Если вы еще этого не сделали, выделите свой сервер базы данных на отдельный сервер, дайте ему метрическую кучу памяти и сверхбыстрые диски, а затем кэшируйте все свои таблицы. Magento — это шлюха, когда дело касается соединений и т. д., поэтому вам понадобится, чтобы ваш сервер базы данных был мучительно быстрым.

Таким образом, когда пользователь просматривает ваш сайт, контент будет извлечен из кэша.где-тои не должны быть сгенерированыкаждыйвремя.


Я взял на себя смелость запустить Yslow против вашего сайта. Вот сводка результатов (хотя, вам следует сделать это самостоятельно..)

  1. Делайте меньше HTTP-запросов. По сути, вам следует объединить файлы JavaScript и CSS в один, чтобы сократить накладные расходы, связанные с необходимостью выполнения нескольких запросов.
  2. Используйте сеть доставки контента (CDN). Я уже говорил это ^^выше^^, но Yslow говорит мне, что есть60статические компоненты не на CDN. 1,4 МБ из них поступают с www.brainyoo.de. Что подводит меня к..
  3. Перемещайте активы на несколько доменов без файлов cookie.60 ресурсов загружаются с того же домена, что и остальная часть сайта. Это означает, что браузеру приходится ждать загрузки каждого из них, прежде чем загружать следующий. Обычный способ обойти это — разместить статические ресурсы на отдельных доменах без cookie-файлов (чтобы запрос был меньше, быстрее и не содержал информацию cookie-файлов).
  4. Переместите Javascript в конец документа. Считается лучшей практикой для масштабируемых и быстрых веб-сайтов.
  5. Сократите Javascript и CSS. Серьёзно. Вы отправляете почти мегабайт JS и CSS, которые можно минифицировать и...
  6. Сжатие компонентов с помощью Gzip.Существует 39 текстовых компонентов, которые можно сжать с помощью gzip.
  7. Добавьте заголовки Expires. Имеется 63 статических файла без отдаленного срока действия, поэтому они не кэшируются браузером эффективно.

Total YSlow Grade D. Я начинаю сомневаться, не связаны ли ваши проблемы полностью с сервером, но могли бы чертовски хорошо повозиться с ним и поднять свой рейтинг YSlow. Потому что таким образом a) меньше трафика обслуживается вашим сервером Apache. b) Он быстрее загружается, поэтому ваши посетители не блокируют процесс Apache так долго.

решение2

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

Насколько вы настраивали базу данных? Magento — это PITA, но его можно настроить для быстрой работы, если у вас достаточно оперативной памяти.

используйте такой инструмент, какmysql_tunerилиучебник по настройке mysqlдля настройки вашей базы данных.

и используйте как можно больше кэша. Я не помню, поддерживается ли APC; memcache лучше.

Вам также следует следить за IOWAIT, который является признаком очень плохой производительности HD, что может иметь разные причины.


РЕДАКТИРОВАТЬ:

Как настроены другие клиенты Apache, чтобы избегать большего количества запросов, чем они могут обработать, не отдавая предпочтения ни одному клиенту? / Я хочу знать, как другие клиенты Apache справляются с ситуацией, когда они получают больше запросов, чем могут обработать

Обычно вы масштабируете свою настройку в зависимости от ожидаемого трафика. Если ваш сервер выходит из строя, когда на него нападают поисковые роботы и сканеры, то либо у вас есть какие-то очень плохо работающие скрипты, либо ваш сервер слишком мал.

когда я ожидаю 1000 пользователей на своем сервере, я использую сервер, который может обработать 5000 клиентов (и я отслеживаю error.log на предмет достижения max_clients)

Ограничение скорости возможно, но вы получите тот же опыт, что и с mod_evasive. Это действительно помогает в плане DDOS, но НЕ если вам нужно настраивать свои настройки.

Связанный контент