Как повысить отказоустойчивость SaaS: опыт YouGile

Как консолидировать IT-инфраструктуру и повысить отказоустойчивость SaaS: опыт YouGile

Когда сервисом ежедневно пользуются более 150 000 человек, инфраструктура должна масштабироваться без сбоев. В кейсе рассказываем, как команда YouGile перестроила IT-инфраструктуру и развивает ее на базе ресурсов Selectel.

Изображение записи

Кейс будет полезен для компаний в следующих сферах:

  • SaaS
  • Высоконагруженные сервисы
  • Многопользовательские сервисы

Задачи:

  • Перенести сервис на новую инфраструктуру.
  • Обеспечить бесперебойную работу СУБД.
  • Внедрить в сервис ИИ-функциональность.
  • Развернуть среду для разработки.

О компании

YouGile — российский сервис для управления проектами. С помощью него компании организуют внутрикорпоративное общение, управляют задачами и сделками.

Ежедневно сервисом пользуется более 150 000 человек, а объем пользовательских данных превышает 100 ТБ.

Вызовы и решения

Перенести сервис на новую инфраструктуру

На старте инфраструктура YouGile представляла собой кластер с персистентностью в PostgreSQL и самописной базой данных. Такая архитектура хорошо масштабировалась за счет шардирования и в целом эффективно справлялась со своими задачами.

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

В результате было принято решение стандартизировать архитектуру и перейти на Kubernetes. 

Перенесли сервис в Managed Kubernetes

Для управляемого перехода команда настроила четыре окружения:

  • test — для проверки функциональности;
  • stage — для тестирования; на ней поднимались копии сервиса и обкатывалась новая функциональность;
  • infra — контур для DevOps-сервисов, CI/CD, мониторинга и вспомогательных систем;
  • production — основной пользовательский контур.

На первом этапе Kubernetes был развернут только для окружений разработки и тестирования. Перенос продакшена в один шаг был слишком рискованным из-за большого объема данных и постоянно высокой нагрузки. В результате был выбран осторожный подход: поэтапный, итеративный перенос с фиксацией и устранением проблем по мере их появления.

«Наша инфраструктура описана как код — это значительно ускорило миграцию. Мы взяли за основу открытые Terraform-модули Selectel, адаптировали их под себя, обернули в Terragrunt и дальше использовали — развернули три наши окружения и, собственно, переехали. Это заняло два месяца».

Артем Каро-Мадэ DevOps Team Lead, YouGile

Продакшен переносили поэтапно, небольшими итерациями, поскольку было важно предусмотреть все потенциальные проблемы и минимизировать даунтайм для пользователей.

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

Артем Каро-Мадэ DevOps Team Lead YouGile

«Для повышения отказоустойчивости мы помогли команде YouGile расширить облачные ресурсы и распределить нагрузку между несколькими пулами. Также были выделены дополнительные вычислительные пулы на базе высокочастотных процессоров, что повысило производительность сервиса.

После миграции на инфраструктуру Selectel платформа YouGile стала надежнее справляться с высокими нагрузками, а команда сервиса получила надежного инфраструктурного партнера».

Азарий-Василий Арутюнов Заместитель директора по развитию бизнеса, Selectel