Как консолидировать IT-инфраструктуру и повысить отказоустойчивость SaaS: опыт YouGile
Когда сервисом ежедневно пользуются более 150 000 человек, инфраструктура должна масштабироваться без сбоев. В кейсе рассказываем, как команда YouGile перестроила IT-инфраструктуру и развивает ее на базе ресурсов Selectel.
Задачи:
- Перенести сервис на новую инфраструктуру.
- Обеспечить бесперебойную работу СУБД.
- Внедрить в сервис ИИ-функциональность.
- Развернуть среду для разработки.
Продукты и услуги Selectel:
О компании
YouGile — российский сервис для управления проектами. С помощью него компании организуют внутрикорпоративное общение, управляют задачами и сделками.
Ежедневно сервисом пользуется более 150 000 человек, а объем пользовательских данных превышает 100 ТБ.
Вызовы и решения
Перенести сервис на новую инфраструктуру
На старте инфраструктура YouGile представляла собой кластер с персистентностью в PostgreSQL и самописной базой данных. Такая архитектура хорошо масштабировалась за счет шардирования и в целом эффективно справлялась со своими задачами.
Однако нагрузка на сервис каждый год росла в разы и работы по ручному масштабированию инфраструктуры становилось все больше. Кроме того, из-за высокой доли кастомных решений команде не хватало готовых инструментов и практик, доступных в более стандартизированных стеках.
В результате было принято решение стандартизировать архитектуру и перейти на Kubernetes.
Перенесли сервис в Managed Kubernetes
Для управляемого перехода команда настроила четыре окружения:
- test — для проверки функциональности;
- stage — для тестирования; на ней поднимались копии сервиса и обкатывалась новая функциональность;
- infra — контур для DevOps-сервисов, CI/CD, мониторинга и вспомогательных систем;
- production — основной пользовательский контур.
На первом этапе Kubernetes был развернут только для окружений разработки и тестирования. Перенос продакшена в один шаг был слишком рискованным из-за большого объема данных и постоянно высокой нагрузки. В результате был выбран осторожный подход: поэтапный, итеративный перенос с фиксацией и устранением проблем по мере их появления.
«Наша инфраструктура описана как код — это значительно ускорило миграцию. Мы взяли за основу открытые Terraform-модули Selectel, адаптировали их под себя, обернули в Terragrunt и дальше использовали — развернули три наши окружения и, собственно, переехали. Это заняло два месяца».
Продакшен переносили поэтапно, небольшими итерациями, поскольку было важно предусмотреть все потенциальные проблемы и минимизировать даунтайм для пользователей.
Для обеспечения отказоустойчивости Kubernetes-кластеры разнесли по трем пулам — это разные части инфраструктуры в рамках одного дата-центра Selectel, каждый из которых изолирован от аппаратных и программных сбоев в других пулах. А чтобы справляться с высокой нагрузкой, кластеры развернуты на базе HighFreq-процессоров AMD EPYC 9554 с частотой 3,7 ГГц.
Сейчас уровень доступности сервиса составляет 99,9%, а в пиковые нагрузки он обрабатывает более 7 000 запросов в секунду.
Обеспечить бесперебойную работу СУБД
По мере увеличения количества пользователей изначальная архитектура сервиса начала упираться в ограничения масштабирования. При расширении кластера файлы приходилось перераспределять между серверами, что заметно усложняло добавление новых хостов. В итоге было принято решение разделить хосты для обработки запросов и хранения данных.
Первым шагом команда YouGile перенесла всю персистентность из файловой системы в PostgreSQL. Это позволило централизовать хранение данных, избавиться от привязки к физическим серверам и подготовить инфраструктуру к дальнейшему расширению.
Следующим этапом стало построение связанной системы управления базами данных на новой инфраструктуре.
Развернули базы данных в облаке
Под капотом сервиса используется несколько СУБД, каждая из которых решает свою задачу: PostgreSQL отвечает за основное хранилище продуктовых данных, Redis — за служебные маппинги и состояние пользователей, Kafka — за синхронизацию и кэширование данных, а ClickHouse — за аналитическую обработку событий.
PostgreSQL используется как основная транзакционная база данных. Она разделена на несколько независимых экземпляров, каждый из которых отвечает за свой тип сущностей:
- company — крупнейшая база, где хранится основной массив данных компаний (доски, задачи, сообщения и другие рабочие данные);
- account — данные аккаунтов пользователей, включая аутентификацию и связь пользователей с компаниями;
- user events — действия в системе, аудит операций, создание и удаление задач и другие события.
Такое разделение позволяет разграничить нагрузки и упростить масштабирование системы.
Для обеспечения отказоустойчивости PostgreSQL развернут в виде облачного кластера с использованием Patroni. В кластере используется схема «мастер-реплика», а распределение запросов осуществляется через облачный балансировщик
Redis используется как вспомогательное хранилище для инфраструктурных задач. В частности, в нем хранится маппинг компаний — информация о том, на каком шардe находятся данные конкретной компании.
Этот механизм особенно важен для Kubernetes-инфраструктуры, поскольку позволяет сервису оставаться stateless. При перезапуске подов распределение компаний между шардами может меняться, при этом сервисы получают актуальные маппинги из Redis и автоматически начинают работать с нужным шардом данных.
Kafka используется в сервисе аккаунтов для передачи и частичного кэширования данных. Она хранит информацию о ревизиях данных компаний — версии текущего состояния данных. При каждом изменении в системе эта ревизия увеличивается, а сервисы могут быстро определить, насколько актуальна имеющаяся у них информация. Такой механизм позволяет уменьшить количество обращений к PostgreSQL и оптимизировать работу сервисов.
ClickHouse используется для продуктовой аналитики. В систему поступают данные о действиях пользователей: регистрации, использование функций сервиса, способы аутентификации и другие метрики. Для визуализации данных используется Metabase, где строятся продуктовые дашборды и аналитические отчеты для команды разработки.
Основной объем данных составляет пользовательский контент: файлы и изображения, которые пользователи прикрепляют к задачам и сообщениям. Эти данные сохраняются в S3.
Внедрить в сервис искусственный интеллект
В YouGile активно развиваются функции на базе искусственного интеллекта. Среди них — расшифровка голосовых сообщений и ассистент, который помогает работать с задачами, например, редактировать их, назначать исполнителей и управлять проектами прямо в интерфейсе сервиса.
Поскольку каждая задача в системе представляет собой чат, все обсуждения и связанные с задачей действия происходят в одном месте. При этом искусственный интеллект помогает пользователям быстрее обрабатывать и структурировать эту информацию.
Арендовали серверы с GPU
Для внедрения ИИ команда YouGile развернула несколько выделенных серверов с GPU. Например, сервис транскрибации голосовых сообщений работает на двух серверах с GPU NVIDIA RTX 4090 и использует модели Whisper и Qwen. ИИ-ассистент развернут на сервере с GPU A100 и использует последнюю версию Qwen.
Сейчас функции с ИИ находится в стадии активного развития, а команда YouGile продолжает тестировать новые модели и сценарии применения агентов.
Развернуть среду для разработки
Для эффективной разработки команде YouGile требовалось развернуть полноценную среду и инфраструктуру для работы с исходным кодом. Важно было обеспечить централизованное хранение репозиториев, поддержку CI/CD-процессов и достаточную производительность системы, чтобы команда могла быстро собирать и разворачивать приложения.
Развернули выделенный сервер для Git
На выделенном сервере развернули Git и CI/CD-агенты. Теперь сервер используется как центральная точка для хранения репозиториев и выполнения сборок.
Инфраструктуру также можно гибко масштабировать. Например, сетевую карту на сервере заменили на 10 Гбит/с, что увеличило пропускную способность и ускорило скачивание образов из кластера Kubernetes. Это особенно важно при запуске большого количества воркер-нод: в продакшене их около 30, и раньше узким местом был сетевой канал. После увеличения пропускной способности время загрузки образов и запуска сервисов сократилось.
Результаты
-
>150 000
ежедневных пользователей YouGile
-
7 000 RPS
сервис обрабатывает в пиковые нагрузки
-
>100 ТБ
пользовательских данных
-
99,9%
уровень SLA
«Для нас одним из ключевых требований является доступность инфраструктуры — важно, чтобы сервисы работали стабильно и без простоев. С этим у Selectel все отлично. Отдельно хочется отметить техподдержку: ребята реагируют очень быстро и всегда помогают разобраться в ситуации. Мы регулярно обращаемся за консультациями, чтобы решить возникающие технические задачи».
«Для повышения отказоустойчивости мы помогли команде YouGile расширить облачные ресурсы и распределить нагрузку между несколькими пулами. Также были выделены дополнительные вычислительные пулы на базе высокочастотных процессоров, что повысило производительность сервиса.
После миграции на инфраструктуру Selectel платформа YouGile стала надежнее справляться с высокими нагрузками, а команда сервиса получила надежного инфраструктурного партнера».