Всем привет! Меня зовут Гайк Даллакян, я один из основателей «Кода Дурова» и курирую сразу несколько проектов в нашем издании. Один из них, наша боль и одновременно наша гордость — сайт kod.ru. Мы запустили его полтора года назад и за это время столкнулись с огромным количеством проблем. Об одной из них я расскажу вам в этом материале.
Запуская наш сайт в 2018 году, мы никак не думали, что он может получить такой большой трафик. В нашей команде нет системных администраторов или разработчиков, а сайт хотелось развернуть быстро и безболезненно. Мы создали аккаунт на DigitalOcean и запустили самую простую виртуальную машину — на ней и крутился сайт. Она стабильно справлялась с теми нагрузками в первый год, но потом начались проблемы.
- Во-первых, за прошедшие несколько месяцев мы увеличили аудиторию сайта более чем в два раза, в ноябре 2019 года мы показали рекордные для нас 500 000 просмотров;
- Во-вторых, наш сайт начал подвергаться DDoS-атакам. К серверу одновременно поступали порядка 300-500 запросов в секунду в течении пары часов, и он стабильно падал и оставался недоступен до 4,5 часов.
И конечно, мы приняли решение справиться с нашим проблемами самостоятельно.
- В первую очередь, мы обновили нашу виртуальную машину на DigitalOcean — увеличили количество ядер и оперативную память в двое, это должно было помочь справляться с нагрузкой на сайт.
- Далее мы создали специальные правила для Firewall в CloudFlare. Всех пользователей не из основных стран, посещающих kod.ru, мы переводили на сайт с капчей — это должно было предотвратить DDoS-атаки. Ну и конечно, во время самой атаки мы включали режим Under Attack Mode.
Спойлер: это всё нам не помогло, а лишь усугубило ситуацию.
В первое время мы смогли таким образом защищаться от атак, но потом обнаружилась новая проблема. Посещаемость сайта упала на 10-15% и на это есть свои причины.
- Во-первых, нас стали хуже индексировать поисковики из-за того, что общая производительность сайта уменьшилась, страницы стали загружаться гораздо медленнее.
- Во-вторых, капча срабатывала и на рядовых пользователей, мы получили за эти несколько недель пару десятков писем от огорчённых читателей, которые вынуждены вводить капчу по десять раз в день.
DDoS-атаки не прекратились, нас атаковали по ночам, когда вся редакция видела сладкие сны. А на утро мы судорожно смотрели на ошибку 520 и пытались сами всё починить, перезагружая CMS и изменяя настройки CloudFlare.
Долго продолжаться это не могло. Нам нужно было переезжать на новые сервера с улучшенной защитой от DDoS и более высокой производительностью и, если честно, мы даже не знали к кому обратиться.
Что было дальше?!
Решение на самом деле было совсем рядом. После посещения первой большой конференции Яндекс.Облака и анализа тех предложений, что есть на российском рынке, мы всё же решились переехать на сервера Яндекса.
Нам предстояло мигрировать с DigitalOcean на Яндекс.Облако, и мы, наученные горьким опытом, понимали, что решить задачку миграции без даунтайма с проработанной защитой от DDoS-атак и устойчивостью к большому трафику самостоятельно уже не удастся.
Мы решили привлечь каких-нибудь специалистов по облачным инфраструктурам. У всех облачных провайдеров такие люди есть — они представляют компании-интеграторы, у которых есть практический опыт миграции, разработки и поддержки веб-приложений в облаке. У Яндекс.Облака такие партнёры тоже есть — их 115.
Нам лично решили помочь ребята из Opsguru — это международная компания-разработчик с представительствами в Израиле, Канаде, Румынии, США и России. Они знают специфику работы как с DigitalOcean, так и с Яндекс.Облаком.
В течении нескольких минут мы уже создали план миграции:
- Настройка идентичной архитектуры на новой площадке — в Яндекс.Облаке;
- «Бесшовная» миграция;
- Поддержка и создание архитектуры, которая способна выдержать скачки нагрузок.
Миграция
Мы обсуждали процесс миграции буквально несколько дней, ещё не успели ни подписать договор с Opsguru, ни создать аккаунт в Яндекс.Облаке, как в пятницу, 20 декабря в 16:35 виртуальная машина в Digital Ocean снова упала. Сайт «Кода Дурова» был недоступен 58 минут. Произошёл сбой на стороне хостинга.
Ночью в пятницу мы подписали договор, а в воскресенье сайт «Кода Дурова» мигрировал с DigitalOcean на Яндекс.Облако. Важно заметить, что у ребят был отпуск, в теории всю миграцию можно было провести вообще за 24 часа!
Сначала Opsguru создали в Яндекс.Облаке идентичную инфраструктуру и настройки сети — виртуальную машину с Ghost CMS, бэкап базы данных MySQL. Затем ребята проверили, что ничего не потерялось, и переключили рабочую нагрузку с сервера DigitalOcean на инфраструктуру в Яндекс.Облаке — всё это время сайт «Кода Дурова» оставался доступен.
В качестве защиты от DDoS в Opsguru решили использовать встроенное решение Яндекс.Облака — теперь весь трафик до виртуальной машины проходит через фильтры Qrator Labs.
Более 80% всех читателей сайта «Кода Дурова» — жители России, поэтому из-за перемещения продакшн-контура в ДЦ Яндекс.Облака в Центральном федеральном округе уменьшилась скорость загрузки страниц.
После нескольких дней работы оказалось, что текущую нагрузку на сайт в Яндекс.Облаке способна выдержать виртуальная машина с такой же конфигурацией, что и в DigitalOcean — 2 vCPU, 4GB RAM с гарантированной долей ядра 50%. Но лишь с проработанной защитой от DDoS-атак.
Планы на 2020 год и общее мнение:
Но на этом изменение архитектуры проекта не заканчивается — дальше ребята из Opsguru планируют увеличить количество виртуальных машин до трёх, а перед ними установить балансировщик нагрузки. Такая вариация архитектуры поможет выдерживать скачки нагрузок (стандартная нагрузка на сайт — 6-8 запросов в секунду, в пиковое время это 17-20 запросов в секунду).
Сейчас база данных и CMS сайта «живут» на одной виртуальной машине, но в дальнейшем база переедет в отдельный кластер управляемых баз данных MySQL из 2 нод. Эти базы администрируются Яндекс.Облаком — бэкапы делаются автоматически, а благодаря настройкам логов можно восстанавливать данные, которые не успели попасть в последний бэкап.
Так что работа продолжается. Представляете, сколько всего происходит на бэкенде, чтобы наш сайт оставался доступным для читателей?
Читать первым в Telegram-канале «Код Дурова»