В EFSOL обратилась команда разработчиков социального онлайн-проекта с задачей спроектировать и развернуть необходимую ИТ-инфраструктуру и автоматизировать процессы разработки и выпуска обновлений программного продукта. Основное требование клиента состояло в том, чтобы готовая инфраструктура проекта могла выдержать относительно высокую нагрузку, включая кратковременные пики, когда онлайн-проект посещают 100 000 пользователей и более.
Задачи клиента
Перед DevOps-инженерами EFSOL были поставлены следующие задачи:
- Провести анализ текущих требований проекта.
- Контейнеризировать приложение и развернуть его в Kubernetes.
- Построить CI/CD и автоматизировать деплой.
- Спроектировать и настроить отказоустойчивую инфраструктуру всех ключевых компонентов.
- Произвести нагрузочный тест, используя заготовленные сценарии для достижения необходимого показателя RPS. Как результат — определить необходимые ресурсы для prod с прогнозируемой нагрузкой.
Как мы решили задачи клиента
DevOps-специалистами EFSOL для реализации проекта была выбрана площадка Яндекс.Облако.
- На первом этапе были изучены вводные данные и требования клиента, согласно которым инфраструктура проекта должна быть отказоустойчивой и выдерживать целевой показатель RPS. Для автоматизации процессов разработки требовалось построить CI/CD с необходимыми шагами, учитывающими специфику проекта.
- Приложение проекта было контейнеризировано и развернуто в масштабируемом кластере k8s. База данных расположена в кластере MySQL, а для ускорения обращений к СУБД используется Redis. Пользовательские медиа-файлы располагаются в S3 в соответствующих бакетах. Единой точкой входа выступает ALB.
- Реализованы управляемые среды dev, test, prod. Для построения CI/CD был использован GitLab от Яндекс.Облака с настроенным автоматическим тестированием кода приложения. Для обновления базы данных создана схема миграции, учитывающая сверку данных.
- На этапе подбора prod-конфигурации, для поиска возможных узких мест и обеспечения целевого RPS, было проведено нагрузочное тестирование с помощью locust по подготовленным сценариям. По итогу, это позволило спланировать инфраструктурный резерв и подобрать оптимальную prod-конфигурацию.
- Каждый из основных компонентов инфраструктуры расположен в 3 независимых геозонах Яндекс.Облако для обеспечения отказоустойчивости сервисов.
- В итоговой схеме использовался следующий набор инфраструктурных компонентов: Yandex Managed Service for Kubernetes, Yandex Managed Service for MySQL, Yandex Managed Service for Redis, Yandex Object Storage, Yandex Application Load Balancer, Yandex Cloud CDN, Yandex Managed Service for GitLab, Yandex Container Registry, Yandex DDoS Protection, Managed Web Application Firewall, Yandex Monitoring.
На рисунке ниже представлена схема решения:
Рисунок 1 — Схема решения
Результат проекта
По итогу выполненных работ, DevOps-специалисты EFSOL провели проектирование необходимой инфраструктуры, а клиент остался полностью доволен предоставленным решением:
- Реализована отказоустойчивая инфраструктура с использованием географически распределенных кластеров k8s, Redis и MySQL, выдерживающая целевое значение RPS с запасом.
- Реализован CI/CD, что позволило повысить скорость выпуска обновлений, улучшить качество выпускаемого кода, быстрее отлавливать ошибки и оперативнее вносить исправления.
- Улучшено взаимодействие между командой разработки и эксплуатации.