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

Предотвращение тяжелого запроса к серверу для перегрузки Apache / Mysql

У меня есть несколько вопросов о понимании высокой нагрузки на сервер и реализации некоторого типа балансировки нагрузки в общем сценарии с такими решениями, как Apache, MySQL и PHP 5.

Я сторонник в этом вопросе и хотел бы узнать ваше мнение, так как я много читал и полностью потерял возможные продукты или методы для реализации простого и, если возможно, бесплатного решения:
Нужны предложения / мнения о балансировке нагрузки + некоторые технические вопросы!
https://blogs.oracle.com/oswald/entry/easy_http_load_balancing_with

Представьте себе простой пример, когда одновременно подключены только 1 сервер и два пользователя, Пользователь А и Пользователь B.

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

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

Большое вам спасибо и извините, если мой вопрос неверен в некоторых концепциях. Не стесняйтесь добавлять любые советы, полезные книги или свой собственный опыт работы с серверами и приложениями.

Короткий ответ: если вы хотите предотвратить перегрузку сервера тупыми запросами, просто предотвратите тупые запросы.

Длинный ответ:

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

Но лучшим решением по-прежнему является анализ запросов и решение для каждого запроса, если:

  1. он должен быть запущен без каких-либо дополнительных действий
  2. его следует пропустить с сообщением об ошибке
  3. его нужно отправить на другой сервер; это своего рода прогнозирующая балансировка

Сейчас, чтобы мы могли помочь вам более подробно, вы можете поделиться с нами более подробной информацией, такой как структура БД, типы запросов и т. д. Мы могли бы найти какой-нибудь алгоритм для переключения между 3 случаями.

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

  • Установите максимальную и минимальную пропускную способность, чтобы предотвратить перегрузку сервера.
  • Автоматическое определение нагрузки на сервер и автоматическое ограничение для каждого пользователя в зависимости от нагрузки на сервер. Вероятно, эта функция более сложная, и я не знаю, есть ли какой-нибудь мод Apache, который имеет эту функцию.

Нашел эти модули Apache:

  • Мод Apache чб
  • Регулирование модов Apache
  • Квота модов Apache

Альтернатива mod_throttle

Конечно, в первую очередь нужно предотвратить перегрузку MySQL простым запросом. Можно также установить квоты, реализовать балансировку нагрузки и обнаруживать и запрещать неверные или перегрузочные запросы, как вы объяснили.