Попытка масштабировать мой выделенный сервер для большого трафика

У меня сейчас есть четырехъядерный процессор Xeon, 8 ГБ оперативной памяти и только 2 x 1 ТБ дисков SATA. Я пытаюсь понять, как масштабировать мое приложение, чтобы обрабатывать как можно больше нагрузки и трафика в день. У меня есть сайт промышленной сети, и в настоящее время у него около 30 000 подписчиков в день, 60 тыс. УФ и 600-1 000 000 просмотров страниц в день. Он шел так медленно, что мне пришлось отключить сервер, и теперь я теряю деньги и трафик.

Я почти уверен, что это PHP-код и MySQL-запросы (их наняли из Индии). Что я могу сделать, чтобы оптимизировать и убедиться, что сервер обрабатывает как можно больше трафика без узких мест. Поскольку я ожидаю еще больше регистраций каждый день. Это сайт с большим объемом баз данных, так как это "сетевой" сайт для определенной ниши, и вы должны войти в систему, поэтому все вращается вокруг MySQL.

PS. CentOS 5 64bit, PHP5, MySQL5. Я знаю, что база данных - MyISAM, и я уверен, что они не слишком хорошо проиндексировали таблицы.

Спасибо за совет!

4 ответа

Решение

Есть несколько вещей, которые вы можете сделать и проверить, чтобы дать вам больше информации по этой проблеме и, в свою очередь, решить ее лучше:

  • Вы должны точно выяснить, что делает ваш сервер "медленным". Это максимизирует процессор, не хватает оперативной памяти и использует пространство подкачки, ограничен ли ввод-вывод и т. Д...? У каждого из них есть свое решение, поэтому вам нужно знать, в чем проблема, прежде чем пытаться ее решить. Тратить время на исправление базы данных, когда реальной проблемой является просто плохая конфигурация Apache, было бы огромной тратой времени и ресурсов.
  • Некоторая форма мониторинга будет полезна. Это может быть что-то простое, как sar или более полный пакет, такой как Nagios/Zabbix. Это поможет вам как сузить причину, так и позже, чтобы увидеть, насколько эффективны (или нет) ваши решения. В идеале вы хотите заранее масштабировать, прежде чем вам это действительно нужно.
  • Убедитесь, что вы используете кэш операционного кода PHP (APC, eAccelerator и т. Д.).
  • Попробуйте включить или выключить кэш запросов MySQL. Приложение с интенсивным чтением, скорее всего, выиграет, в то время как интенсивное чтение может выиграть. Мониторинг статистики кэша запросов позволит вам узнать, помогает ли это или причиняет вред.
  • Попробуйте уменьшить MaxClients в Apache ограничить количество пользователей и, надеюсь, снизить нагрузку на сервер. Это может сделать ваш сайт хотя бы частично доступным и пригодным для использования.
  • Вы делали какие-либо изменения в конфигурации MySQL? Конфигурация по умолчанию, в которую он обычно входит, не предназначена для сайта с "db-heavy", и вы можете увидеть значительный выигрыш, настроив несколько значений. Ищите здесь и в Интернете различные ресурсы по редактированию конфигурации.
  • Проверьте, сколько памяти использует MySQL top, Если ваше приложение действительно много пишет, я бы ожидал / хотел бы увидеть его с использованием по крайней мере 1 ГБ, если не больше, в зависимости от размера вашей базы данных. Если он использует только несколько 100 МБ или 6-7 ГБ, вероятно, существует проблема конфигурации.
  • Создать индексы для таблиц MySQL легко... сложная часть состоит в том, чтобы выяснить, какие индексы вам нужны, и какую пользу они получат, если таковые будут. Это где опытный профессионал может окупиться быстро (при условии, что проблема действительно на уровне базы данных).
  • Масштабирование на несколько машин может быть хорошим вариантом, если вам нужно быстро вернуть свой сайт в рабочее состояние. Разместите базу данных на одной машине и Apache на другой. Это также быстро подскажет вам, какое у вас узкое место, если один или машина достигает высокой нагрузки. Сервер Apache, вероятно, можно масштабировать на несколько машин за балансировщиком нагрузки, а базу данных можно кластеризовать или масштабировать на более крупную машину, если это необходимо. Надлежащий анализ и оптимизация вашего приложения и оборудования может быть дешевле в долгосрочной перспективе, но иногда вам просто нужно заставить его работать вчера. Это также, где профессионал может сэкономить вам много времени и головных болей при быстром начале работы.
  • Когда (или если) вы вернетесь в онлайн, было бы хорошо иметь какую-то форму мониторинга и сравнительного анализа. Знание ваших лимитов и ваших текущих / средних параметров позволит вам масштабироваться до сбоя вашего сервера.

Надеюсь, это поможет и удачи!

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

Мы можем дать вам множество советов, но правильная настройка такого сайта - это работа, которая требует опыта и не может быть решена с помощью нескольких вопросов по ServerFault.

Вам необходимо использовать "MySQL Workbench" для входа на сервер MySQL. Когда вы вошли в систему как "root" (от localhost, если вы не отредактировали разрешения, чтобы разрешить удаленный вход в систему), вы сможете увидеть индексы. Затем, если у вас их нет, это просто вопрос их создания, и я думаю, что это должно иметь довольно хорошую разницу в скорости с вашим приложением. Чтобы помочь с созданием индексов, вам необходимо ознакомиться с инструкциями по команде EXPLAIN.

В зависимости от вашего денежного потока, очень быстрое (и грязное) исправление может потребовать от вашей хостинговой компании обновить вас до сервера SAS/SCSI, который также выведет вас в категорию корпоративных серверов. Большие диски SATA работают медленно, и ваш сервер может быть великолепен для процессора, но отвратителен при вводе-выводе.

Поздравляю с регистрацией номера между прочим. Ваша проблема - это хорошая проблема.

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