Клиент
Стартап «АТИМО» — участник акселератора StartupDrive от «Газпром Нефть». Команда «АТИМО» разработала приложение для таксопарков и автопарков, которое автоматизирует получение путевых листов. Благодаря ему таксопаркам не нужно держать в штате медицинских работников для предрейсовых осмотров водителей и механиков для проверки автомобилей.
На март 2023 года приложением «АТИМО» пользовалось уже 20 таксопарков, а в базе данных хранилось более 35 тысяч записей о водителях и машинах.
Проблема: с первоначальной архитектурой было сложно масштабироваться
В первые месяцы стартап «АТИМО» работал с тремя контрагентами, у каждого из которых было по одной базе данных. Система напрямую подключалась к нужной БД, скачивала данные о водителях и машинах и формировала путевые листы. По тому же принципу работала передача в обратную сторону: таксопарк получал доступ к БД «АТИМО» и скачивал путевые листы и журналы.
На старте такое решение работало хорошо, но масштабирование на новых контрагентов было не таким очевидным. Для каждой точки подключения нужно настроить прямое соединение, затем определить формат данных в базах таксопарка и «научить» систему приводить их к нужному виду.
Кроме того, прямое соединение требует больших ресурсов. Опрос одной точки занимал от 1 до 4 Гб памяти на сервере «АТИМО», а всего было доступно 32 Гб. При существующих ресурсах клиент мог добавить в систему еще 8–10 крупных таксопарков. Большее число новых контрагентов вызвало бы заметные задержки и ошибки при получении данных.
Наконец, прямое соединение не гарантировало безопасность. Если бы злоумышленники взломали инфраструктуру любого подключенного таксопарка, через нее они могли бы получить доступ к системам АТИМО.
Масштабирование системы стало медленным, сложным и ресурсоемким. ****Чтобы решить эту проблему, «АТИМО» обратился к KT.Team.
Задача: упростить масштабирование, сэкономить ресурсы сервера и обезопасить систему клиента
Нужно наладить такое подключение таксопарка к системе клиента, при котором
- можно быстро добавить новую базу данных контрагента;
- опрос одного таксопарка будет требовать меньше памяти;
- у контрагента не будет прямого доступа к серверу и БД АТИМО;
- получать актуальные данные можно будет каждые 20 минут или чаще.
KT.Team работала только с частью бизнес-процессов клиента, которая касается соединения с базами таксопарков. То, как «АТИМО» получает информацию от автоматизированных точек осмотра, обрабатывает ее и формирует путевые листы, осталось за рамками задачи.
Контекст
Перед рейсом каждый водитель таксопарка должен получить путевой лист с данными о здоровье водителя и состоянии автомобиля. Для этого таксопарку нужно либо иметь в штате врача и механика, либо пользоваться услугами сторонних организаций.
«АТИМО» предложил таксопаркам упростить взаимодействие с подрядчиками по получению путевых листов. Стартап предоставляет своим клиентам доступ к автоматизированным точкам, где работают врач и механик. Водитель авторизуется в такой точке по номеру телефона, затем его осматривает врач, а машину проверяет механик. Все данные загружаются в систему, обрабатываются и на их основе формируется электронный путевой лист.
Чтобы сформировать путевой лист, приложению «АТИМО» нужны данные о водителях и автомобилях:
- номер мобильного телефона;
- ФИО водителя;
- его дата рождения;
- данные о водительском удостоверении;
- свидетельство о регистрации автомобиля;
- номер страхового полиса ОСАГО.
Приложение должно подключиться к базе данных (БД) таксопарка, чтобы забрать их.
У одного таксопарка может быть несколько баз данных. Например, разные филиалы пользуются разными базами или таксопарк поддерживает отдельно БД по водителям и БД по автомобилям. У каждого из таксопарков есть свои правила хранения информации: могут отличаться названия полей в таблицах и форматы данных. Это нужно учитывать и приводить все поля к единому виду, чтобы система могла их обработать.
Одни и те же данные у разных таксопарков хранятся в разных форматах
Журналы медицинских и технических осмотров, готовые путевые лист хранятся на сервере «АТИМО». Если таксопарку нужно получить эти данные, он подключается к серверу, авторизуется и скачивает их.
Схема взаимодействия сервисов до начала проекта
KT.Team внедрила сервисную шину для передачи данных от таксопарков к «АТИМО» и обратно
KT.Team спроектировала новую схему передачи данных так, чтобы у системы «АТИМО» осталась одна точка подключения — сервисная шина (ESB). То есть таксопарки больше не могут напрямую соединяться с БД «АТИМО», чтобы передать или получить данные. Безопасность взаимодействия повысилась для всех участников схемы.
Шина подключается к БД таксопарка, скачивает данные о водителях и автомобилях и загружает их в собственное хранилище. Оттуда данные отправляются в «АТИМО».
Затем «АТИМО» возвращает шине готовые путевые листы. ESB скачивает их и загружает во второе хранилище. После этого любой таксопарк может отправить шине запрос и получить путевые листы для своих водителей.
ESB форматирует данные из БД таксопарков, чтобы передать их системе «АТИМО» в готовом к обработке виде. Внутри каждого сервиса настроены правила маппинга.
KT.Team меняла архитектуру решения трижды, чтобы добиться оптимального результата. В первой версии шина опрашивала все БД с помощью одного сервиса.
Такой подход хорошо экономил ресурсы сервера, но не был отказоустойчивым. Из-за того, что все запросы шли друг за другом, ошибка при подключении к первому таксопарку могла оборвать все последующие.
Во второй версии архитектуры шина подключалась к каждой базе через отдельный сервис. Это требовало чуть больше ресурсов сервера, но исключало массовый сбой из-за одной недоступной БД или другой ошибки.
Кроме того, в этом решении было много дополнительных этапов, например, сбор и запись в лог всех ошибок. Они требовали дополнительного времени и памяти для обработки, поэтому архитектуру нужно было облегчить и упростить.
Итоговая версия архитектуры также основана на отдельных сервисах для каждой точки подключения.
Все сервисы работают одинаково:
- подключаются к БД таксопарка;
- скачивают данные;
- приводят их к формату, который использует система клиента;
- записывают новые данные в хранилище;
- удаляют неактуальные данные.
Чтобы добавить новый таксопарк, нужно скопировать один из существующих сервисов и настроить его: например, заменить правила маппинга. Чтобы упростить для клиента эту задачу, KT.Team использовала low-code-решение Mule как основу шины. Этот инструмент не требует навыков программирования, поэтому работать с ним может любой сотрудник «АТИМО».
Кроме того, KT.Team подготовила пошаговую инструкцию для настройки точки подключения, в которой описаны все нюансы.
Результаты
- Сервисная шина позволила «АТИМО» подключить 20 таксопарков. Это 42 отдельных точки подключения, так как у многих контрагентов больше одной базы данных.
- Шина подключается к каждому таксопарку через отдельный сервис. Даже если один из сервисов выйдет из строя или БД таксопарка окажется недоступна, это никак не повлияет на данные других контрагентов.
- Подключение к БД таксопарка занимает меньше 1 секунды для большинства контрагентов.
- На весь процесс от подключения к таксопарку до загрузки готовой информации в БД «АТИМО» уходит максимум две минуты. Причем, это значение справедливо для самых «медленных» контрагентов с устаревшими системами управления БД или низкой скоростью соединения.
- Отдельные сервисы для каждой БД и простая схема их работы помогли сэкономить ресурсы сервера. Каждый запрос теперь требует 300–500 Мб вместо 1–4 Гб. Подключаться можно ко всем таксопаркам одновременно.
- Таксопарки не подключаются напрямую к «АТИМО», то есть нет риска, что систему клиента взломают через плохо защищенную БД контрагента.
- Система легко масштабируется. Клиент сам копирует и настраивает новые точки подключения по инструкции. Человек без опыта разработки может добавить таксопарк за пару часов.