История о том, как «Код Дурова» учился летать на Яндекс.Облако
История о том, как «Код Дурова» учился летать на Яндекс.Облако

История о том, как «Код Дурова» учился летать на Яндекс.Облако

27 декабря, 20195 минут на чтение
Подписывайтесь на [Код // Дурова] в Telegram[Код // Дурова] в Telegram

Всем привет! Меня зовут Гайк Даллакян, я один из основателей «Кода Дурова» и курирую сразу несколько проектов в нашем издании. Один из них, наша боль и одновременно наша гордость — сайт 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 и более высокой производительностью и, если честно, мы даже не знали к кому обратиться.

Что было дальше?!

Решение на самом деле было совсем рядом. После посещения первой большой конференции Яндекс.Облака и анализа тех предложений, что есть на российском рынке, мы всё же решились переехать на сервера Яндекса.

Яндекс.Облако представило 6 новых сервисов, среди которых собственное serverless-решение
Российский IT-гигант провел 1 октября большое мероприятие Yandex Scale,посвященное новым продуктам Яндекс.Облака. Редакция «Кода Дурова» посетила«облачную» конференцию, прошедшую в московском конгресс-парке Radisson Royal, испешит поделиться с вами информацией об одном из самых интересных продукт…

Нам предстояло мигрировать с 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 нод. Эти базы администрируются Яндекс.Облаком — бэкапы делаются автоматически, а благодаря настройкам логов можно восстанавливать данные, которые не успели попасть в последний бэкап.

Так что работа продолжается. Представляете, сколько всего происходит на бэкенде, чтобы наш сайт оставался доступным для читателей?

27 декабря, 2019
Подписывайтесь на [Код // Дурова] в Telegram[Код // Дурова] в Telegram