Реклама со 
скоростью света 
Сергей Жемжицкий
Агенда 
• Предыстория 
• Проработка решения 
• Цифры 
• Архитектура 
• Нюансы
Требования RTB 
visitors publishers 
advertisers 
100 ms 
20 ms 
30 ms 
10.000+ rps
Роль DMP в экосистеме RTB 
Data Data 
Data 
Bidder
Критерии выбора 
• Линейная масштабируемость 
• Шардинг “из коробки” 
• Распределенность 
• Репликация 
• Низкое время отклика
Снова этот NoSQL…
Функциональность 
Aerospike Cassandra CouchBase Mongo Redis 
Масштабируемость 
Шардинг 
Репликация 
Время отклика 
Точка отказа 
Требовательность 
Мониторинг
Литература
Инструменты и материалы 
• nginx 1.2.x 
– ngx-hFp-redis 
– lua-nginx-module 
– lua-resty-mongol 
– ngx-aerospike 
• aerospike 2.x 
• redis 2.6.x 
• mongodb 2.4.x 
• wrk 
• nmon 
• Intel® Core™ i7-920 Quad-Core 
• 48 GB RAM 
• 1 Gbit/s NICs (*) 
• 512 bytes msg 
* 200 Mbit/s guaranteed
Официальные данные
Неофициальные данные 
Nginx Redis Mongo Aerospike, b Aerospike, nb 
Latency, 50% 1.35 2.68 6.70 8.93 2.64 
Latency, 75% 1.46 3.10 8.22 14.99 3.09 
Latency, 90% 1.64 3.25 10.22 26.83 3.27 
Latency, 99% 1.90 3.90 15.46 106.48 3.95 
Throughput, tps 68851 34769 14220 3402 35746 
CPU, Web, % 29 20 70 7 33 
Network, Web, kp/s 71 71 37 8 71 
CPU, Db, % - 6 25 1 6 
Network, Db, kp/s - 12 21 1 12
Меряем Nginx 
WRK • Без логирования 
NGINX 
• Без плагинов 
• С CPU Affinity
Относительность измерений 
L., ms., 50% L., ms., 75% L., ms. 90% L., ms. 99% T., r/s 
1.35 1.46 1.64 1.90 68851
Меряем Redis 
Node 1 
Shard 1 
Slave 2 
WRK 
Node 2 
Shard 
2 
Slave 
3 
Node 3 
Shard 
3 
Slave 
1 
NGINX
Результаты Redis 
L., ms., 50% L., ms., 75% L., ms. 90% L., ms. 99% T., r/s 
2.68 3.10 3.25 3.90 34769
Результаты Redis
Меряем Mongo 
WRK 
NGINX :: MONGOS 
Node 1 
mongod :: cfg 
mongod :: repl 
mongod :: repl 
mongod :: repl 
Node 2 
mongod :: cfg 
mongod :: repl 
mongod :: repl 
mongod :: repl 
Node 3 
mongod :: cfg 
mongod :: repl 
mongod :: repl 
mongod :: repl 
Shard 1 
Replica Set 1 
Shard 2 
Replica Set 2 
Shard 3 
Replica Set 3
Результаты Mongo 
L., ms., 50% L., ms., 75% L., ms. 90% L., ms. 99% T., r/s 
6.70 8.22 10.22 15.46 14220
Результаты Mongo
Меряем Aerospike 
Node 1 
Chunk 1 
Replica 2 
WRK 
Node 2 
Chunk 2 
Replica 3 
Node 3 
Chunk 3 
Replica 1 
NGINX
Результаты Aerospike 
L., ms., 50% L., ms., 75% L., ms. 90% L., ms. 99% T., r/s 
8.93 14.99 26.83 106.48 3402
Результаты Aerospike
… еще результаты Aerospike 
Cores 50 75 90 99 Rps Ngx CPU Ngx, pks As, CPU As, pks 
4 8.22 10.22 15.46 14 K 3402 7 8 K 1 1 K 
8 7.89 15.16 92.4 89.8 6028 10 13 K 1 2 K 
12 4.76 8.74 103.1 121.6 10233 15 20 K 2 3 K 
16 3.91 6.21 99.6 111.3 13178 22 26 K 3 6 K 
24 2.13 2.87 4.68 76.81 25744 21 60 K 5 10 K 
32 2.01 2.60 4.42 81.29 28925 25 70 K 6 11 K 
64 2.54 3.66 112.4 118.1 26468 27 70 K 6 11 K
…случайно выстрелили в ногу 
nginx 
+ blocking I/O
Libevent in aСтcрtоiиoмn 
р (апкеотпу 
ытка 2) 
Node 1 
Chunk 1 
Replica 2 
WRK 
Node 2 
Chunk 2 
Replica 3 
Node 3 
Chunk 3 
Replica 1 
LIBEVENT :: LIBEVHTP
… ну наконец-то … 
L., ms., 50% L., ms., 75% L., ms. 90% L., ms. 99% T., r/s 
2.64 3.09 3.27 4.05 35746
… ну наконец-то …
Можно стрСотиротиьм 
ракету
Что иметь ввиду? 
• Неблокирующий I/O 
• Все, что можно сделать локально – делать 
локально 
• Быть ленивым (уметь пользоваться чужими 
результатами) 
• Все врут
Спасибо за вопросы! 
s.zhemzhitsky@cleverdata.ru

Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)