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

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

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

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

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

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

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

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

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

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

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

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

Поздравляю с регистрационными номерами, кстати. Ваша проблема - это хорошая проблема.

Вам необходимо использовать «MySQL workbench» для входа на сервер MySQL. После того, как вы вошли в систему как «root» (с localhost, если вы не изменили разрешения, разрешающие удаленный вход), вы сможете увидеть индексы. Затем, если у вас их нет, просто вопрос их создания, и я думаю, это должно иметь довольно хорошую разницу в скорости с вашим приложением. Чтобы помочь с созданием индексов, вам необходимо ознакомиться с инструкциями на ОБЪЯСНИТЕ команда.