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

34
Использование геолокации в Badoo Андрей Воликов 17.06.2016

Upload: badoo-development

Post on 06-Jan-2017

13.417 views

Category:

Technology


4 download

TRANSCRIPT

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

Использование геолокациив Badoo

Андрей Воликов 17.06.2016

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

Badoo это:

66

80

300Mпользователей

200стран

300инженеров

8075%мобильные приложения

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

Почему тема важна для вас:

✦ Узнаете какие возникают проблемы при работе с геоданными

✦ Мы - делали ошибки, вы - сможете их избежать

✦ Геолокация - это интересно!

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

Каков план:

✦ Проблемы добычи координат

✦ Проблемы хранения и обработки координат

✦ Использование геолокации на примере наших фич

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

Проблемы добычи координат

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

Что такое геопозиция

✦ latitude

✦ longitude

✦ altitude

✦ accuracy

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

Как добыть координаты

✦ Источников много: gps, wifi, gsm

✦ Мобильные платформы сделали все за нас?

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

Проблема: уговорить пользователей

20%молчуны

25%web 55%

присылают координаты

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

Проблема: жор батареи

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

Проблема: все врут

✦ Недостаточно точные координаты

✦ Слишком частые координат

✦ Координаты из будущего✦ Координаты из прошлого

✦ Невалидные координаты✦ Подозрительные

координаты

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

Проблема: разные платформы

✦ Жесткий контроль

✦ Frequent locations

✦ 200 координат в день

✦ Свобода для программиста

✦ Зоопарк

✦ 475 координат в день

✦ 185 координат в день ✦ 0.03 координаты в день

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

2 700 000 000точек в день

Результат: обрабатываем

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

Проблемы хранения и обработки координат

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

Проблема: координаты устаревают

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

Проблема: неравномерное распределение

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

Проблема: высокая нагрузка

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

Простое решение: глобус

✦ Разные по площади элементы

✦ Поиск на границах областей не дает нужных результатов

✦ Не решает проблемы неравномерного распределения

✦ Сложно решать проблемы нагрузки на одну ноду

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

Рабочее решение: триангуляция

✦ Одинаковые по площади элементы

✦ Решает проблему поиска на границах разбиения

✦ Не решает проблемы неравномерного распределения

✦ Cложно решать проблемы нагрузки на один треугольник

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

Оптимальное решение: Google S2

✦ Используется Google, Foursquare, Uber

✦ Иерархическая модель - возможность объединения ячеек в кластера

✦ Каждый квадратный сантиметр может быть представлен в виде int 64

✦ Разбиение Земли на одинаковые по площади куски

✦ Библиотеки для всех популярных языков

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

Примеры использования геолокации

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

Задачи:

✦ Определить город по координатам

✦ Система пересечений пользователей

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

Определить город по координатам

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

Нужна база центров городов и контуров

✦ Скачать бесплатно

✦ Купить (25$ - 1500$)

✦ Купить и допиливать ($$)

● Ручная модерация● Open street map

● Google maps150 000

Городов с контурами

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

Стратегия определения города

✦ Проверяем попадают ли координаты внутрь какого-нибудь контура

✦ Ищем ближайшую границу города

✦ Ищем ближайший центр города

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

Пересеченияпользователи находились на расстоянии 50 метров в интервале времени не более 5 минут

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

✦ Список пересечений за 48 часов✦ Храним все пересечения за 90

дней

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

Как это сделать?

✦ Подготовка координат

✦ Доставка координат в демон

✦ Обработка в демоне

✦ Сохраняем в хранилище

✦ Актуализируем данные

✦ Удаляем старые пересечения

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

Обработка координат

PHP

Filter QueueInterpolation PHP

PHP

Daemon

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

Daemon

PHP

PHP

Queue In

Queue Out

Processor

GC

Filter

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

Храним пересечения в базе

✦ Поддерживаем много пересечений для пары пользователей

✦ Сохраняем все пересечения, показываем только интересные

✦ Eventual consistency

✦ Постепенно чистим старые записи

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

Результат: создаем

250 000 000пересечений в день

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

✦ Теперь вы знаете с какими проблемами мы столкнулись и как их решили

✦ Вы сможете обрабатывать миллиарды координат если правильно подготовитесь

✦ Вам будет проще создавать новые, классные геофичи

На посошок:

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

Ссылки

✦ 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/

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

Ой, всё...