SlideShare a Scribd company logo
1 of 71
Собираем GPS-треки от
водителей в такси раз в
секунду, экономя трафик
Андрей Минкин MadDevs
Кто я
• Team Lead/Maddevs.io
• Nambataxi.kg
• Nambafood.kg
• 10 лет опыта(Sysadmin, Python/Go)
• https://github.com/meshbird/meshbird
• https://github.com/maddevsio/ariadna
Бишкек
• 100+ служб такси
• ~1M жителей
Namba taxi
• 4 года на рынке
• Не менее 8к заказов в сутки
• 600+ водителей на линии
• 500к+ довольных клиентов
Что такое такси
• Клиенты
• Водители
• Операторы
AVG response time
• Водители 20 ms
• Операторы 2.5 ms
Предыстория
С чего мы начинали
Обновление местоположения
• Водитель: раз в 15 секунд
• Клиент: раз в 15 секунд
А что еще происходит
• Какой заказ сейчас выполняет
• Какой заказ будет следующим
• Есть ли открытые тревоги
Первые пробы
• Делаем запрос – сохраняем координаты
• Делаем запрос – анимируем машину
Первые проблемы
• Машинку колбасит
• Машинка едет по полям, лесам
Решение
• OSRM
Пробуем еще
• Таймаут – 15 секунд
• Делаем запрос – сохраняем координаты
• Шлем координаты
• Делаем запрос в OSRM – выдаем маршрут в OSRM
• Получаем маршрут – анимируем маркер
Проблемы
• Одностороннее движение
Решение
• Проверка на 20 метров
Релизнулись
Недочеты
• Расчет стоимости – у водителя
• 1 трек в 15 секунд – мало
• Проблемы с GPS у водителя
Проблемы с GPS
• Плохой девайс изначально
• GPS модуль умирает со временем
• Ямы и «глушилки»
Новые фичи
• Хотим все это на главном экране
Вытекающие задачи
• Собирать больше треков водителей
• Показывать ближайшие анимированные машины на
главном экране
• Хранить промежуточную стоимость на сервере
• Экономить трафик водителю
• Собирать трек раз в секунду
Расходы водителя за смену в Бишкеке
• 550 р бензин
• 200 р еда
• 200 р комиссия
• Средний чек – 100р
Расходы на интернет
• 100 р на водителя за смену
• 100 000 р в день.
Что такое трек и как он выглядит
• Latitude
• Longitude
• Session
• OrderID
• TripCost
Экономим трафик водителю
• Уложить 1 трек в 100 байт
• И чтобы работало быстро
Огласите весь список, пожалуйста
• HTTP
• WebSockets
• TCP
• UDP
Минусы http
• Много хедеров
• 18 байт оверхеда (GET / HTTP/1.0<CR><LF> <CR><LF>)
• Работает поверх TCP
Минусы websocket
• Работают поверх http
• Нужно сделать upgrade
• На установление соединения 2 запроса
• Нестабилен на плохом соединении
Минусы TCP
Минусы TCP
• Долго
• latency
• Дорого
• 20 байт на пакет
Почему UDP
• Шлем только датаграммы
• Гарантии не нужны
• Минимализм
Чем сериализировать?
• JSON 
• MsgPack 
• Protocol Buffers 
Размер данных
137
127
42
JSON
MsgPack
Protobuff
Итого
• 42 байт пейлоада
• + 20 байт IP хедеров
• = 62 байт на трек
• = 2 мегабайта за смену
• = 6 рублей в деньгах
Хранение
Какие данные хранить?
• Сессия водителя
• Номер борта
• ID заказа
• Сумма поездки
• Последнее местоположение
• N последних точек
Что есть
• Percona
• Redis
• Elasticsearch
Нужен геоиндекс
• KD-tree
• R-tree
Какие требования к геоиндексу
• Поиск N ближайших точек
• Сбалансированное дерево
KD-Tree
Минусы KD-tree
• Несбалансированное дерево
• Поиск только одной ближайшей точки
R-tree
Что не так с водителями
• Плохая связь с интернетом
• Выключил телефон
• Села батарейка
• Выгрузил приложение из памяти
• И еще полдесятка причин
• Нужен Expire
• Нужен LRU для хранения координат
Как хранить
• В памяти
• R-tree
• Карта с водителями (ключ сессия)
• Карта с водителями (ключ номер борта)
Какой алгоритм на бэкенде?
• Получили пакет по UDP
• Получаем водителя со стораджа
• Если нет – получаем с Redis
• Проверяем, есть ли все нужные данные
• Делаем set в сторадже
Какой алгоритм на бэкенде?
• Если есть – обновляем
• Если нет – инициализируем LRU для координат
• Обновляем инфу в R-tree
Варианты для реализации
• Python
• Ruby
• Node.js
• Go
Go
• Строго типизированный и компилируемый
• Маленький размер docker-контейнеров
• Малый расход ресурсов
• Меньше зоопарк
Как реализовывали
• https://github.com/dhconnelly/rtreego
• LRU – навелосипедили
• UDP – stdlib
• https://github.com/golang/protobuf
• HTTP API
HTTP API
• Ближайшие водители
• Удалить водителя (по номеру борта или сессии)
• Получить информацию о поездке
• Получить маршрут по водителю
Куда интегрировать
• Бэкенд для водителей
• Бэкенд для клиентов
Как оно выглядит
• Ядро – Django
• Водители – Twisted
• Клиенты - Django
А архитектурно
Nginx
AppBackend
Core
Core
AppBackend Core
Водители
Nginx
Twisted
Core
Core
Twisted Core
Водители
Водитель
Location
backend
Core
Twisted
Клиенты
Клиент
Location
backend
Core
App
backend
Как эксплуатировать
• Логи в stdout
• Метрики в Graphite
• Чеки в Sensu
• Полезный /status
• Боты
Полезный /status
• Uptime since
• HTTP Statuses counters
• Total requests
Боты
• Эмуляция движения водителя
• Эмуляция работы клиента
Как стало в мобильных приложениях
• Получаем местоположение клиента
• Получаем ближайших водителей с маршрутом
• Анимируем каждую машинку
• Обновляем раз в 15 секунд
Сравнение результатов
Самый главный слайд
• UDP+Protobuf для экономии трафика
• In-memory
• R-tree для выдачи ближайших водителей
• LRU cache для хранения последних координат
• OSRM для выравнивания треков на дороге
Вопросы
• https://github.com/maddevsio
• https://github.com/gen1us2k
• Skype: gen1us2k

More Related Content

What's hot

Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователяAnatoliy Orlov
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Andrey Smirnov
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на GoAndrey Smirnov
 
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)Ontico
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...SQALab
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Ontico
 
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереBadoo Development
 
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Badoo Development
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Andrey Smirnov
 
Андрей Акиньшин
Андрей АкиньшинАндрей Акиньшин
Андрей АкиньшинCodeFest
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 

What's hot (18)

Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователя
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
 
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
 
Андрей Акиньшин
Андрей АкиньшинАндрей Акиньшин
Андрей Акиньшин
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 

Similar to Как собирать gps треки раз в секунду, экономя трафик / How to Collect GPS Tracks Every Second Without Wasting Traffic

Работа с геоданными в Go GDGNSK / Work with Geodata in Go
Работа с геоданными в Go GDGNSK / Work with Geodata in GoРабота с геоданными в Go GDGNSK / Work with Geodata in Go
Работа с геоданными в Go GDGNSK / Work with Geodata in GoMad Devs
 
gRPC в продакшне для мобильных приложений
gRPC в продакшне для мобильных приложенийgRPC в продакшне для мобильных приложений
gRPC в продакшне для мобильных приложенийMad Devs
 
Рефакторинг монолита в микросервисы на Go
Рефакторинг монолита в микросервисы на GoРефакторинг монолита в микросервисы на Go
Рефакторинг монолита в микросервисы на GoAndrew Minkin
 
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...Mad Devs
 
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...Mad Devs
 
как строить архитектуру для отказоустойчивой службы такси
как строить архитектуру для отказоустойчивой службы таксикак строить архитектуру для отказоустойчивой службы такси
как строить архитектуру для отказоустойчивой службы таксиAndrew Minkin
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsDaniel Podolsky
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)Ontico
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Andrew Minkin
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Mad Devs
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляютсяMax Lapshin
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Mad Devs
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Колёса Крыша Маркет
 
Марат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная системаМарат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная системаYandex
 
Smirnov Twisted Python
Smirnov Twisted PythonSmirnov Twisted Python
Smirnov Twisted PythonHighLoad2009
 
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)Ontico
 
подходы к проектрованию, разработке и развертыванию больших систем
подходы к проектрованию, разработке и развертыванию больших системподходы к проектрованию, разработке и развертыванию больших систем
подходы к проектрованию, разработке и развертыванию больших системDenis Pavlov
 

Similar to Как собирать gps треки раз в секунду, экономя трафик / How to Collect GPS Tracks Every Second Without Wasting Traffic (20)

Работа с геоданными в Go GDGNSK / Work with Geodata in Go
Работа с геоданными в Go GDGNSK / Work with Geodata in GoРабота с геоданными в Go GDGNSK / Work with Geodata in Go
Работа с геоданными в Go GDGNSK / Work with Geodata in Go
 
gRPC в продакшне для мобильных приложений
gRPC в продакшне для мобильных приложенийgRPC в продакшне для мобильных приложений
gRPC в продакшне для мобильных приложений
 
Рефакторинг монолита в микросервисы на Go
Рефакторинг монолита в микросервисы на GoРефакторинг монолита в микросервисы на Go
Рефакторинг монолита в микросервисы на Go
 
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
 
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
 
как строить архитектуру для отказоустойчивой службы такси
как строить архитектуру для отказоустойчивой службы таксикак строить архитектуру для отказоустойчивой службы такси
как строить архитектуру для отказоустойчивой службы такси
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляются
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Марат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная системаМарат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная система
 
Smirnov Twisted Python
Smirnov Twisted PythonSmirnov Twisted Python
Smirnov Twisted Python
 
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
 
подходы к проектрованию, разработке и развертыванию больших систем
подходы к проектрованию, разработке и развертыванию больших системподходы к проектрованию, разработке и развертыванию больших систем
подходы к проектрованию, разработке и развертыванию больших систем
 

More from Mad Devs

Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...Mad Devs
 
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Дружелюбнй онбординг: как с увеличением количества не потерять качество Дружелюбнй онбординг: как с увеличением количества не потерять качество
Дружелюбнй онбординг: как с увеличением количества не потерять качество Mad Devs
 
Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101. Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101. Mad Devs
 
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.Mad Devs
 
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy FedorenkoMad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy FedorenkoMad Devs
 
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...Mad Devs
 
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий КононенкоMaв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий КононенкоMad Devs
 
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Лайфхаки менеджмента на удаленке от Дмитрия КононенкоЛайфхаки менеджмента на удаленке от Дмитрия Кононенко
Лайфхаки менеджмента на удаленке от Дмитрия КононенкоMad Devs
 
Mad Talks. Astashov_splitbrain
Mad Talks. Astashov_splitbrainMad Talks. Astashov_splitbrain
Mad Talks. Astashov_splitbrainMad Devs
 
Flutter vs Native App Development
Flutter vs Native App DevelopmentFlutter vs Native App Development
Flutter vs Native App DevelopmentMad Devs
 
Mad Talks. Marketing tips for tech companies
Mad Talks. Marketing tips for tech companiesMad Talks. Marketing tips for tech companies
Mad Talks. Marketing tips for tech companiesMad Devs
 
The paradox of choice in design
The paradox of choice in designThe paradox of choice in design
The paradox of choice in designMad Devs
 
Git and Github for Beginners
Git and Github for Beginners Git and Github for Beginners
Git and Github for Beginners Mad Devs
 
How to hire freelancers
How to hire freelancersHow to hire freelancers
How to hire freelancersMad Devs
 
Ethereum blockchain
Ethereum blockchainEthereum blockchain
Ethereum blockchainMad Devs
 
"Outside In". Web application testing.
"Outside In". Web application testing."Outside In". Web application testing.
"Outside In". Web application testing.Mad Devs
 
Asynchrony in python exists and why should you use it
Asynchrony in python exists and why should you use itAsynchrony in python exists and why should you use it
Asynchrony in python exists and why should you use itMad Devs
 
Ethereum: аспекты разработки смарт-контрактов
Ethereum: аспекты разработки смарт-контрактовEthereum: аспекты разработки смарт-контрактов
Ethereum: аспекты разработки смарт-контрактовMad Devs
 
Why we sleep. Michael Ivashenko
Why we sleep. Michael IvashenkoWhy we sleep. Michael Ivashenko
Why we sleep. Michael IvashenkoMad Devs
 
Удаленное управление приложением и его аналитика
Удаленное управление приложением и его аналитикаУдаленное управление приложением и его аналитика
Удаленное управление приложением и его аналитикаMad Devs
 

More from Mad Devs (20)

Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
 
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Дружелюбнй онбординг: как с увеличением количества не потерять качество Дружелюбнй онбординг: как с увеличением количества не потерять качество
Дружелюбнй онбординг: как с увеличением количества не потерять качество
 
Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101. Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101.
 
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
 
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy FedorenkoMad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
 
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
 
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий КононенкоMaв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
 
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Лайфхаки менеджмента на удаленке от Дмитрия КононенкоЛайфхаки менеджмента на удаленке от Дмитрия Кононенко
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
 
Mad Talks. Astashov_splitbrain
Mad Talks. Astashov_splitbrainMad Talks. Astashov_splitbrain
Mad Talks. Astashov_splitbrain
 
Flutter vs Native App Development
Flutter vs Native App DevelopmentFlutter vs Native App Development
Flutter vs Native App Development
 
Mad Talks. Marketing tips for tech companies
Mad Talks. Marketing tips for tech companiesMad Talks. Marketing tips for tech companies
Mad Talks. Marketing tips for tech companies
 
The paradox of choice in design
The paradox of choice in designThe paradox of choice in design
The paradox of choice in design
 
Git and Github for Beginners
Git and Github for Beginners Git and Github for Beginners
Git and Github for Beginners
 
How to hire freelancers
How to hire freelancersHow to hire freelancers
How to hire freelancers
 
Ethereum blockchain
Ethereum blockchainEthereum blockchain
Ethereum blockchain
 
"Outside In". Web application testing.
"Outside In". Web application testing."Outside In". Web application testing.
"Outside In". Web application testing.
 
Asynchrony in python exists and why should you use it
Asynchrony in python exists and why should you use itAsynchrony in python exists and why should you use it
Asynchrony in python exists and why should you use it
 
Ethereum: аспекты разработки смарт-контрактов
Ethereum: аспекты разработки смарт-контрактовEthereum: аспекты разработки смарт-контрактов
Ethereum: аспекты разработки смарт-контрактов
 
Why we sleep. Michael Ivashenko
Why we sleep. Michael IvashenkoWhy we sleep. Michael Ivashenko
Why we sleep. Michael Ivashenko
 
Удаленное управление приложением и его аналитика
Удаленное управление приложением и его аналитикаУдаленное управление приложением и его аналитика
Удаленное управление приложением и его аналитика
 

Как собирать gps треки раз в секунду, экономя трафик / How to Collect GPS Tracks Every Second Without Wasting Traffic

Editor's Notes

  1. Дать контекст про мобильное приложение
  2. Сделать или длиннее или успеть перебежать
  3. Что такое osrm рассказать про map matching и роуты
  4. Найти отзывы если есть по фиче
  5. Добавить рассказы
  6. Ради этой мелкой фичи трогать такие стораджи не целесообразно Сделать переход зачем геоиндекс
  7. Тут остановится и рассказать про LRU
  8. Рассказать про меньший зоопарк. Почему стали переходить. В чем разница между контейренами и про докер пару слов
  9. Сослаться на прошлогодний доклад
  10. Расписать про бота