Мобильный system design: такси с отслеживанием машины на карте
Вопрос
Спроектируйте клиент пассажира в приложении такси: заказ поездки, поиск водителя, отображение машины на карте в реальном времени, оплата, история поездок.
Коротко
Что должно быть в решении
- 1Требования: состояния заказа, частота обновления позиции, точность, офлайн и плохая сеть, батарея
- 2Состояния: машина состояний заказа на клиенте и сервере, восстановление после перезапуска
- 3Реалтайм: WebSocket или SSE на экране поездки, push для смены статуса в фоне
- 4Карта: интерполяция и анимация маркера, сглаживание шумных координат, кеш тайлов
- 5Оплата: идемпотентные операции, статус «проверяем», чек
- 6Узкие места: батарея (GPS, сеть), потеря связи, гонки статусов
Что спросит интервьюер
- Что увидит пассажир, если связь пропала на минуту?
- Как избежать прыжков машины по карте?
Разбор
Центральная идея: поездка это машина состояний (поиск, водитель назначен, едет к вам, на месте, в пути, завершена, отменена). Источник правды сервер, клиент хранит текущее состояние локально, чтобы после перезапуска сразу открыть нужный экран и дозапросить актуальное.
Реалтайм: пока экран открыт, постоянное соединение передаёт позицию машины раз в несколько секунд и события статуса; в фоне смена статусов приходит push. При обрыве клиент показывает последнюю позицию с индикатором «обновляем», переподключается с backoff и запрашивает текущее состояние целиком.
Карта: позиции приходят дискретно и с шумом, поэтому маркер анимируется между точками с учётом направления, а явные выбросы отбрасываются. Позиция пассажира берётся с нужной точностью только на экране заказа.
Оплата: привязанная карта на стороне провайдера, списание делает сервер по завершении; если ответ не пришёл, клиент проверяет статус, а не повторяет оплату. История поездок пагинируется и кешируется.
Батарея: геолокация пассажира не нужна постоянно, соединение закрывается в фоне.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Мобильный system design: истории (stories)
Следующий вопрос
Оценка объёмов в мобильном system design
Ещё по теме «Мобильный system design»
- Мобильный system design: SDK аналитики событий
- Мобильный system design: перевод денег в банковском приложении
- Мобильный system design: каталог и корзина маркетплейса
- Мобильный system design: лента новостей с картинками и видео
- Мобильный system design: загрузка фото и видео
- Мобильный system design: мессенджер
- Мобильный system design: заметки с синхронизацией между устройствами
- Пагинация ленты на мобильном