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

Отделение MySQL-сервера от веб-сервера

Привет, сообщество ServerFault!

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

Я создаю веб-приложения (обычно от малого до среднего размера с низким трафиком), и в настоящее время у меня есть 3 виртуальные машины, работающие на Debian и обслуживающие веб-файлы через Apache и данные с MySQL. Каждый VPS обслуживает от 10 до 30 сайтов; несколько пользовательских приложений, несколько Wordpress и несколько статических HTML-сайтов.

Благодаря новому облачному сервису, с которым я играю (в настоящее время он находится в стадии бета-тестирования, поэтому он бесплатный!), У меня есть возможность запускать / останавливать и масштабировать серверы по своему усмотрению. Первый эксперимент в моем списке - заменить Apache на Nginx, и пока все идет хорошо. Однако я начинаю задаваться вопросом, будет ли какая-то польза от того, что один сервер будет «оптимизирован» для обслуживания файлов через Nginx и хранения медиафайлов, а затем другой сервер будет «оптимизирован» для запуска и обслуживания данных через MySQL.

Я не знаю, много ли вы могли бы сделать для оптимизации каждого сервера для веб-хостинга или хостинга баз данных, или есть ли какие-то другие большие преимущества в разделении служб? Буду признателен за любые мысли / комментарии по этому поводу и любые другие варианты, которые я мог пропустить.

Примечание: Используя облачный сервис, у меня есть возможность полностью настроить серверы на лету, включая память, дисковое пространство и скорость диска (SATA, SAS, SSD).

В общем-то

  • БД хотят, чтобы их данные находились в памяти и ЦП как можно больше (если не все), скорость жесткого диска менее важна.
  • HTTPD требует ввода-вывода жесткого диска, поскольку файлы обслуживаются с диска.

Если вы можете указать любой тип сервера, то я не вижу причин, по которым вы не могли бы создавать серверы с высокими техническими характеристиками и запускать как DB, так и HTTPD на одном компьютере, хотя, помимо затрат, я думаю, что это основные преимущества и недостатки:

Преимущества

  • Нагрузка на одно не влияет на другое
  • Возможность независимого масштабирования по мере необходимости
  • Настройки ядра могут быть применены к конкретной задаче
  • Спецификация машин, соответствующих потребностям (DB = RAM, HTTPD = SSD)
  • Легче настроить / управлять (мое мнение)
  • В будущем будет проще перейти на CDN [?]
  • Изолированные машины означают меньшее количество потенциально скомпрометированных из-за нарушения безопасности

Недостатки

  • MySQL TCP / IP против Unix SOCK (задержка БД)
  • В два раза больше точек отказа

Неуверенный в том, где подходит стоимость (что дороже).

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

Личная заметка: Мы запускаем VMware как в центре обработки данных (аренда блейдов), так и локально. Я предпочитаю держать DB / HTTPD отдельно. У нас есть отдельные виртуальные машины DB / HTTPD в центре обработки данных, но не локально. Я предпочитаю первое, и хотя у меня нет статистики, виртуальные машины в центре обработки данных работают с гораздо более низкими характеристиками, чем наши комбинированные виртуальные машины HTTPD / DB локально с меньшими проблемами производительности.