Когда Uber или Lyft потихоньку захватывают мир, все службы такси хотят себе такое же приложение.
Мы задумались о том, чтобы сделать у себя несколько вещей:
- Сделать карту, которая работает как в приложении Uber (показывать водителей рядом, которые катаются по городу, плавно заанимированные).
- Хранить маршрут, по которому ехал водитель во время заказа.
В этом докладе я хотел бы поделиться с вами о том, как мы реализовали список выше со стороны бэкенда и мобильных приложений. В качестве языка для реализации был выбран Go.
Поговорим о следующем:
- Как собираем треки с водительских приложений и как мы бережем интернет трафик у водителя.
- Реализация легковесного сетевого взаимодействия между приложением и бэкендом.
- Какие решения были использованы для того, чтобы добиться высокой производительности на бэкенде.
- Как обрабатываем и храним GPS-данные для истории.
- Как обрабатываем и в каком виде выдаем в клиентские приложения.
- Как работает анимация машинки в клиентских приложениях.
- Почему для реализации был выбран Go.
- Как мониторить и быть уверенным в том, что сервис работает.
2. Кто я
• Team Lead/Maddevs.io
• Nambataxi.kg
• Nambafood.kg
• 10 лет опыта(Sysadmin, Python/Go)
• https://github.com/meshbird/meshbird
• https://github.com/maddevsio/ariadna
25. Вытекающие задачи
• Собирать больше треков водителей
• Показывать ближайшие анимированные машины на
главном экране
• Хранить промежуточную стоимость на сервере
• Экономить трафик водителю
• Собирать трек раз в секунду
26. Расходы водителя за смену в Бишкеке
• 550 р бензин
• 200 р еда
• 200 р комиссия
• Средний чек – 100р
49. Как хранить
• В памяти
• R-tree
• Карта с водителями (ключ сессия)
• Карта с водителями (ключ номер борта)
50. Какой алгоритм на бэкенде?
• Получили пакет по UDP
• Получаем водителя со стораджа
• Если нет – получаем с Redis
• Проверяем, есть ли все нужные данные
• Делаем set в сторадже
51. Какой алгоритм на бэкенде?
• Если есть – обновляем
• Если нет – инициализируем LRU для координат
• Обновляем инфу в R-tree
65. Как стало в мобильных приложениях
• Получаем местоположение клиента
• Получаем ближайших водителей с маршрутом
• Анимируем каждую машинку
• Обновляем раз в 15 секунд
70. Самый главный слайд
• UDP+Protobuf для экономии трафика
• In-memory
• R-tree для выдачи ближайших водителей
• LRU cache для хранения последних координат
• OSRM для выравнивания треков на дороге