Upload
voximplant
View
28
Download
2
Embed Size (px)
Citation preview
Потоковая обработка событий клиентов и их отображение на интерактивной карте
Александр СербулРуководитель направления
Карл… Карл, я активно
использую Spark
Streaming
Это очень круто,
пап!
Карл… Карл, я специалист по
BigData….
Это очень круто, пап!
Но я так и не понял, как
работает TCP/IP, сынок!
СОВСЕМ!!!
Поставим себе задачу
1. Клиенты пользуются сервисом по всему миру
2. Тысячи событий в секунду
3. Потоковые алгоритмы агрегации
4. Визуализация на карте
5. Масштабирование карты
6. Чтобы работало быстро и «не вызывало приступов
эпилепсии и рака глаз»
7. Но сначала посмотрим, что есть готового…
Технологии - RabbitMQ
http://www.rabbitmq.com
1. Очереди сообщений на все
вкусы
2. AMQP
3. Erlang
Технологии - Apache Kafka
http://kafka.apache.org/
1. “LinkedIn”
2. Не совсем очередь
3. Совсем не очередь!
4. Клиентское приложение
«держит» курсор потока
5. Scala
Технологии - Apache Storm
http://storm.apache.org
1. Task parallel
2. Удобные, гибкие workflow
3. Clojure/JVM
Технологии - Pinba
http://pinba.org
1. Агрегация внутри собств.
движка в MySQL
2. Интеграция с PHP
3. Быстро, удобно
4. Badoo.com
Apache Hadoop
• Платформа:
• - вычисления (MapReduce)
• - файловая система (HDFS)
• - “SQL-запросы” по данным (Hive)
Apache Spark
• Скорость!
• Работа в памяти
• Кэширование в памяти
• Простота развертывания
Парадигма MapReduce
«Mining of Massive Datasets»: Leskovec, Rajaraman, Ullman (Stanford University)
Apache Spark
Apache Spark - код
• Реляционная алгебра
• Распределенные коллекции
• Цепочки обработки
«Online» алгоритмы, они другие!
• Кластеризация
• Уникальные элементы
• Агрегация
• Ограничения по памяти
• Это – уже не SQL ;-)
«Mining of Massive Datasets»: Leskovec, Rajaraman, Ullman (Stanford University)
Война систем хранения
Слайд 15
• SQL на MapReduce: Hive, Pig, Spark SQL
• SQL на MPP (massive parallel processing):
Impala, Presto, Amazon RedShift, Vertica
• NoSQL: Cassandra, Hbase, Amazon DynamoDB
• Классика: MySQL, MS SQL, Oracle, …
Lambda-архитектура
• Людей заваливает
данными…
• С большой скоростью
Как устроен наш облачный сервис рекомендаций.
Разминаем мозг.
BigData – «под капотом». Виды событий.
Событие
• Кука Пользователя
• Хэш лицензии
• Домен
• ID товара
• Название Товара
• Категории Товара
• ID рекомендации
• ряд других
Просмотр
товараДобавление
в корзину
Заказ Оплата
Заказа
Регистрация Хранение
BigData – «под капотом». С птичьего полета.
~1000 запросов/сек
bitrix.info
Обработка, анализ
Batch процессинг
On-lineпроцессинг
Выдача ключевой информации
analytics.bitrix.info
Amazon DynamoDB
nginx+Lua Amazon Kinesis
BigData – «под капотом». Регистрация событий.
~1000 запросов/сек
Буфер
bitrix.info
worker’s cluster
worker (PHP)~100 запросов/секфильтрация
worker (PHP)
worker (PHP)
worker (PHP)
worker (PHP)
worker (PHP)
worker (PHP)
worker (PHP)
Лог событий
Пользователи
Домены
Amazon DynamoDB
BigData – «под капотом». Обработка, анализ, выдача.
Лог событий
Пользователи
Домены
Apache Spark
Сервер (spot)
Amazon S3
Файл данных
Файл данных
Сервер (spot)
Сервер (spot)
Сервер (spot)
…Кластер
рекомендаций
Apache Tomcat
Apache Mahout
«Мозги»
Выдача
anal
ytic
s.b
itri
x.in
fo
Как мы сделали визуализацию активности
клиентов Битрикс24 по всему миру в реальном
времени.
Отключаем мозг и наслаждаемся
Amazon Kinesis
Apache Spark Streaming
~1000 событий/сек
Окно агрегации – 30 секунд
JVM
HashTable
Геоточка - LinkedList
Json
Рас
тер
иза
тор
(PH
P)
Яндекс.Карта
Архитектура карты активности клиентов Битрикс24
Apache Spark Streaming
1. Собираем дискретные RDD из Kinesis
2. Определяем координаты по IP-адресу
3. На одной ноде формируем хэш-таблицу геоточек и
доменов
4. Выгружаем json-для серверного кластеризатора
5. Отдаем кластеризатором результаты в карту
Яндекс.Карты
1. Нанести все объекты (десятки тысяч) на карту — очень медленно
2. Встроенная кластеризация (ObjectManager) - медленно
3. Серверная кластеризация (RemoteObjectManager) — отлично!
Алгоритм простой: разбиваем карту на прямоугольники и определяем
среднюю точку (центроид) в каждом
Клиенты Битрикс24
www.bitrix24.ru/online-domains-map
Текущая активность клиентов
1. Собираем дискретные RDD из Kinesis – 30 сек шаг
2. Определяем координаты по IP-адресу, кэшируем
3. На одной ноде формируем хэш-таблицу геоточек и
доменов в памяти, с агрегацией
4. Храним ВСЕ хиты каждой геоточки, вытесняем по
времени (LinkedList)
5. Астрономия — терминатор дня/ночи
6. Выгружаем json-для серверного кластеризатора
7. Отдаем кластеризатором результаты в карту
Текущая активность клиентов Битрикс24
www.bitrix24.ru/online-domains-map
Текущая активность клиентов Битрикс24
www.bitrix24.ru/online-domains-map
Скорость сайта клиента на Битрикс
1. Собираем хиты из Amazon Kinesis в Redis
2. Хит содержит метрики js navigation timing.
3. Храним последние 1250 хитов (redis list)
4. Удаляем 20% самых долгих
5. Рассчитываем медиану времени отображения
страницы в кластере
6. Отдаем на карту, jsonp, RemoteObjectManager
Скорость сайта клиента на Битрикс
Скорость сайта клиента на Битрикс
Скорость сайта клиента на Битрикс
Скорость сайта клиента на Битрикс
Скорость сайта клиента на Битрикс