«Опс Гуру» проработала для Familia инфраструктуру в облаке, чтобы рассчитывать нагрузку на магазины и составлять график работы сотрудников
Компания использует ресурсы облака только когда необходимо выполнить расчет: единовременно запускает 400 машин, которые выключаются после выполнения задачи и удаляются через заданный лимит времени. Количество запускаемых машин каждый раз разное — этим управляют алгоритмы Familia. Решение основано на подходе управления инфраструктурой как кодом (IaC). Инфраструктуру проработал партнер Cloud.ru — компания «Опс Гуру».
О партнере
IT-компания «Опс Гуру» внедряет и адаптирует облачную инфраструктуру под задачи бизнеса: помогает в эксплуатации и защите производственных сред, повышает качество работы с данными, разрабатывает и модернизирует cloud native приложения с использованием микросервисного подхода.
В июне 2023 года «Опс Гуру»и Cloud.ru заключили партнерское соглашение для совместной работы в проектах по масштабированию облачных решений под потребности заказчиков из разных индустрий.
Задача
Familia — российский ритейлер, федеральная сеть офф-прайс-магазинов — разрабатывает программу для расчета нагрузки на магазины и автоматизированного составления графика работы сотрудников.
Программа рассчитывает нагрузку на магазины с учетом неравномерных поставок, сезонности, праздников и выходных. И на этих данных составляет оптимальный график работы для сотрудников. Нам было нужно решение, которое сможет масштабировать расчет на любое количество магазинов и будет делать это одинаково быстро независимо от числа итераций.
Программа требует большого количества вычислительных мощностей, но не регулярно. Familia обратилась в Cloud.ru, чтобы разместить разработку в облаке и проводить расчеты на виртуальных машинах.
Главное условие задачи в том, что виртуальные машины должны разворачиваться по требованию, производить расчет, отключаться после выполнения задачи и удаляться по истечению выделенного лимита времени.
Есть и другие условия:
- единовременное создание 400+ виртуальных машин;
- возможность выбирать количество запускаемых машин, исходя из потребности;
- программа работает в облаке, но данные берет из внутренней базы данных клиента и результат расчета передает туда же по шифрованному каналу;
- время на запуск виртуальных машин — максимум 30 минут ;
- логирование расчета для сбора статистики и анализа возможных ошибок.
Обычно для подобной задачи компании покупают виртуальные машины, которые висят на балансе и тратят ресурсы впустую: их используют несколько часов в день, а платят за них по полной. Мы выбрали другой вариант: динамическое развертывание виртуальных машин и управление ими как кодом (IaC). То есть процесс запускается, проводит расчет и через какое-то время система удаляет ресурсы. Главное отличие такой схемы в том, что клиент фактически платит только за время исполнения задачи.
После обсуждения с Familia проблематики задачи, облачный провайдер разработал первичную архитектуру решения. Для детальной проработки архитектуры, вывода в продакшен и дальнейшего сопровождения подключил к работе специалистов «Опс Гуру».
Коллегам предстояло решить несколько задач:
- построить инфраструктуру, которая создается при обращении через API или UI, для динамического развертывания виртуальных машин с программным обеспечением клиента;
- настроить процесс агрегирования и централизованного сбора логов для анализа работы облачной инфраструктуры и выявления ошибок в работе программы с еженедельным резервным копированием в объектное хранилище;
- проработать информационные потоки и настроить сетевые сервисы облака для взаимодействия с сервисами клиента по шифрованным протоколам.
Почему Cloud.ru
Платформа Cloud.ru Advanced построена на программном обеспечении с открытым кодом. Клиенту это было важно, чтобы сохранить свою независимость и использовать сводное ПО.
Решение разместить программу в облаке и проводить расчет на масштабируемых мощностях — самый технологически эффективный вариант для бизнеса. Было понятно сразу, что мы не достигнем наших целей в on-premise инфраструктуре. А в облаке всё точно прогнозируется, затраты меньше и ими можно управлять так гибко, как не получится с собственной инфраструктурой.
Решение
Специалисты «Опс Гуру» построили облачную инфраструктуру на базе сервисов платформы Cloud.ru Advanced. Сконфигурировали виртуальную частную сеть на базе OpenVPN и IPSec для организации шифрованного канала до инфраструктуры клиента, где находятся исходные данные. Развернули GitLab и настроили пайплайны для автоматизации запуска 400+ виртуальных машин Elastic Cloud Server (ECS) с блочным хранилищем Elastic Volume Service (EVS) и установленым агентом для сбора логов в Elasticsearch и Kibana и их загрузки в S3 совместимое холодное объектное хранилище Object Storage Service (OBS). Предусмотрели возможность конфигурирования параметров пайплайнов, чтобы менять количество запускаемых виртуальных машин. Для разворачивания образов виртуальных машин использовали сервис управления образами Image management Service (IMS).
После анализа логов разработчики Familia правят код программы, обновленный код синхронизируется с репозиторием GitLab. И тут мы сталкиваемся с проблемой: переконфигурировать налету 400 виртуальных машин и при этом соблюсти SLA не получается. Поэтому мы разбили пайплайн на две последовательности. Первая по обновленному коду собирает золотой образ виртуальной машины и складывает его в хранилище. Вторая запускается непосредственно при запросе вычисления: берет готовый образ и многократно его воспроизводит.
Облако помогло нам доработать программу: благодаря централизованному сбору логов мы получили качественное тестирование гораздо проще, чем если бы делали это вручную.
Одним из условий задачи была организация защищенного сетевого контура. Для этого к облачной инфраструктуре подключили управляемые сервисы:
- сервис NAT Gateway для доступа в интернет;
- сервис Elastic IP — уникальный публичный IP-адрес для доступа к интернет-ресурсам;
- сервис VPC для безопасного взаимодействия между компонентами инфраструктуры.
Для запуска функции удаления виртуальных машин после завершения вычислений использовали сервис выполнения кода в бессерверной среде FunctionGraph.
FunctionGraph позволяет создавать функции или блоки кода, которые можно запускать триггерами из других облачных сервисов или по расписанию. Функции и блоки кода FunctionGraph не сохраняют состояние.
Результат
После детализации архитектуры появились дополнительные требования, которые нам предстояло учесть в разрабатываемом решении. Эти требования мы выполнили в полном объеме, благодаря командной работе разработчиков Familia и «Опс Гуру». Реальность превзошла ожидания: по SLA время на запуск 400 машин и начало процесса вычислений — до получаса, хорошим результатом считали 15 минут, а по факту получили 6,5 минут.
Такую скорость запуска машин достигли за счет того, что задачи выполняются параллельно, а не поочередно. Управление инфраструктурой как кодом оптимизировало затраты: запущены только те машины, у которых есть задачи, и клиент платит только за хранение данных и включенные машины.
Обычно клиент обращается в IT-компанию, которая сама подбирает нужные сервисы и строит облачную архитектуру. Если нужна поддержка — подключается облачный провайдер. Здесь получилось по-другому: клиент обратился напрямую к нам. Мы изучили задачу и подобрали решение, показали, как оно будет работать. А для самого строительства инфраструктуры и интеграции облачных сервисов с сервисами клиента мы обратились к нашему партнеру и были в проекте до конца: консультировали и вместе искали подходящие решения.
Мы выбрали Cloud.ru, потому что они включились и глубоко проработали задачу уже на этапе presale. Ожидания от облака подтвердились, в планах — расширять его использование для других приложений.