С какими сложностями столкнулись онлайн-платформы на карантине
Рассказ о проблемах программистов, инженеров и аналитиков, вызванных эпидемией, на примере образовательной онлайн-платформы.
Во время ограничений, связанных с распространением коронавирусной инфекции, многие компании столкнулись с технологическими проблемами. Интернет-компаниям, спрос на продукты которых вырос в разы, пришлось справляться с высокой нагрузкой, быстро разрабатывать новые сервисы и разбираться с другими сложностями. Рассказываем о вызовах для программистов, инженеров и аналитиков во время тотальной дистанционки на примере образовательной онлайн-платформы Учи.ру.
Переход российских школ на дистанционное обучение для нас, как и для многих других образовательных сервисов, стал испытанием на прочность. С середины марта количество пользователей росло ежедневно, и к середине апреля нагрузка в шесть раз превысила максимальную в этом учебном году. Вместе с тем мы разрабатывали новые образовательные продукты для массового использования — от решения до запуска проходило 7–10 дней. Автоматизировать и оптимизировать приходилось все процессы, вплоть до клиентской поддержки.
В таких условиях приходится искать решения быстро. Во время кризиса проблемные места ИТ-продукта открываются одно за другим, появляются новые вызовы.
Проблемы с масштабированием инфраструктуры и их решения
Одной из главных болевых точек оказалась инфраструктура. Пик нагрузки мы прошли в течение первой же недели дистанционного обучения. Нагрузка росла каждый день. Чтобы стабилизировать работу платформы, было необходимо вмешательство на каждом уровне.
Быстро масштабироваться позволяет облачный стек технологий. В вопросах оперативного расширения облака имеют преимущество. Однако здесь существует ряд ограничений. Так, например, в какой-то момент мы столкнулись с квотами нашего облачного провайдера. Плюс, другие клиенты нашего провайдера также испытывали высокую нагрузку и негативно влияли на наши виртуальные сервера. Чтобы выйти из затруднительной ситуации, мы договорились о выделенном ресурсе, а также сделали все возможное со своей стороны — перераспределили ресурсы с неприоритетных виртуальных машин на основной сайт, на который пришлась большая часть нагрузки.
Шестикратная нагрузка создает новые потребности для всей команды, поэтому подобные кризисы всегда предполагают пересмотр привычного набора инструментов. Инструментарий наших инженеров пополнился новыми сервисами, а часть старых отошла на второй план. Например, алертинг оказался излишним и даже мешал: все члены команды и так постоянно следили за метриками. А вот более детальная диагностика проблем оказалась необходимой. Поэтому в дополнение к мониторингу всех виртуальных машин с помощью стандартных Node Exporter для Prometeus мы начали использовать NetData, чтобы подробно изучать каждую виртуальную машину отдельно.
Помимо базовых необходимых решений во время кризиса не обойтись без оригинальных находок и точечных изменений. Для повышения пропускной способности мы подняли несколько независимых Redis, которые проксирует Service Mesh. А для экономии около 25% CPU на серверах баз данных мы вынесли PgBouncer с мастера и каждой отдельной реплики на отдельных сервер.
Вместе с этим команда работала и в других направлениях, что в совокупности помогло выдержать колоссально возросшую нагрузку.
Проблемы с разработкой новых продуктов и их решения
Мы начали подготовку к массовому переходу на дистанционное обучение и обсуждение новых продуктов за 2–3 недели до объявления режима самоизоляции, видя, как развивается ситуация с вирусом в других странах. Поговорили с учителями и госслужащими, обсудили с ними возможности платформы, которые станут наиболее востребованными. Специфика Учи.ру такова, что на платформе уже зарегистрированы и учителя, и ученики — это помогло объединить их и сделать за короткий срок новые продукты для массового дистанционного образования.
Часть этих сервисов уже была реализована, а другую часть продуктов мы запустили специально: «Виртуальный класс», онлайн-уроки с нашими учителями и вебинары. Онлайн-уроки и вебинары с технической точки зрения поддерживать несложно, а для разработки «Виртуального класса» потребовалось найти решения.
Похожий сервис у нас уже был, он существует уже 1,5 года, за это время в нем прошло более 60 000 уроков. Для полноценного перехода на дистанционное обучение нам нужно было переработать предыдущий опыт и внести много изменений. Преобразования во frontend касались интерфейса сервиса для учителя и учеников.
На backend же пришлось стабилизировать существующее решение для высоких нагрузок, уйти от видеосвязи peer-to-peer к SFU-связи (Selectie Forwarding Unit) и интегрировать сервис онлайн-уроков с личными кабинетами. Онлайн-уроки работают через провайдера видео в вебе, сейчас мы планируем использовать и собственные медиасервисы для части продуктов. Это будут медиасервера WebRTC. Такое решение станет плюсом для горизонтального масштабирования.
Мы также исследуем рынок open source и платных решений. Среди open source есть интересные ПО, но, например, при использовании Janus Gateway для сессий с пятью и более пользователями в одном видеоуроке нагрузка на CPU росла бы экспоненциально. Еще один вызов — поддержка большого количества медиасерверов и балансировка нагрузки между ними.
Проблемы с нагрузкой на службу поддержки и их решения
С середины марта количество активных пользователей платформы среди школьников выросло с 4 до 8 миллионов, среди учителей — с 250 до 350 тысяч, среди родителей — с 2,5 до 3,5 миллионов. У новых пользователей закономерно возникали вопросы, и они обращались в службу поддержки, которая, ожидаемо, перестала справляться.
Количество запросов в поддержку выросло с 1,5–1,8 до 10–13 тысяч обращений в день.
Чтобы справиться с возросшей в 10 раз нагрузкой на службу поддержки, мы сделали несколько вещей:
- проработали FAQ на сайте и в автоответах на тикеты;
- обновили IVR (Interactive Voice Response, интерактивное голосовое меню);
- увеличили штат поддержки в четыре раза — с 16 человек до 60 в зависимости от нагрузки;
- перевели 90% времени сотрудников на обработку тикетов, 10% оставили для обработки звонков;
- приоритезировали звонки по темам.
В первую очередь собрали наиболее часто задаваемые вопросы, обновили FAQ на сайте и добавили его в отбивку-ответ на запрос через почту. Большая часть обращавшихся действительно находила ответ на свой вопрос самостоятельно, за счет чего сразу снизилось количество тикетов.
На основе этих вопросов мы обновили IVR, который также давал ответы на частые вопросы.
В помощь отделу поддержки из 16 человек мы пригласили около 45 сотрудников из других департаментов. Кто-то смог кардинально перестроить рабочий день и посвящать до половины времени ответам пользователям, кто-то подключался на пару часов в неделю. Для переквалификации таких условно «новеньких» требовалось гораздо меньше времени, чем для обучения абсолютно новых сотрудников: они уже знали продукт и легко ориентировались в материалах.
Вывод
Ситуация с самоизоляцией и переходом почти всего в онлайн стала показательной для нас и для всей отрасли в целом. При этом за два последних месяца ИТ-компании могли видеть, на что по-настоящему способны их сотрудники. Результативное решение критических проблем, связанных с высокой нагрузкой и срочной разработкой, дает толчок для роста компании и сплачивает команду.