Отделите поток координат, хранилище последних позиций и долговременную историю. Карта запрашивает текущие точки по bounding box, а обновления получает через WebSocket/SSE только для видимой области.
Проектирование системы отслеживания курьеров
Отделите поток координат, хранилище последних позиций и долговременную историю. Карта запрашивает текущие точки по bounding box, а обновления получает через WebSocket/SSE только для видимой области.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Требуется разработать архитектуру платформы мониторинга курьеров, учитывающую следующие условия.
Функциональные требования:
- Вывод текущих координат всех курьеров, находящихся внутри видимой области карты.
- Получение уведомлений о перемещении курьеров в режиме реального времени.
- Возможность просмотра полного маршрута выбранного курьера за текущий день.
- Доступ к истории перемещений за предыдущие даты.
Нефункциональные требования:
- Хранить данные о перемещениях курьеров в течение одного года.
- Максимальная задержка при обновлении информации не должна превышать 60 секунд.
Задача: спроектировать системную архитектуру, включающую:
- Хранение и обработку географических данных.
- Выбор подходящего механизма передачи данных в реальном времени.
- Организацию агрегации и долговременного сохранения маршрутов.
- Обеспечение масштабируемости решения и минимизации задержек.
Ответ
Отделите поток координат, хранилище последних позиций и долговременную историю. Карта запрашивает текущие точки по bounding box, а обновления получает через WebSocket/SSE только для видимой области.
Клиент курьера отправляет координаты с device timestamp и порядковым номером; сервер аутентифицирует устройство, проверяет диапазоны и дедуплицирует сообщения. Поток через брокер обновляет геоиндекс последних позиций и append-only историю, разбитую по дате/курьеру.
Маршрут читается по courier_id и интервалу времени; старые данные сжимаются и удаляются по годовой retention-политике. Подписки карты фильтруются по ячейкам геосетки, при разрыве соединения выполняется ресинхронизация. Бюджет 60 секунд распределите между частотой отправки, очередью и доставкой. Для офлайн-курьера показывайте время последнего обновления, а не обещайте свежие координаты.