Потоковая обработка событий клиентов и их отображение...

Post on 17-Jan-2017

39 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Потоковая обработка событий клиентов и их отображение на интерактивной карте

Александр СербулРуководитель направления

Карл… Карл, я активно

использую 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

Скорость сайта клиента на Битрикс

Скорость сайта клиента на Битрикс

Скорость сайта клиента на Битрикс

Скорость сайта клиента на Битрикс

Скорость сайта клиента на Битрикс

Спасибо за

внимание!

Вопросы?

Александр Сербул@AlexSerbul

serbul@1c-bitrix.ru

top related