Назад | Перейти на главную страницу

Защита Magento от ситуаций с высокой посещаемостью

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

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

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

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

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

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

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

Любая идея, как ограничить максимальное количество подключений для каждого клиента или лучше максимальное количество сценариев simultan php на ip ...

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

Разместите свой сайт за CDN с извлечением источника (Cloudflare приходит на ум как один вариант, есть и другие.)

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

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

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

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

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

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

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


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

  1. Делайте меньше HTTP-запросов. По сути, вам следует объединить файлы javascript и CSS в один, чтобы уменьшить накладные расходы, связанные с выполнением нескольких запросов.
  2. Используйте сеть доставки контента (CDN). Я уже говорил об этом ^^ выше ^^, но Ислоу говорит мне, что есть 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. Потому что в этом случае а) ваш сервер Apache обслуживает меньше трафика. б) Он быстрее загружается, поэтому ваши посетители не блокируют процесс Apache надолго.

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

сколько db-tuning вы сделали? magento - это PITA, но его можно настроить на скорость при наличии достаточного количества оперативной памяти.

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

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

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


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

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

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

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

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