EMM Всемогущий: как подчинить 170 тысяч корпоративных устройств?
Всем привет! Меня зовут Илья Никулин, с марта 2021 года я руковожу командой по развитию EMM-системы «Магнита». Каждый, кто решает рабочие задачи с помощью мобильных устройств, знает, что для большой компании важно «не тормозить»: быстро доставлять точную информацию покупателям, сотрудникам, поставщикам. А еще все корпоративные устройства нужно постоянно обслуживать. Именно Enterprise Mobility Management-системы позволяют удаленно управлять мобильными устройствами, отслеживать их работу и получать безопасный доступ к корпоративным информационным ресурсам.
На старте 20 тысяч устройств, на финише 170 тысяч
«Магнит» — это более 300 тысяч сотрудников, 45 логистических центров, 22 тысячи магазинов, 17 производственных комплексов и 5 тысяч грузовиков в автопарке. Чтобы все работало без сбоев, также необходимо контролировать и обслуживать целый парк корпоративных мобильных устройств: терминалы сбора данных, прайс-чекеры, различные планшеты. И это еще мы не берем в расчет устройства в офисах по типу принтеров.
До 2014 года специалисты команды сопровождения оборудования ездили по объектам и обслуживали оборудование вручную. Несложный расчет показывал трудоемкость процесса:
Настройка одного устройства — около 10 минут рабочего времени;
Допустим, необходимо обновить 25 тысяч устройств;
На их обслуживание уходило более 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.
Первый элемент системы — это веб-интерфейс, инструмент администратора для управления парком устройств и контролем его использования.
Бэкенд представляет из себя 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-ное на рынок?