SlideShare a Scribd company logo
1 of 34
Download to read offline
Tarantool в Badoo
Хранение истории посещений
~60k php req/sec + 200k media req/sec
Badoo
215M пользователей в 200 странах
переводы на ~50 языков
~500k req/sec к внутренним сервисам
~3000 серверов
2.5 датацентра
На сайте
Профиль
Переходят
!
- из поиска
- из чатика
- из писем
и т.д.
На сайте
Посетители
счетчики
с фильтрацией
новый хит
список хитов
На сайте
считаем
популярность
Как устроен хит
to from
timestamp
is_visible
source
is_new
поиск, чатик, encounters, письмо, etc. (bitmask)
юзер спрятал хит из списка?
юзер уже видел этот хит?
Задача
Цифры
день
всего 5000M
100M
Данные (хиты) - храним историю за 90 дней
чтение
запись 35%
65%
Запросы - ~7k rps на площадку
Задача
Начало - 2003
> придумали и сделали основные фичи
> храним историю за 30 дней
одна площадка
“патчик” в мемкеш, пишет текстовые снапшоты
!
История
hitd - 2008
> появилась еще одна площадка
> нужно экспортировать данные в базу
! медленно загружаемся из текстового снапшота
пишем логи - для репликации и экспорта
сделали снапшоты бинарными
История
hitd - 2009
> количество пользователей выросло в 7 раз
> хотим историю за 90 дней вместо 30
расшардили, сделали по три машины на площадку
! кончилась память
История
hitd - 2010
> нужно добавить поля в структуру хита
хотим простую эволюцию схемы данных!
решили попробовать sqlite
История
hitd - 2010+
С ростом базы - sqlite перестает справляться
hitd
апдейты
aggregator
основная база
replace/insert/update
syncer на другую площадку
История
hitd - 2013
держим апдейты и базу на разных дисках
! рестарт требует “прогрева базы”
cat /path/to/db > /dev/null
! не успеваем доклеивать апдейты в базу
растет WAL, рекорд - 27gb
копируем базу на ramdisk и делаем repair :(
История
Что хотим (2014)
История
> решить проблемы с нехваткой iops
> упростить сетап и обслуживание
> простоту программирования
> возможность влезть и “пропатчить” если нужно
“достаточно” performance (latency ~1ms / 10k rps)!
Tarantool
Инструменты
MySQL
Инструменты
+ переносим логику в php, данные - в mysql
+ данные пользователей уже расшардены
выжмем достаточно скорости
+ готовые админские инструменты
~ нужны транзакции, никакого handlersocket
- непредсказуемое время ответа–
?
Redis
Инструменты
+ быстро, ибо in memory
+ можно сделать lua api ( слегка неудобно)
~ неудобно делать удаление старых данных
~ сохранение на диск можно сделать лучше
+ хорошая документация и community
Tarantool
Инструменты
+ быстро, ибо in memory
+ lua - только на сервере, обновление кода на лету
+ есть документация и дружественные девелоперы
+ отличная сохранялка на диск
~ напряженка с php коннектором
здесь должна
быть
фотка

Кости Осипова
Мега фичи
Инструменты
обновление lua кода без рестарта
фоновые “процессы” - удаляем старые данные
произвольное количество полей в tuple
не только key-value, индексы по нескольким полям
Данные и запросы
uid_to uid_from timestamp sourceis_visible is_new
Реализация
add - добавить или обновить в радиусе 30 мин
× del - удалить по uid_to или uid_from
+
… list - постраничный список хитов с фильтрацией
✂ cleanup - зачистить хиты старше 90 дней
∑ counters - сколько новых хитов? за последний час?
Попытка #1
uid_to uid_from timestamp sourceis_visible is_new
unique
index index
Реализация
index
+50% служебные данные для каждого tuple
+200% копии данных в индексах + служебные данные
- нужно 300 гигов памяти… опять:(
120gb исходные данные
Попытка #2
uid_to 0 1 42 3 ∞
uid_from timestamp sourceis_visible is_new
Реализация
X записей -> одна, со списком из X элементов
всего один индекс, из одного поля
~ нужно бегать по списку для поиска нужных хитов
~ поддерживаем уникальность ручками
Нюансы
uid_to 0 1 42 3 ∞
uid_from timestamp sourceis_visible is_new
Реализация
tuple[n] - честно бежит по списку, т.е. O(n)
нужно кешировать результаты запроса count
~ если хитов очень много - разбиваем список на части
Репликация
Реализация
> нужна полная копия данных на каждой площадке
> нужен умный merge хитов на приеме
делаем свою на php + lua stored procedures
! встроенная репликация не подходит
(кроссплощадка)
tnt
Прага
tnt
Майами
x3 x4
php Берем по-многу за раз
Заливаем по одной
~8500км
~140ms latency
Реализация
lua процедуры repl_load, repl_list, repl_count
php карта + транспорт
! экономим latency, скачивая пачками
на практике latency ~1500ms
при ~1000 записей/сек
Шардинг
сервера
3x
ноды
x24
Реализация
! хотим использовать все процессоры
делаем мелкие ноды, удобно в обслуживании
! датасет не влезает на одну машину
но не слишком мелкие, т.к. больше random io
Dark launch
импортируем часть данных в tarantool
включаем постепенно для части пользователей
пользователи ничего не заметят, а мы потестируем
Выкладка
измеряем, оптимизируем - повторяем
hitd
апдейты
aggregator
основная база
replace/insert/update
syncer на другую площадку
Старая система выглядит так
Выкладка
php
hitd
апдейты копятся
aggregator
основная база
syncer на другую площадку
Этап #0
Выкладка
php
hitd
основная база
вливаем в tarantool
Этап #1
aggregator
syncer на другую площадку
Несколько часов
Выкладка
php
tarantool
накопленные апдейты
включаем репликацию
на другую площадку
~25 минут
Выкладка
Этап #2
заливаем
tarantool
Выкладка
Этап #3
продолжаем заливать
php
включаем запись
hitd
чтение и запись
tarantool
Выкладка
Этап #4
продолжаем заливать
php включаем чтение и запись
?

More Related Content

What's hot

Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupMail.ru Group
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Ontico
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)Ontico
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Ontico
 
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Ontico
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya Denisyuk
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolAlexandre Kalendarev
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksRoman Pavlushko
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORMBadoo Development
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Ontico
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
 

What's hot (20)

Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
 
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере Tarantool
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Avito Stachka 2012
Avito Stachka 2012Avito Stachka 2012
Avito Stachka 2012
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORM
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 

Similar to Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение истории посещений"

Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsqlAnatoly Popov
 
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)Ontico
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBASlach
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBIurii Ogiienko
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...it-people
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Ontico
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данныхSiel01
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Ontico
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipARCCN
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Ontico
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программированиеPython Meetup
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенкоYandex
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 

Similar to Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение истории посещений" (20)

Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsql
 
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBA
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
 
Sivko
SivkoSivko
Sivko
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенко
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 

More from Badoo Development

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationBadoo Development
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUBadoo Development
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерBadoo Development
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, AvitoBadoo Development
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicBadoo Development
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentBadoo Development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityBadoo Development
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхBadoo Development
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsBadoo Development
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноBadoo Development
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruBadoo Development
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooBadoo Development
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma Badoo Development
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoBadoo Development
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов» Badoo Development
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Badoo Development
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоадаBadoo Development
 

More from Badoo Development (20)

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel Automation
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RU
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.Браузер
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, Avito
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magic
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High Availability
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данных
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana Labs
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, Badoo
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада
 
ChromeDriver Jailbreak
ChromeDriver JailbreakChromeDriver Jailbreak
ChromeDriver Jailbreak
 

Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение истории посещений"

  • 1. Tarantool в Badoo Хранение истории посещений
  • 2. ~60k php req/sec + 200k media req/sec Badoo 215M пользователей в 200 странах переводы на ~50 языков ~500k req/sec к внутренним сервисам ~3000 серверов 2.5 датацентра
  • 3. На сайте Профиль Переходят ! - из поиска - из чатика - из писем и т.д.
  • 5. счетчики с фильтрацией новый хит список хитов На сайте считаем популярность
  • 6. Как устроен хит to from timestamp is_visible source is_new поиск, чатик, encounters, письмо, etc. (bitmask) юзер спрятал хит из списка? юзер уже видел этот хит? Задача
  • 7. Цифры день всего 5000M 100M Данные (хиты) - храним историю за 90 дней чтение запись 35% 65% Запросы - ~7k rps на площадку Задача
  • 8. Начало - 2003 > придумали и сделали основные фичи > храним историю за 30 дней одна площадка “патчик” в мемкеш, пишет текстовые снапшоты ! История
  • 9. hitd - 2008 > появилась еще одна площадка > нужно экспортировать данные в базу ! медленно загружаемся из текстового снапшота пишем логи - для репликации и экспорта сделали снапшоты бинарными История
  • 10. hitd - 2009 > количество пользователей выросло в 7 раз > хотим историю за 90 дней вместо 30 расшардили, сделали по три машины на площадку ! кончилась память История
  • 11. hitd - 2010 > нужно добавить поля в структуру хита хотим простую эволюцию схемы данных! решили попробовать sqlite История
  • 12. hitd - 2010+ С ростом базы - sqlite перестает справляться hitd апдейты aggregator основная база replace/insert/update syncer на другую площадку История
  • 13. hitd - 2013 держим апдейты и базу на разных дисках ! рестарт требует “прогрева базы” cat /path/to/db > /dev/null ! не успеваем доклеивать апдейты в базу растет WAL, рекорд - 27gb копируем базу на ramdisk и делаем repair :( История
  • 14. Что хотим (2014) История > решить проблемы с нехваткой iops > упростить сетап и обслуживание > простоту программирования > возможность влезть и “пропатчить” если нужно “достаточно” performance (latency ~1ms / 10k rps)!
  • 16. MySQL Инструменты + переносим логику в php, данные - в mysql + данные пользователей уже расшардены выжмем достаточно скорости + готовые админские инструменты ~ нужны транзакции, никакого handlersocket - непредсказуемое время ответа– ?
  • 17. Redis Инструменты + быстро, ибо in memory + можно сделать lua api ( слегка неудобно) ~ неудобно делать удаление старых данных ~ сохранение на диск можно сделать лучше + хорошая документация и community
  • 18. Tarantool Инструменты + быстро, ибо in memory + lua - только на сервере, обновление кода на лету + есть документация и дружественные девелоперы + отличная сохранялка на диск ~ напряженка с php коннектором здесь должна быть фотка
 Кости Осипова
  • 19. Мега фичи Инструменты обновление lua кода без рестарта фоновые “процессы” - удаляем старые данные произвольное количество полей в tuple не только key-value, индексы по нескольким полям
  • 20. Данные и запросы uid_to uid_from timestamp sourceis_visible is_new Реализация add - добавить или обновить в радиусе 30 мин × del - удалить по uid_to или uid_from + … list - постраничный список хитов с фильтрацией ✂ cleanup - зачистить хиты старше 90 дней ∑ counters - сколько новых хитов? за последний час?
  • 21. Попытка #1 uid_to uid_from timestamp sourceis_visible is_new unique index index Реализация index +50% служебные данные для каждого tuple +200% копии данных в индексах + служебные данные - нужно 300 гигов памяти… опять:( 120gb исходные данные
  • 22. Попытка #2 uid_to 0 1 42 3 ∞ uid_from timestamp sourceis_visible is_new Реализация X записей -> одна, со списком из X элементов всего один индекс, из одного поля ~ нужно бегать по списку для поиска нужных хитов ~ поддерживаем уникальность ручками
  • 23. Нюансы uid_to 0 1 42 3 ∞ uid_from timestamp sourceis_visible is_new Реализация tuple[n] - честно бежит по списку, т.е. O(n) нужно кешировать результаты запроса count ~ если хитов очень много - разбиваем список на части
  • 24. Репликация Реализация > нужна полная копия данных на каждой площадке > нужен умный merge хитов на приеме делаем свою на php + lua stored procedures ! встроенная репликация не подходит (кроссплощадка)
  • 25. tnt Прага tnt Майами x3 x4 php Берем по-многу за раз Заливаем по одной ~8500км ~140ms latency Реализация lua процедуры repl_load, repl_list, repl_count php карта + транспорт ! экономим latency, скачивая пачками на практике latency ~1500ms при ~1000 записей/сек
  • 26. Шардинг сервера 3x ноды x24 Реализация ! хотим использовать все процессоры делаем мелкие ноды, удобно в обслуживании ! датасет не влезает на одну машину но не слишком мелкие, т.к. больше random io
  • 27. Dark launch импортируем часть данных в tarantool включаем постепенно для части пользователей пользователи ничего не заметят, а мы потестируем Выкладка измеряем, оптимизируем - повторяем
  • 28. hitd апдейты aggregator основная база replace/insert/update syncer на другую площадку Старая система выглядит так Выкладка php
  • 29. hitd апдейты копятся aggregator основная база syncer на другую площадку Этап #0 Выкладка php
  • 30. hitd основная база вливаем в tarantool Этап #1 aggregator syncer на другую площадку Несколько часов Выкладка php
  • 31. tarantool накопленные апдейты включаем репликацию на другую площадку ~25 минут Выкладка Этап #2 заливаем
  • 34. ?