26 мая 2020 г.
С конца марта 2020 г. все школы мира и нашей страны перешли на дистанционное обучение. На платформе Учи.ру только в апреле занималось 8 миллионов школьников, 110 тысяч учителей провели виртуальные уроки, следовательно, трафик Учи.ру увеличился. Если раньше пиковая нагрузка на сайт не превышала
Инфраструктура ИТ-модели и ее специфика
Инфраструктура Учи.ру представляет собой облачный стек технологий и состоит из изолированных независимых проектов в частных виртуальных облаках. Для нас эта схема является оптимальной, ведь при такой организации нарушение работы на одной площадке не повлияет на остальные. Продуктовыми площадками управляет мастер-площадка, доступ к которой имеет только инфраструктурная команда. С помощью 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 культуру и усиливаем команду.
Источник: Алексей Вахов, технический директор Учи.ру