Архитектура GPS трекера

13 мар. 2019 г.

Всем привет! Не так давно сделал любопытное техническое задание. Задача - описать архитектуру gps трекера. Конкретно - умного ошейника для собак. Нужно было описать работу серверной части. Предусмотреть запись активности, запись gpx трека, возможность просмотра статистики. Добавить возможность получения текущего местоположения, получение списка устройств в указанной области, отправку push уведомлений. Также нужно было продумать реализацию функционала совместных прогулок.

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

Сама задача интересная. В тестовом задании описал простейшее решение. Фактически, используется не самое оптимальное решение "в лоб".

Создатели тестового задания предполагали использование геотемпорального индекса. Похоже, что термин придуман ими же. В интернете не нашел его определения. Основная идея в том, что данные местоположения разбиваются на небольшие секции. Разбиение происходит по timestamp и координатам. Фактически, шардирование. В результате поиск осуществляется в конкретном шарде. В некоторых случаях может понадобиться переключение между шардами.

Тестовое задание приняли. Прошел техническое собеседование. Правда, работать в эту компанию в итоге не пошел. Зато остались приятные впечатления от тестового задания.

Пример доступен на github.

Задание: https://github.com/antonshell/gpx-tracker-architcture/blob/master/SPECIFICATION.md

Мое решение: https://github.com/antonshell/gpx-tracker-architcture

На этом пока все. Спасибо за внимание!