Digital платформа Imredi
 
 
20 июня 2023

Habr.com: как создать платформу для управления 50 000 сотрудниками в ритейле при помощи частного облака

Как отслеживать эффективность сотрудников по всей стране, хранить терабайты данных и поддерживать доступность сервиса на высоком уровне? Платформа Imredi пять лет назад выбрала в качестве облачного провайдера Selectel и в 2022 году вышла на выручку в 200 млн в год. Рассказываем, какие решения использовались при построении платформы, как организована ее техническая часть и какие преобразования ожидаются в будущем.
О цифровой платформе Imredi
Команда Imredi с 2016 года разрабатывает решение для контроля и развития розничных сетей. Продукты компании помогают контролировать стандарты и управлять операциями и сотрудниками. Запускать промоакции и обеспечивать доступность товаров. Все они объединены единой технологической платформой, обеспечивающей модульную архитектуру, сквозные процессы, горизонтальное масштабирование, открытое REST API и интерфейсы интеграции данных.

Опыт работы Imredi с крупными федеральными компаниями (например, «Бристоль», «Дикси», «Винлаб» и РЖД) показал, что главное — это гибкость архитектуры. Платформа должна успевать за скоростью изменений в бизнес-процессах заказчика. Поэтому важно сохранять высокую скорость масштабирования, внесения изменений и оптимизации процессов.
Сейчас на платформе Imredi собрано более 50 оцифрованных бизнес-процессов, и компания предлагает три больших продукта (модуля):

  • Контроль стандартов и операций для операционного управления розничной сетью, который закрывает все потребности директора по рознице и технологиям в части управления задачами и повышения эффективности взаимодействия в сети.
  • Управление сотрудниками, рабочим временем и нагрузкой на персонал, который закрывает потребности HR-директора. Продукт позволяет вести планирование смен, графиков и учет рабочего времени (с биометрией) в единой системе. Осуществлять прогнозирование нагрузки с помощью ML-моделей, работать с биржей смен и т. д.
  • Управление промо-акциями и контроль доступности товара. Модуль, который позволяет директору по маркетингу выстроить процедуры планирования, согласования, запуска и контроля промо-акций, а также осуществлять прогнозирование и работы с сигналами наличия/отсутствия товаров на полке (OSA).
Пользователи платформы — это все сотрудники розничной сети. От менеджеров в штаб-квартире, сотрудников маркетинга, эксплуатации, IT до супервайзеров и директоров магазинов. Ежедневно они выполняют операционные задачи в мобильном приложении. Ставят и получают задания на день, заполняют чек-листы, сканируют штрихкоды, работают с продажами, отправляют фотоотчеты, отмечают приход и уход, контролируют исполнение промо-акций, формируют графики работы и табели.

Сотрудники центрального офиса могут в реальном времени получать информацию с мест, видеть вклад каждого сотрудника, ставить задачи и отслеживать прогресс достижения целей компании, прогнозировать нагрузку и распределять лимиты фонда оплаты труда и рабочего времени. Платформа Imredi не только оптимизирует задачи управления розничной сетью, но и предоставляет аналитику, инструменты для работы с KPI и управления персоналом.
Как работает платформа
Пример архитектуры одного из продуктов Imredi — WFM — приведен на изображении ниже. Все продукты собраны на единой платформе и могут взаимодействовать друг с другом.
Например, если приобрести продукт Imredi WFM для управления персоналом и Imredi Promo для планирования промо-акций, то будет возможность автоматически, с использованием ML-модели, рассчитать необходимый прогноз численности сотрудников в точках под конкретную акцию. Платформа поможет правильно распределить возросшую нагрузку на магазины в связи с запуском промо-компании. Если подключить модуль Imredi Tasks, то на сотрудников, запланированных в Imredi WFM, автоматически поставятся задачи на исполнение промо: выкладку товара, установку желтых ценников и т. д.

Петр Борисов
Генеральный директор и co-founder Imredi‎
«‎Шесть лет мы разрабатывали платформу с прицелом на то, что она позволит объединить все активности, необходимые ритейлу, в едином рабочем месте. При этом для сотрудников внутри магазина это будет единое мобильное рабочее место, а для сотрудников штаб-квартиры — единый инструмент планирования, прогнозирования и аналитики»
Каждый клиент Imredi подключает от нескольких сотен до десятков тысяч сотрудников — пользователей платформы. IT-инфраструктура устроена таким образом, чтобы иметь возможность быстро «взять их на борт». Поскольку клиенты компании — в основном крупные и средние федеральные сети, платформа также предусматривает возможность распределения нагрузки между серверами для покрытия пиковых нагрузок в разных часовых поясах.

Чтобы создать такой сервис, нужно было поддерживать высокую доступность, постоянно исследовать рынок и регулярно добавлять новые функции.
Миграция от зарубежного провайдера
В начале пути Imredi использовала Microsoft Azure в рамках гранта по программе Microsoft Bizspark, но в 2017 году команде понадобилось сменить облачного провайдера. Решению способствовали несколько факторов:

  1. В стартапе на тот момент было всего шесть человек. Было важно, чтобы инфраструктурой можно было управлять без штатного DevOps-инженера.
  2. Imredi стремилась к созданию Enterprise SaaS-платформы, которая будет работать быстро и гибко масштабироваться.
  3. Технологический стек провайдера должен был это обеспечить. Например, одно из требований — возможность получить кастомные конфигурации серверов.
  4. Microsoft Azure в пилотном запуске показал, что дальнейшее владение такой инфраструктурой без гранта обходится дорого. Нужно было искать альтернативу.

Ключевая задача на данном этапе — построить IT-инфраструктуру, способную быстро обрабатывать большой объем информации.
Выбор провайдера
Imredi искала провайдера, который мог бы быстро поднимать десятки виртуальных машин под запрос заказчика. В соответствии с принципом мультитенантной архитектуры логическое разделение внутри ВМ позволяет платформе изолированно работать с разными клиентами в рамках единой платформы и сервисных подсистем.

Компания начинала со стандартных серверов с 16 CPU, 32 RAM. Сейчас пришла к базовой ноде для application-серверов и серверов баз данных — в этой кастомной виртуалке 32 ядра и 64 ГБ RAM, а также терабайтный локальный NVMe-диск c нулевой сетевой задержкой. Для обслуживающих сервисов, тестовых сред, конвейеров CI/CD и мониторинга используются машины с меньшей мощностью — 4 CPU, 16/24 ГБ RAM.

Вячеслав Кинзерский
Технический директор Imredi
«‎‎‎‎‎‎Первый кластер виртуальных машин удалось поднять за пару часов. Отдельным плюсом стало то, что в панели управления Selectel была возможность отслеживать загрузку серверов и потребление трафика. Для стартапа в период активного роста это очень важный момент"‎
Федеральный уровень клиентов платформы предполагает работу с большим количеством данных: отчетами, фотографиями, статистикой. Облачное хранилище, которое использует Imredi, не ограничено в объеме. На платформе есть возможность по-разному организовывать хранение медиаданных:

  • Для данных, с которыми постоянно работают пользователи, использовать стандартный тип хранения.
  • Для данных, которые запрашиваются редко, использовать холодное хранилище, стоимость которого ниже.

Распределение по типу хранения оптимизирует расходы на инфраструктуру. Таким образом, еще на старте проекта были видны преимущества миграции из Microsoft Azure.
Hardware-архитектура сервиса
Структура платформы состоит из трех ферм:

  • application-серверы,
  • базы данных,
  • серверы аналитики.

Вокруг них — обвязка из сетевой инфраструктуры и вспомогательных сервисов.

Application-серверы распределяют нагрузку и реализуют отказоустойчивые кластеры, чтобы нивелировать пиковые нагрузки заказчиков. Есть отдельные серверы, привязанные к аналитике. Есть собственное встроенное внутреннее хранилище на PostgreSQL с витринами данных. Все вместе это выглядит так:
Есть также серверы мониторинга, которые следят за всеми обращениями и ошибками. На них собирается вся статистика, пишутся логи.

Кроме этого, Imredi использует два подхода к резервированию:

  • Для создания отказоустойчивой инфраструктуры используется сразу две зоны доступности.
  • Платформа реализует собственное резервирование за счет регулярных бэкапов данных, которые находятся в файловом хранилище Selectel.
Клиенты компании распределены по всей стране, но за счет того, что часть процессов не требует быстрой обработки, они выполняются в фоновом режиме. Это помогает оптимизировать работу в пиковые часы и полезно использовать ночное время, чтобы серверы не простаивали.
Решения
Облако

Новые виртуальные машины поднимаются в облачной платформе Selectel только в тех случаях, когда ферма упирается в ресурсы и возникает риск спада производительности. Система при этом настроена так, чтобы узнавать об этом заранее. Это помогает не выделять под каждого клиента отдельный сервер и оптимизировать затраты на инфраструктуру.

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

  • когда растет нагрузка на модули,
  • когда меняется профиль нагрузки,
  • когда у заказчиков вырастает число пользователей.

Imredi масштабируется в рамках всей фермы как сервиса, а не в каждом отдельном сервере, потому что преодолеть лимиты одной виртуальной машины очень легко. В кластере же происходит распределение пиковой нагрузки между серверами, оптимизация профиля нагрузки и алгоритмов работы в рамках каждого сервера.
Когда виртуальные машины объединены в кластеры по типу серверов и по типу нагрузки, оптимизацию можно вести по двум направлениям:

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

В облачной платформе Selectel также размещаются тестовые серверы для ведения пилотов и серверы для разработки.

Облачная инфраструктура проекта устроена так, чтобы не переплачивать за ресурсы, а выделять их поэтапно, когда в них действительно есть необходимость. Эта гибкость позволяет клиентам Imredi работать в комфортной среде с любыми данными. Облако также помогает поддерживать консистентность версий сервиса у всех пользователей платформы.
Imredi самостоятельно разворачивает базы данных PostgreSQL на виртуальных машинах. Не использовать облачные базы данных как сервис — стратегический выбор компании, которая пока не готова делегировать поддержу control plane провайдеру.

Разработка для application-серверов ведется на кастомизированном фреймворке Django. За счет оптимизации кода, а также выделения ресурсов и потоков внутри системы платформа определяет необходимое количество ресурсов под каждого заказчика.
Серверы macOS на М1

Команда Imredi занимается кроссплатформенной мобильной разработкой и создает нативное мобильное приложение, которое работает как единое мобильное рабочее место для заказчиков. Чтобы разработчики могли запускать ВМ и Xcode, тестировать приложение, нужен был доступ к macOS.
Ранее для поддержки процессов кроссплатформенной разработки использовался Xamarin, в прошлом году компания перешла на .NET MAUI.
Решением стал облачный сервер с процессором М1 и последними версиями macOS. Разработчики и QA-специалисты получили удобный инструмент для удаленной работы команды, а компания сократила расходы на покупку оборудования.
Локальные NVMe-диски

Чтобы работать с большим объемом данных в виртуальных машинах, Imredi использует локальные NVMe-диски. Они напрямую подключаются к серверам, что снижает задержки и обеспечивает быстродействие платформы. Локальные диски используются также для таких чувствительных зон, как application-серверы и серверы баз данных. Решение Selectel оказалось дешевле альтернативных предложений на рынке.
Балансировщик нагрузки

Облачный балансировщик нагрузки Selectel реализован модулем OpenStack Octavia. Компонент Amphorae (амфора) запускается на облачном сервере и выполняет балансировку нагрузки, используя HAProxy для проксирования трафика.

За ним на схеме расположены кластеры серверов, разделенные по ролям:

  • Application-серверы, которые обрабатывают запросы пользователей и на которых крутится система.
  • Далее расположены серверы баз данных, соединенные между собой. Это отдельные виртуалки, которые резервируются и реплицируются.
  • Серверы для аналитики и мониторинга.

Балансировщик нагрузки Selectel работает с запросами заказчиков и установленными лимитами. Imredi использует базовый балансировщик с резервированием и возможностью аварийного переключения (Active-Standby Failover) на резервную амфору в одном пуле. Используются алгоритмы: Last Connection, когда новые запросы распределяются на серверы в пуле с наименьшим количеством активных соединений; Sticky Sessions, когда новые запросы распределяются на сервер по Least Connections, а последующие запросы этой сессии распределяются на тот же сервер, не учитывая алгоритм.

Все это позволяет гибко управлять нагрузкой, обеспечивать консистентность данных в рамках обработки запросов пользователей.
Файловое хранилище

Платформа Imredi позволяет собирать самые разные данные, чтобы заказчики могли составить полную картину работы своих магазинов. Например, на основе полученных данных, можно увидеть:

  • какие задачи выполняются сотрудниками,
  • какая точка не выполняет KPI,
  • что мешает процессу,
  • где произошли изменения.

Эти данные собираются в масштабируемое облачное файловое хранилище Selectel. Там хранятся аналитические данные — они привязаны к медиаданным (фото-отчетам), к результатам работы и выполнению задач, отчетности, к коммуникациям между точками. Кроме этого, сами данные могут быть в любой момент выгружены из облака по запросу администратора. Для такого объема данных нужно много места и гибкое масштабирование.

Хранилище может быть привязано к любому серверу в любой зоне через многоуровневый VPN, что повышает отказоустойчивость. Все данные хранятся в трех копиях, что минимизирует риск их потери.
Платформа Imredi в контуре клиента

Гибкость облака Selectel помогает реализовать важную особенность платформы — единую версию релизов для всех заказчиков.

Максим Семиренко
Заместитель генерального директора и co-founder Imredi‎
«По запросу заказчика платформа может быть развернута в его контуре — мы изначально проектировали Imredi с учетом использования сервиса как в нашем облаке, так и на on-premise инфраструктуре. Это может быть необходимо клиентам, чьи требования к безопасности особенно высоки, или тем, кто выбрал стратегию развития собственного дата-центра»
Поменялись гайдлайны или планы, появились новые библиотеки безопасности в Linux — в Imredi все апдейты появляются быстро, и платформа может одновременно раздать обновления всем заказчикам. Версионность, конвейер подготовки и доставки реализованы на базе облачной инфраструктуры Selectel.
Планы развития платформы
В Imredi регулярно появляются новые функции — число клиентов и их потребности растут. На данный момент Imredi удалось сократить сроки релизов с месяца до двух недель. Цель развития платформы — архитектура, которая обеспечит более быстрый и универсальный сервис для всех клиентов.
Развитие ферм

Разработчики платформы планируют наращивать емкость всех ферм. В частности — для работы с аналитическими задачами и работой с большими массивами данных. Для этого планируется добавить несколько кастомных конфигураций, которые, как по кирпичикам, будут собирать новые машины с необходимым количеством ресурсов.


Архитектура и реорганизация данных

Сейчас платформа разграничивает заказчиков по доступным ресурсам, которые они могут взять от конкретных ферм. В ряде случаев есть специфичные требования к подсистеме обработки данных, поэтому сервер хранения данных разделен на оперативное хранение и озеро данных.

С application-серверами похожая история. В планах компании выделить из единой фермы саб-кластер с серверами, которые обрабатывают только запросы, связанные с прогнозированием и ML-алгоритмами. Это необходимый шаг для организации быстрой работы, поскольку в большинстве случаев серверы требуют вычислений с GPU.

Пока это работает так: выделяется пул серверов, которые образуют ферму фоновых обработок, не пересекающихся с задачами оперативных ответов пользователям. Виртуально это будет одна ферма, которая выполняет вычислительные задачи, но фактически внутри этой фермы будет логическое деление по блокам на подзадачи.

Если говорить про организацию Data Lake, то сейчас система реализована на физических серверах, кластере PostgreSQL и обвязке вокруг них. На этом этапе развития платформе не требуется высокая скорость обработки пакетных данных. При этом озеро данных должно поддерживать большие объемы данных.

С точки зрения подготовки данных для аналитики происходит минимизация тех данных, которые обрабатываются моментально. По этой причине платформа обходит требования к быстродействию серверов.

Максим Семиренко
Заместитель генерального директора и co-founder Imredi‎
«Мы понимаем, что в ближайшее время у нас появятся задачи, связанные с более высокой скоростью обработки данных в Data Lake, где нужна оперативная аналитика. При этом мы хотим дать возможность онлайн-доступа клиентам к этим данным. Для этого развиваем аналитическое хранилище и различные механизмы кеширования на базе выделенных серверов, чтобы обеспечить доступ к горячим витринам»
Machine Learning и AI

Основное направление использования Machine Learning и AI на платформе Imredi — прогнозирование. Прогнозирование развивается в двух направлениях:

  • Статанализ как первая фаза. Он необходим для того, чтобы данные прошли очистку, были построены тренды и распределения, проанализированы временные ряды, сглажены вариации.
  • Machine Learning и AI как вторая фаза. Нейросеть и обучение позволяет учесть ряд факторов, драйверов и зависимостей, без которых невозможно построить точный прогноз.
Сейчас Imredi предлагает несколько продуктов, где задействованы инструменты Machine Learning.

Одно из ключевых направлений — прогнозирование продаж и трафика клиентов. Его результаты используются для планирования графиков сотрудников. Для этого система рассчитывает почасовой прогноз для каждого магазина. Прогноз продаж важен и для планирования промоакций. В этом случае проводится моделирование и сравнение прогнозов по конкретным товарам или товарным категориям в зависимости от условий акции. Imredi использует актуальные подходы к реализации машинного обучения. Например, для повышения корректности прогнозов используется целый ансамбль ML-моделей.
Таким образом, платформа использует возможности Machine Learning для автоматизации процессов и поддержки принятия решений, при этом работает с данными быстро за счет кластеризации процессов.
Это интересно