История одной оптимизации сервера

Развиваем сайт: запускаем новые разделы, совершенствуете сервисы, активно работает команда по продвижению — посещаемость растет, увеличивается спрос на платные услуги, увеличивается число объявлений, все отлично. Как вдруг в один прекрасный день захожу на сайт и вижу: «Error 503. Service unavailable» — реакция, ну бывает, скорее всего что-то у хостера. Затем с каждым днем ошибка 503 начинает появляться еще чаще. Через неделю все, кто активно использует систему управления для работы с пользователя начинают жаловаться на постоянные сбои. Дальше больше. Наши внутренние изыскания результат не дали — не хватило компетенций на тот момент. Принимаем решение привлечь специалистов извне.

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

10 ночей с системным администратором

Проанализировав кандидатов на Free-lance.ru, выбрал двух человек. Точнее одна компания из Москвы и один фрилансер из Питера. План простой, сначала делаем аудит, чтобы выявить причины низкой производительности, затем последовательно их устраняем. Сначала я отдал предпочтение компании. У них процессы, хорошо выстроена коммуникация, достойные имена в портфолио.

Начали аудит. Две ночи анализа — результат:

  • у вас высокая нагрузка на БД, надо выносить её на отдельный сервер;
  • высокую нагрузку дает код, вот лог медленных запросов — разработчик разберется;
  • вот договор на настройку двух серверов и на их поддержку с мягко говоря высоким чеком.

30К за настройку обоих серверов и 15К в месяц за их поддержку.

На все попытки конкретизировать проблему и понять по какому критерию принимается решение о переезде был один ответ: «Переезд решит все проблемы, мы сами все настроим с нуля, затем в рамках поддержки мы всё оптимизируем и наступит счастье». Потратив время и деньги, и не получив ответа на свой вопрос, я смущенный навязываемым договоров на поддержку, решил получить мнение второго специалиста. К чести ребят, за время аудита они вычистили нам БД и по их совету мы увеличили объем оперативной памяти, что сделало работу сайта несколько стабильнее.

С фрилансером из Питера мы так же начали с аудита. Он оказался более конструктивен. Выдал листинг проблем с ПО и подробно описал, что необходимо сделать. Оценили работы — сделали. Нагрузка на сервер не стала меньше за счет обновления и настройки ПО. Он начал лучше с ней справляться, но это не решение проблемы. Решением всех проблем опять был обозначен переезд на более мощный сервер и дополнительно меня снова отослали к логу медленных запросов. Несколько приободрившись результатами решили переехать на самый мощный сервер XEON E5 DUAL.

Да, на тот момент мы использовали самый простой сервер XEON E3. Купили второй сервер — две ночи ушло на настройку. Затем пришла очередь переезда. В выходные закрыли текущий сайт и перенесли всё на новый. Оттестировали его вдоль и поперек — все хорошо, и работает вроде бы быстро. Барабанная дробь — переключаем домен на новый сервер — ждем — начал работать — сервер в три раза мощнее, но работает хуже — шок. Надо понимать что это 1 час ночи, на сайте 40-50 человек, а он из 10 страниц открывает 8. Вернули старый сервер и ушли спать.

Нужен процессор помощнее!

На следующий день администратор говорит, что нужен более мощный процессор, у текущего ядер больше, но каждое из ядр слабее на 30%. Я по прежнему в шоке. Две недели поисков решения проблемы коту под хвост. Старый сервер работает лучше нового более мощного. На мои увещевания администратор еще раз всё проверил — всё хорошо — нужен более мощный процессор. На этой безрадостной новости на 11 день я начал искать человека с опытом оптимизации сервера со стороны разработки на высоконагруженном проекте.

Лучший подарок на день рождения

Пробежался по знакомым. Написал секретному человеку, который руководил крупным федеральным сервисом, он посоветовал знакомого разработчика, который занимается оптимизацией этого проекта. Вышел на него, описал все свои заключения и он согласился мне помочь. Договорились в этот же день устроить Skype-сессию в 20:00. В 21:00 назначен семейный ужин в честь моего Дня рождения. До этого две недели бессонных ночей и бесконечных обсуждений тонкостей работы Nginx, Apache и БД, потрачено более 30 000 рублей и нулевой результат, при бурной деятельности. Вот такая диспозиция.

То чувство, когда найден правильный человек.

Наступает 20:00 — созваниваемся. Более мощный процессор? Да вы с ума сошли? Начинаем искать проблему, без надрывов, системный поиск проблемы. Словно вы что-то потеряли в комнате и методично её прочесываете, заглянули под кровать, заглянули под стол, заглянули в шкаф и нашли что искали. Да, высокая нагрузка на процессор, да, это происходит из-за БД, так что у нас с этим логом? А что с этим? Через полтора часа мы составили список:

  • поставить ПО для сбора статистики по работе сервера;
  • заменить ПО для кеширования PHP-кода;
  • изменить одну настройку в одном конфигурационном файле;
  • разнести скрипты запускаемые по Крону;
  • реализовать кеш страниц для неавторизованных пользователей.

Вот так, за какие-то 2 часа, мы как оказалось решили все проблемы. На следующий день мы начали последовательно выстраивать работу с кешем. Первые результаты появились сразу. В итоге за неделю мы выстроили многоуровневую систему кеширования данных, которая позволила нам свести к минимум нагрузку на сервер и создать задел как минимум на двухкратное увеличение посещаемости. От нового сервера в итоге отказались.

Так выглядит нормальная работа сервера.

Вот так не без приключений в течение 15 дней я оптимизировал сервер Spiti, который теперь летает.

Мораль:

  1. оптимизация сервера это на 80% работа с кодом и только на 20% с железом;
  2. администратор всегда будет пытаться вылечить проблему железом и настройками ПО;
  3. разработчик должен знать как работает сервер и самостоятельно оптимизировать код;
  4. не ограничивайтесь одним мнением, если нет ответов на вопросы (нужен план Б);
  5. на сервере всегда должно быть настроено ПО для сбора статистики и ахтунг-уведомления.

Отдельно хочу отметить, прекрасную работу службы поддержки нашего хостера Timeweb, если вы выбираете хостинг, смело могу их рекомендовать.