SlideShare a Scribd company logo
1 of 34
Использование геолокации
в Badoo
Андрей Воликов 17.06.2016
Badoo это:
66
80
300M
пользователей
200
стран
300инженеров
80
75%
мобильные
приложения
Почему тема важна для вас:
✦ Узнаете какие возникают проблемы при работе с геоданными
✦ Мы - делали ошибки, вы - сможете их избежать
✦ Геолокация - это интересно!
Каков план:
✦ Проблемы добычи координат
✦ Проблемы хранения и обработки координат
✦ Использование геолокации на примере наших фич
Проблемы добычи координат
Что такое геопозиция
✦ latitude
✦ longitude
✦ altitude
✦ accuracy
Как добыть координаты
✦ Источников много: gps, wifi, gsm
✦ Мобильные платформы сделали все за нас?
Проблема:
уговорить пользователей
20%
молчуны
25%
web
55%
присылают
координаты
Проблема: жор батареи
Проблема: все врут
✦ Недостаточно точные координаты
✦ Слишком частые координат
✦ Координаты из будущего
✦ Координаты из прошлого
✦ Невалидные координаты
✦ Подозрительные координаты
Проблема: разные платформы
✦ Жесткий контроль
✦ Frequent locations
✦ 200 координат в день
✦ Свобода для программиста
✦ Зоопарк
✦ 475 координат в день
✦ 185 координат в день ✦ 0.03 координаты в день
2 700 000 000
точек в день
Результат: обрабатываем
Проблемы хранения и обработки
координат
Проблема: координаты устаревают
Проблема: неравномерное
распределение
Проблема: высокая нагрузка
Простое решение: глобус
✦ Разные по площади элементы
✦ Поиск на границах областей не дает
нужных результатов
✦ Не решает проблемы неравномерного
распределения
✦ Сложно решать проблемы нагрузки на
одну ноду
Рабочее решение: триангуляция
✦ Одинаковые по площади
элементы
✦ Решает проблему поиска на
границах разбиения
✦ Не решает проблемы
неравномерного распределения
✦ Cложно решать проблемы
нагрузки на один треугольник
Оптимальное решение: Google S2
✦ Используется Google, Foursquare, Uber
✦ Иерархическая модель - возможность объединения ячеек в кластера
✦ Каждый квадратный сантиметр может быть представлен в виде int 64
✦ Разбиение Земли на одинаковые по площади куски
✦ Библиотеки для всех популярных языков
Примеры использования геолокации
Задачи:
✦ Определить город по координатам
✦ Система пересечений пользователей
Определить город по координатам
Нужна база центров городов и контуров
✦ Скачать бесплатно
✦ Купить (25$ - 1500$)
✦ Купить и допиливать ($$)
● Ручная модерация
● Open street map
● Google maps
150 000
Городов с контурами
Стратегия определения города
✦ Проверяем попадают ли координаты внутрь какого-нибудь контура
✦ Ищем ближайшую границу города
✦ Ищем ближайший центр города
Пересечения
пользователи находились на
расстоянии 50 метров в интервале
времени не более 5 минут
✦ Список пересечений за 48 часов
✦ Храним все пересечения за 90 дней
Как это сделать?
✦ Подготовка координат
✦ Доставка координат в демон
✦ Обработка в демоне
✦ Сохраняем в хранилище
✦ Актуализируем данные
✦ Удаляем старые пересечения
Обработка координат
PHP
Filter QueueInterpolation
PHP
PHP
Daemon
Daemon
PHP
PHP
Queue In
Queue Out
Processor
GC
Filter
Храним пересечения в базе
✦ Поддерживаем много пересечений для пары пользователей
✦ Сохраняем все пересечения, показываем только интересные
✦ Eventual consistency
✦ Постепенно чистим старые записи
Результат: создаем
250 000 000
пересечений в день
✦ Теперь вы знаете с какими проблемами мы столкнулись
и как их решили
✦ Вы сможете обрабатывать миллиарды координат если
правильно подготовитесь
✦ Вам будет проще создавать новые, классные геофичи
На посошок:
Ссылки
✦ GeoIndex триангуляция
✦ Google’s S2, geometry on the sphere, cells and Hilbert curve
✦ Google's S2 Library presentation
✦ https://tech.badoo.com/
✦ https://habrahabr.ru/company/badoo/
Ой, всё...

More Related Content

Viewers also liked

"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
"Развитие ветки PHP-7"
"Развитие ветки PHP-7""Развитие ветки PHP-7"
"Развитие ветки PHP-7"Badoo Development
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoBadoo Development
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma Badoo Development
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooBadoo Development
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruBadoo Development
 
Мобильный веб: назад в будущее
Мобильный веб: назад в будущееМобильный веб: назад в будущее
Мобильный веб: назад в будущееBadoo Development
 
Мониторь, автоматизируй Docker
Мониторь, автоматизируй DockerМониторь, автоматизируй Docker
Мониторь, автоматизируй DockerBadoo Development
 
Технологии vs коммуникации: что важнее?
Технологии vs коммуникации: что важнее?Технологии vs коммуникации: что важнее?
Технологии vs коммуникации: что важнее?Badoo Development
 
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторонБагфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторонBadoo Development
 
Как автотесты ускоряют релизы в OK.ru
Как автотесты ускоряют релизы в OK.ruКак автотесты ускоряют релизы в OK.ru
Как автотесты ускоряют релизы в OK.ruBadoo Development
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияBadoo Development
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"Badoo Development
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереBadoo Development
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеBadoo Development
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годBadoo Development
 
Profiling and optimizing go programs
Profiling and optimizing go programsProfiling and optimizing go programs
Profiling and optimizing go programsBadoo Development
 
Что надо знать о HTTP/2
Что надо знать о HTTP/2Что надо знать о HTTP/2
Что надо знать о HTTP/2Badoo Development
 

Viewers also liked (20)

"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
"Развитие ветки PHP-7"
"Развитие ветки PHP-7""Развитие ветки PHP-7"
"Развитие ветки PHP-7"
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, Badoo
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
 
Docker networking
Docker networkingDocker networking
Docker networking
 
Мобильный веб: назад в будущее
Мобильный веб: назад в будущееМобильный веб: назад в будущее
Мобильный веб: назад в будущее
 
Мониторь, автоматизируй Docker
Мониторь, автоматизируй DockerМониторь, автоматизируй Docker
Мониторь, автоматизируй Docker
 
Технологии vs коммуникации: что важнее?
Технологии vs коммуникации: что важнее?Технологии vs коммуникации: что важнее?
Технологии vs коммуникации: что важнее?
 
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторонБагфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
 
Как автотесты ускоряют релизы в OK.ru
Как автотесты ускоряют релизы в OK.ruКак автотесты ускоряют релизы в OK.ru
Как автотесты ускоряют релизы в OK.ru
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрация
 
Docker penetration
Docker penetrationDocker penetration
Docker penetration
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Profiling and optimizing go programs
Profiling and optimizing go programsProfiling and optimizing go programs
Profiling and optimizing go programs
 
Что надо знать о HTTP/2
Что надо знать о HTTP/2Что надо знать о HTTP/2
Что надо знать о HTTP/2
 

More from Badoo Development

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationBadoo Development
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUBadoo Development
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерBadoo Development
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, AvitoBadoo Development
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicBadoo Development
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentBadoo Development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityBadoo Development
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхBadoo Development
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsBadoo Development
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноBadoo Development
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов» Badoo Development
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Badoo Development
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоадаBadoo Development
 
Git хуки на страже качества кода
Git хуки на страже качества кодаGit хуки на страже качества кода
Git хуки на страже качества кодаBadoo Development
 
Versioning strategy for a complex internal API
Versioning strategy for a complex internal APIVersioning strategy for a complex internal API
Versioning strategy for a complex internal APIBadoo Development
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQLBadoo Development
 
Методология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияМетодология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияBadoo Development
 

More from Badoo Development (20)

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel Automation
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RU
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.Браузер
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, Avito
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magic
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High Availability
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данных
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana Labs
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада
 
ChromeDriver Jailbreak
ChromeDriver JailbreakChromeDriver Jailbreak
ChromeDriver Jailbreak
 
Git хуки на страже качества кода
Git хуки на страже качества кодаGit хуки на страже качества кода
Git хуки на страже качества кода
 
Versioning strategy for a complex internal API
Versioning strategy for a complex internal APIVersioning strategy for a complex internal API
Versioning strategy for a complex internal API
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQL
 
Методология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияМетодология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, Отношения
 

"Геолокация в Badoo", Андрей Воликов (Badoo)