EMM Всемогущий: как подчинить 170 тысяч корпоративных устройств? +5


Всем привет! Меня зовут Илья Никулин, с марта 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-ное на рынок?




К сожалению, не доступен сервер mySQL