26 мая 2020 г.

Алексей Вахов

С конца марта 2020 г. все школы мира и нашей страны перешли на дистанционное обучение. На платформе Учи.ру только в апреле занималось 8 миллионов школьников, 110 тысяч учителей провели виртуальные уроки, следовательно, трафик Учи.ру увеличился. Если раньше пиковая нагрузка на сайт не превышала 35-40 тысяч посетителей, то весной количество уникальных пользователей, находящихся на сайте единовременно, достигло 220 тысяч. О том, как прошло масштабирование инфраструктуры и стабилизация работы сайта при таком росте нагрузки, рассказал Алексей Вахов, технический директор Учи.ру.

Инфраструктура ИТ-модели и ее специфика

Инфраструктура Учи.ру представляет собой облачный стек технологий и состоит из изолированных независимых проектов в частных виртуальных облаках. Для нас эта схема является оптимальной, ведь при такой организации нарушение работы на одной площадке не повлияет на остальные. Продуктовыми площадками управляет мастер-площадка, доступ к которой имеет только инфраструктурная команда. С помощью Docker мы разрабатываем и отлаживаем приложения, оркестрирует Docker-кластеры утилита Nomad.

Чтобы выдержать новые условия работы, нам пришлось принимать срочные меры. К непредсказуемому сценарию, вроде полного перехода на удаленный режим всех учебных заведений страны, сложно подготовиться заранее. Первый месяц трафик рос каждый день, в таком режиме сложно диагностировать появляющиеся ошибки системы. Сейчас, когда мы стабилизировали платформу, а нагрузка уменьшилась под конец учебного года, можно говорить об инфраструктуре в общем и изменениях, которые мы внесли для ее усовершенствования.

Сейчас в компании работает более 140 ИТ-специалистов по отдельным направлениям: DevOps, машинное обучение, BI, а также разработчики и тестировщики из продуктовых команд. Инфраструктурная команда состоит из 5 человек. На время устранения всех «бутылочных горлышек» системы и оптимизации на всех уровнях инфраструктуры мы выработали формат работы, когда каждый сотрудник отвечает за свою часть работы, а за отдельные задачи — приглашенные консультанты. Координировали работу оперативно, в специальном чате в Slack.

Кризисные изменения

Быстро масштабироваться позволяет облачный стек технологий. Облака имеют преимущество в вопросах быстрого расширения. Однако даже тут есть ограничения. Например, мы столкнулись с квотами нашего облачного провайдера и с негативным влиянием других клиентов провайдера на наши виртуальные серверы — многие, как и мы, испытывали высокую нагрузку. Чтобы решить эту проблему, с облачным провайдером договорились о выделенном ресурсе, а также сделали все возможное со своей стороны — перераспределили ресурсы на основной сайт, на который пришлась большая часть нагрузки, с неприоритетных виртуальных машин.

Шестикратная нагрузка создает новые потребности и предполагает изменение инструментария. Набор инструментов нашей команды пополнился новыми сервисами, а часть старых временно отошла на второй план. Например, алертинг оказался излишним и даже мешал: все члены команды и так постоянно следили за метриками. А вот более детальная диагностика проблем стала просто необходимой: в дополнение к мониторингу всех виртуальных машин с помощью стандартных Node Exporter для Prometeus мы начали использовать NetData, чтобы подробно изучать каждую виртуальную машину отдельно.

Помимо базовых необходимых решений во время кризиса не обойтись без точечных улучшений и изменений. Для повышения пропускной способности мы подняли несколько независимых Redis, которые проксирует Service Mesh. А для экономии около 25% CPU на серверах баз данных мы вынесли PgBouncer с мастера и каждой отдельной реплики на отдельных сервер.

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

Управление инфраструктурой

Вся инфраструктура как код хранится в системе контроля версий Git в одном репозитарии, и для ее управления мы пользуемся набором инструментов:

  • С помощью системы управления конфигурациями Ansible настраиваем серверы.
  • Terraform используем для управлением ресурсами инфраструктуры в виде кода.
  • В Docker запускаем все приложения с помощью Nomad и Consul.
  • Внутренний самописный инструмент Shaman используем для развертывания программного обеспечения.
  • Grafana — для вывода всех графиков.

Работа в облаках

Проекты онлайн-платформы хостятся полностью в публичных облаках. Работа сайта чрезвычайно динамичная, поэтому специалистам важна возможность быстро развернуть и свернуть проекты. Работа в различных облаках позволила нам остаться гибкими и работоспособными даже при авральной нагрузке.

Облачного провайдера мы выбираем в зависимости от требований к хранению персональных данных в стране. В России используем облака Selectel, в США — Google Cloud Platform, в Бразилии — Microsoft Azure, в Индии и Южной Африке — Amazon Web Services, в Китае — Alibaba Cloud.

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

Планы на будущее

Сложно сказать, что ждет нас в ближайшем будущем и в следующем учебном году. Скорее всего, онлайн-образование будет больше распространено, чем раньше. К первоначальной нагрузке, с которой мы работали до массового перехода на дистанционное обучение, уже вряд ли вернемся. Именно поэтому мы постоянно повышаем качество работы, развиваем DevOps культуру и усиливаем команду.

Источник: Алексей Вахов, технический директор Учи.ру