● imps
● clicks
● pcpv
Статистика
● > 150M показов в день
● > 1.5M запросов каждые 15 минут
● > 200Gb сырых логов в день
● > 500M уникальных пользователей в месяц
AdBlade - история развития
1 x Mysql
2 x Web PHP
1-2M imps
8 x PHP+MySQL+Lighty
50M imps
19 x PHP+MySQL+Lighty
Analytics (Mysql/Mongo)
80M imps
10 x Web Java
1 x InfoBright
120M imps
AdBlade 2008
● 2M показов в день
● 2 общих веб-сервера для
показов и главного сайта
● 1 база mysql для всех
транзакций, включая показы
2 x Servers
PHP+Lighttpd
1 x Server
MySQL
AdBlade 2009 - 2012
● 50М imps в день
● 8 серверов для показов
● 500 макс. показов на сервер
● логирование в csv файлы 8 x Servers
PHP+Lighttpd+
MySQL
2 x Servers
MySQL(M+S)
www
csv
events
AdBlade 2012 - 2014
Main site
www01/02
2 x Servers
MySQL(M+S)
19 x Servers
PHP+Lighttpd+MySQL
csv / json logs
MySQL / MongoDB
Analytic Server
80М imps
MongoDB (2013-2014)
Плюсы:
● горизонтальное масштабирование
● гибкое создание запросов с помощью js
● отсутствие схемы
MongoDB (2013-2014)
Минусы
● отсутствие качественных php библиотек
● размер базы значительно увеличился из-за
необходимости хранения ключей и _id поля.
● невозможность быстрой чистки базы с
высвобождением занимаемого места.
● MapReduce работает асинхронно и нет возможности
контролировать его из клиентского приложения
MongoDB (2013-2014)
Test results for log file with 1M rows
17.1K
1: { "_id": {"$oid": "4b838e8500000000000006e2"},
2: "appId": 1762,
3: "imps": 438,"clicks": 0,
4: "amount1": -0.876, "amount2": 0,
5: "date": {"$date": "2013-02-23T03:15:01.000-0500"},
6: }
17.1K 95
62.5K 31
Row Size bytesInsert Rows/Sec
MongoDB
MySql
Переход на Java
● Netty фреймворк для работы с сетью
● база данных в памяти сервера
● поминутное логирование
● 7K-8K показов в секунду
● уменьшили количество серверов в 3 раза
Hadoop
● необходимость создания собственной
инфраструктуры для хранения данных
● необходимо писать логику работы с hadoop
● минимум 2-3 сервера для базовой конфигурации, а
для объёма нашей информации минимум 5 серверов.
Vertica
● column based
● компрессия данных
● есть шардинг для масштабирования
● SQL запросы для выбора данных
● дорогая лицензия
InfoBright
Плюсы:
● column based движок для MySQL
● загрузчик данных DLP (Distributed Load Processor).
● сжатие информации до 10x
● быстрые выборки с помощью knowledge grid
● быстрое удаление больших объемов информации
● практически неограниченный размер базы
● быстрое добавление новых колонок в таблицы
InfoBright
Минусы:
● лицензия
● требует внимательности при работе с данными для
обеспечения производительности
● отсутствие горизонтального масштабирования
Column vs Row oriented DB
● сжатие - данные в колонке однородные
● чтение только нужных колонок при поиске данных
Database Knowledge Grid
Knowledge Grid представляет собой набор метаданных Infobright,
которые используются для оптимизации выполнения запросов
min()
max()
avg()
sum()
AdBlade 2014 - present
json logs
10 x JAVA
Servers
DLP ServerInfoBright (M+S)
3 x Redis
Servers
2 x Server
MySQL(M+S)
Main site
www.adblade.com
csv logs
150M events
Логирование и загрузка
● Логирование в json формате
● Средний размер записи 1.4К
● NFS - периодическая сборка логов
● Python+Java - обработка и преобразование в CSV
● DLP - загрузка в базу.
● 220K, обычная загрузка - 10с , DLP - 1-2с
[ a8fdc205a9f19cc1c7507a60c4,1441966498,1,8448,420,[
[3001,0.3,"CPC",0.0,0.0,0.0,1,[],[67],4,0.0,0,[]],
[3002,0.2,"CPC",0.0,0.0,0.0,2,[],[67],4,0.0,0,[]]
],"1136321067","6193198952454189354",1,"Mozilla/5.0.",[],null,"23307063" ,"
http://www.adblade.com",[0,0,0,0],"US","UT","New-York","770","84119",2,”
Win","Other",1,null,null,0,null,null,7279,null,null,"2130706433",null ]
1: { "impId" : "a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0...", "appId" : 10,
2: "ads" : [{ "id" : 3001, "amount" : 0.3}, { "id" : 3002, “amount”: 0.2 }],
3: "time" : 1445029200,
4: "url" : "http://www.adblade.com"
5: }
impId appId date time url adId ad_amount
a8fd 10 20151017 1445029200 http://... 3001 0.3
a8fd 10 20151017 1445029200 http://... 3002 0.2
date appId amount1
20151017 10 0.7
20151017 11 0.3
20151017 11 0.5
20151017 11 0.5
20151017 10 0.5
INSERT INTO date_app_r
SELECT appId,date,SUM(ad_amount1)
FROM raw_table1
WHERE impId>=a8fd
GROUP BY appId,date
raw_table1
date_app_r
Хранение данных
● 2x Intel Xeon 6 ядер + 160GB RAM
● 3 таблицы для сырых логов разного формата и порядка
50 “ролов” с агрегированными данными на основе
“сырых” таблиц
● только добавление данных в rollup каждые N минут
● В самую “жирную” сырую таблицу с 80-ю полями каждый
день загружается порядка 1Bil записей
● Коэффициент сжатия информации - x5.
Работа с данными
● никаких индексов в таблицах
● никаких обновлений
● никаких джоинов c использованием BIG таблиц
● использовать lookup поля для быстрого поиска
● побольше памяти
Выводы и Планы
● 7 раз отмерь - один отрежь
● IB - хорошее соотношение цены/качества
● горизонтальное масштабирование
○ на уровне кода
○ переезд на другую базу данных
Q&A
Высоконагруженная система с аналитикой на InfoBright
Андрей Федоренчик
andfed.net@gmail.com

Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»

  • 2.
  • 3.
    Статистика ● > 150Mпоказов в день ● > 1.5M запросов каждые 15 минут ● > 200Gb сырых логов в день ● > 500M уникальных пользователей в месяц
  • 4.
    AdBlade - историяразвития 1 x Mysql 2 x Web PHP 1-2M imps 8 x PHP+MySQL+Lighty 50M imps 19 x PHP+MySQL+Lighty Analytics (Mysql/Mongo) 80M imps 10 x Web Java 1 x InfoBright 120M imps
  • 5.
    AdBlade 2008 ● 2Mпоказов в день ● 2 общих веб-сервера для показов и главного сайта ● 1 база mysql для всех транзакций, включая показы 2 x Servers PHP+Lighttpd 1 x Server MySQL
  • 6.
    AdBlade 2009 -2012 ● 50М imps в день ● 8 серверов для показов ● 500 макс. показов на сервер ● логирование в csv файлы 8 x Servers PHP+Lighttpd+ MySQL 2 x Servers MySQL(M+S) www csv events
  • 7.
    AdBlade 2012 -2014 Main site www01/02 2 x Servers MySQL(M+S) 19 x Servers PHP+Lighttpd+MySQL csv / json logs MySQL / MongoDB Analytic Server 80М imps
  • 8.
    MongoDB (2013-2014) Плюсы: ● горизонтальноемасштабирование ● гибкое создание запросов с помощью js ● отсутствие схемы
  • 9.
    MongoDB (2013-2014) Минусы ● отсутствиекачественных php библиотек ● размер базы значительно увеличился из-за необходимости хранения ключей и _id поля. ● невозможность быстрой чистки базы с высвобождением занимаемого места. ● MapReduce работает асинхронно и нет возможности контролировать его из клиентского приложения
  • 10.
    MongoDB (2013-2014) Test resultsfor log file with 1M rows 17.1K 1: { "_id": {"$oid": "4b838e8500000000000006e2"}, 2: "appId": 1762, 3: "imps": 438,"clicks": 0, 4: "amount1": -0.876, "amount2": 0, 5: "date": {"$date": "2013-02-23T03:15:01.000-0500"}, 6: } 17.1K 95 62.5K 31 Row Size bytesInsert Rows/Sec MongoDB MySql
  • 11.
    Переход на Java ●Netty фреймворк для работы с сетью ● база данных в памяти сервера ● поминутное логирование ● 7K-8K показов в секунду ● уменьшили количество серверов в 3 раза
  • 12.
    Hadoop ● необходимость созданиясобственной инфраструктуры для хранения данных ● необходимо писать логику работы с hadoop ● минимум 2-3 сервера для базовой конфигурации, а для объёма нашей информации минимум 5 серверов.
  • 13.
    Vertica ● column based ●компрессия данных ● есть шардинг для масштабирования ● SQL запросы для выбора данных ● дорогая лицензия
  • 14.
    InfoBright Плюсы: ● column basedдвижок для MySQL ● загрузчик данных DLP (Distributed Load Processor). ● сжатие информации до 10x ● быстрые выборки с помощью knowledge grid ● быстрое удаление больших объемов информации ● практически неограниченный размер базы ● быстрое добавление новых колонок в таблицы
  • 15.
    InfoBright Минусы: ● лицензия ● требуетвнимательности при работе с данными для обеспечения производительности ● отсутствие горизонтального масштабирования
  • 16.
    Column vs Roworiented DB ● сжатие - данные в колонке однородные ● чтение только нужных колонок при поиске данных
  • 17.
    Database Knowledge Grid KnowledgeGrid представляет собой набор метаданных Infobright, которые используются для оптимизации выполнения запросов min() max() avg() sum()
  • 18.
    AdBlade 2014 -present json logs 10 x JAVA Servers DLP ServerInfoBright (M+S) 3 x Redis Servers 2 x Server MySQL(M+S) Main site www.adblade.com csv logs 150M events
  • 19.
    Логирование и загрузка ●Логирование в json формате ● Средний размер записи 1.4К ● NFS - периодическая сборка логов ● Python+Java - обработка и преобразование в CSV ● DLP - загрузка в базу. ● 220K, обычная загрузка - 10с , DLP - 1-2с [ a8fdc205a9f19cc1c7507a60c4,1441966498,1,8448,420,[ [3001,0.3,"CPC",0.0,0.0,0.0,1,[],[67],4,0.0,0,[]], [3002,0.2,"CPC",0.0,0.0,0.0,2,[],[67],4,0.0,0,[]] ],"1136321067","6193198952454189354",1,"Mozilla/5.0.",[],null,"23307063" ," http://www.adblade.com",[0,0,0,0],"US","UT","New-York","770","84119",2,” Win","Other",1,null,null,0,null,null,7279,null,null,"2130706433",null ]
  • 20.
    1: { "impId": "a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0...", "appId" : 10, 2: "ads" : [{ "id" : 3001, "amount" : 0.3}, { "id" : 3002, “amount”: 0.2 }], 3: "time" : 1445029200, 4: "url" : "http://www.adblade.com" 5: } impId appId date time url adId ad_amount a8fd 10 20151017 1445029200 http://... 3001 0.3 a8fd 10 20151017 1445029200 http://... 3002 0.2 date appId amount1 20151017 10 0.7 20151017 11 0.3 20151017 11 0.5 20151017 11 0.5 20151017 10 0.5 INSERT INTO date_app_r SELECT appId,date,SUM(ad_amount1) FROM raw_table1 WHERE impId>=a8fd GROUP BY appId,date raw_table1 date_app_r
  • 21.
    Хранение данных ● 2xIntel Xeon 6 ядер + 160GB RAM ● 3 таблицы для сырых логов разного формата и порядка 50 “ролов” с агрегированными данными на основе “сырых” таблиц ● только добавление данных в rollup каждые N минут ● В самую “жирную” сырую таблицу с 80-ю полями каждый день загружается порядка 1Bil записей ● Коэффициент сжатия информации - x5.
  • 22.
    Работа с данными ●никаких индексов в таблицах ● никаких обновлений ● никаких джоинов c использованием BIG таблиц ● использовать lookup поля для быстрого поиска ● побольше памяти
  • 23.
    Выводы и Планы ●7 раз отмерь - один отрежь ● IB - хорошее соотношение цены/качества ● горизонтальное масштабирование ○ на уровне кода ○ переезд на другую базу данных
  • 24.
    Q&A Высоконагруженная система саналитикой на InfoBright Андрей Федоренчик andfed.net@gmail.com