Всем привет! Меня зовут Илья Никулин, с марта 2021 года я руковожу командой по развитию EMM-системы «Магнита». Каждый, кто решает рабочие задачи с помощью мобильных устройств, знает, что для большой компании важно «не тормозить»: быстро доставлять точную информацию покупателям, сотрудникам, поставщикам. А еще все корпоративные устройства нужно постоянно обслуживать. Именно Enterprise Mobility Management-системы позволяют удаленно управлять мобильными устройствами, отслеживать их работу и получать безопасный доступ к корпоративным информационным ресурсам.

На старте 20 тысяч устройств, на финише 170 тысяч 

«Магнит» — это более 300 тысяч сотрудников, 45 логистических центров, 22 тысячи магазинов, 17 производственных комплексов и 5 тысяч грузовиков в автопарке. Чтобы все работало без сбоев, также необходимо контролировать и обслуживать целый парк корпоративных мобильных устройств: терминалы сбора данных, прайс-чекеры, различные планшеты. И это еще мы не берем в расчет устройства в офисах по типу принтеров.

До 2014 года специалисты команды сопровождения оборудования ездили по объектам и обслуживали оборудование вручную. Несложный расчет показывал трудоемкость процесса:

  1. Настройка одного устройства — около 10 минут рабочего времени;

  2. Допустим, необходимо обновить 25 тысяч устройств;

  3. На их обслуживание уходило более 4 тысяч часов или 173 дня рабочего времени.

Мы открыли IT-лабораторию в Иннополисе и начали инхаус-разработку собственной EMM-системы еще в 2019 году. Сначала развернули новое решение на 20 тысячи устройствах в магазинах и распределительных центрах. EMM-система позволяла провести операцию на всех этих устройствах за 10 минут силами одного специалиста.

Сегодня «Магнит» собирает информацию с десятков тысяч корпоративных мобильных устройств. Большая их часть обеспечивает учет и контроль движения товаров от поставщиков до корзины покупателя.

Подход номер один

Первая EMM-система, которую мы начали внедрять еще в 2014 году, была готовым решением.  Мы закупили лицензии на часть парка оборудования и интегрировали систему с собственной инфраструктурой. 

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

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

All inclusive — не наш выбор 

Мы решили разработать собственную EMM-систему не только потому, что хотели исключить расходы на лицензии и обновления. Мы стремились обеспечить информационную безопасность и кастомизацию — учесть особенности наших бизнес-процессов. Коробочное решение сложно полностью адаптировать под потребности компании и синхронизировать с его ИТ-инфраструктурой. 

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

  • управление устройствами на Windows 10;

  • управление телекоммуникациями;

  • управление данными голосовых и SMS устройств;

  • управление роумингом;

  • управление FTP-серверами, которые связывают устройства на WinCE с консолью UEM для передачи профилей, приложений и файлов.

Запуск MVP 

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

  • управление политиками безопасности;

  • удаленный мониторинг состояния устройств; 

  • установка и обновление приложений в удаленном режиме; 

  • отчеты по устройствам и приложениям;

  • группировка устройств.

Сотни тысяч единиц оборудования разных типов и моделей поддерживали разные типы и версии операционных систем: от нескольких версий Android до Win CE. До старта разработки мы определили целевые типы операционных систем и устройств. Затем обратились к вендорам: надо было подписать ключи нашего системного приложения, чтобы оно корректно работало на устройствах вендора и имело именно те права, которые необходимы для управления ими.

Так мы вошли в стадию пилота. MVP был готов через полгода после старта проекта. Мы протестировали его на небольшом количестве устройств, которые использовались в магазине. Тестовый запуск на терминалах сбора данных (ТСД) прошел успешно. 

Масштабировали проект поэтапно: несколько магазинов, филиал, несколько филиалов по стране, все устройства в сети магазинов. К лету 2020 года развернули систему на более чем 20 тыс. ТСД.

Архитектура системы

Мы остановились на следующих решениях: 

  • СУБД: Oracle;

  • Mobile Backend: Kotlin, Ktor;

  • Web Backend: Python, Django rest framework;

  • Web interface: React js;

  • Мобильное приложение: Android SDK, Kotlin. 

Архитектура EMM-системы «Магнита»
Архитектура EMM-системы «Магнита»

Первый элемент системы — это веб-интерфейс, инструмент администратора для управления парком устройств и контролем его использования.

Бэкенд представляет из себя http-сервер, который работает с базой данных и возвращает ответ. В основе http-сервера — фреймворк Django со множеством подключенных элементов. Это, например, DRF, Swagger, pytest и другие.

Фронтенд —  это SPA, http-клиент. Он написан на библиотеке react js с использованием typescript.

Для UI-части использовали библиотеку MaterialUI и Devextreme reactive - для таблиц.

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

В качестве стиля разработки используется TDD. Он основан на повторении очень коротких циклов: сначала пишем тесты, потом сами фичи. Широко применяем аннотации типов и статические анализаторы кода.

Второй элемент — это база данных. Она реализована на Oracle. В дальнейшем возможен вариант смены стека.

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

Мобильное приложение создано на Kotlin с использованием corutine, room, retrofitc, coin navigation. Оно состоит из четырех компонентов: приложение deviceowner, приложение с системными правами и лаунчер, которые общаются между собой по AIDL, vpn-клиент. Все компоненты могут быть обновлены удаленно через консоль, а скоро добавим и возможность первичной настройки устройств по QR-коду.

Сейчас работаем только в режиме Company-owned, но через несколько месяцев система будет адаптирована для работы с устройствами Samsung посредством KNOX SDK.

Четвертый элемент — DevOps-часть. Работаем с инфраструктурой и переносим код в приложение мы при помощи Docker и Ansible. Мы используем функциональность контейнеризации, фактически вся сборка изначально происходит в контейнере. Там же она тестируется и «заливается» в локальный Docker-репозиторий, откуда устанавливается либо автоматически на тестовое окружение, либо ручным запуском с помощью Ansible на прод.  Так обеспечиваем защиту от ошибок и случайного деплоя. В итоге быстро создаем контейнер с приложением, поддерживаем версионность приложений и простоту работы с артефактами.

Инфраструктурная архитектура предусматривает в качестве точки входа Virtual IP, который распределяет трафик на два балансера и далее на 2 docker-хоста. Конфигурация простая и надежная, используем связку nginx+Keepalived+HAProxy. 

В рамках такой схемы можно реализовать бесшовное горизонтальное масштабирование. При нехватке мощностей можно просто добавить docker-хост или балансер.

Интерфейс пользователя

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

Поговорим о консоли администратора. Она открывается на ПК через браузер. Посредством нее администратор осуществляет контроль и управление всеми устройствами в системе:

Скрин веб-консоли администратора
Скрин веб-консоли администратора

На панели слева есть большой набор инструментов для администраторов — сотрудников службы сопровождения:

  • возможность объединять устройства в проекты и назначать на них разные политики в зависимости от того, где и у кого находятся ТСД / прайс-чекеры / планшеты, какие задачи они выполняют;

  • возможность видеть весь список устройств с информацией об их местонахождении, ОС, установленных приложениях, серийных номерах и других данных;

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

  • блок по управлению приложениями, который разрешает, например, загружать apk-файлы наших корпоративных приложений и массово устанавливать / обновлять их на устройствах;

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

  • блок с отчетами, которые содержат информацию об устройствах и их использовании в разных разрезах.

Функциональность мы будем расширять. Например, планируем реализовать интерфейс доступа к файловой системе устройства и интерфейс удаленного управления устройством.

Ещё одна консоль управления появится у другой нашей группы пользователей — службы эксплуатации. Она позволит им удаленно управлять принтерами компании.

Работа в Иннополисе

Ядро системы находится в Иннополисе, при этом в нашей команде есть сотрудники из Санкт-Петербурга, Москвы, Перми и Екатеринбурга. Мы закрываем потребности проекта в системном бизнес-анализе, мобильной и web-разработке, разработке БД, DevOps и тестировании. Планируем дополнительно привлекать iOS и desktop-разработчиков. Запуск и поддержание такой масштабной системы невозможно произвести силами одной команды. В этом участвуют большое количество других подразделений и управлений из tech-блока «Магнита».

Опыт нашей команды в Иннополисе стал успешным пилотным проектом для компании в хабе. В ближайшие месяцы мы откроем обновленный и расширенный офис в Иннополисе. Ожидаем, что в нем к нам присоединятся команды других IT-направлений.

Что дальше?

На сегодня мы прошли примерно треть пути по разработке системы. Планируем расширять нашу ЕММ на другие модели терминалов сбора данных и прайс-чекеров и адаптировать для работы на планшетах.

В части нового функционала в ближайшее время мы планируем добавить следующее:

  • удаленный доступ к файловой системе устройства;

  • возможность работы из внешней сети;

  • удаленная установка прошивки;

  • съемка и отправка видео с экрана.

Также нам предстоит улучшить систему в части UX/UI. Отдельным продуктом в нашем проекте будет решение для личных мобильных устройств сотрудников. Оно позволит получать безопасный доступ к корпоративным ресурсам и почте, а также просматривать, редактировать и сохранять файлы внутри защищенного хранилища. 

Еще одно направление, в котором мы планируем развивать систему — удаленное управление стационарными и мобильными принтерами компании.

Мы рассчитываем полностью отказаться от применения сторонних EMM-систем и минимизировать ручную работу с устройствами. Также перед нами откроется интересная перспектива вывода собственного софта на рынок.

А как вы относитесь к такой возможности? Выводили что-то enterprise-ное на рынок?

Комментарии (4)


  1. ymisnik
    23.11.2021 13:27
    +2

    Отличная статья, было бы интересно узнать как формировался business case и насколько эффективнее было разрабатывать свое решение по сравнению с покупкой коробки


    1. Niksonkey Автор
      26.11.2021 10:44

      Спасибо!

      По сути здесь можно говорить о двух этапах:

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

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

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

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


  1. Ok_Lenar
    25.11.2021 15:05

    Раз уж вы работаете в этой системе.. мобильное приложение магнита, то в котором карта покупателя это какой-то лютый отстой, каждый раз стоя на кассе приходится по две минуты стоять ждать его загрузки, архитектора этого приложения надо бы поменять, на кой хрен коннектиться к серверу до выдачи кода?


    1. arxell
      26.11.2021 10:53

      вы можете добавить карточку в apple/google кошелек