SlideShare a Scribd company logo
1 of 49
Архитектура поиска в
Booking.com
Иван Круглов
Амстердам
We must deliver the best experience,
as frictionless as possible, and grow
and adapt fast to the customer’s need
by Eduardo Shiota
We must deliver the best experience,
as frictionless as possible, and grow
and adapt fast to the customer’s need
by Eduardo Shiota
by Eduardo Shiota
We must deliver the best experience,
as frictionless as possible, and grow
and adapt fast to the customer’s need
0
200,000
400,000
600,000
800,000
1,000,000
1,200,000
2002 2004 2006 2008 2010 2012 2014 2016
объектов
размещения
ежедневно
забронированных
ночей
by Eduardo Shiota
We must deliver the best experience,
as frictionless as possible, and grow
and adapt fast to the customer’s need
try & fail
A/B
тестирование
Buy now
Buy now
vs
1000+ экспериментов
70+ роллаутов в день
by Eduardo Shiota
We must deliver the best experience,
as frictionless as possible, and grow
and adapt fast to the customer’s need
наилучшее
впечатление
низкие цены
большой выбор
актуальная информация
хороший поиск
удобно
доступно
саппорт говорит на моем языке
мобильный сайт
скорость
мобильное приложение
сайт на родном языке
и др.
наилучшее
впечатление
низкие цены
большой выбор
актуальная информация
хороший поиск
удобно
доступно
саппорт говорит на моем языке
мобильный сайт
скорость
мобильное приложение
сайт на родном языке
и др.
низкие цены
большой выбор
актуальная информация
хороший поиск
удобно
доступно
саппорт говорит на моем языке
мобильный сайт
скорость
мобильное приложение
сайт на родном языке
и др.
наилучшее
впечатление
почему важна
скорость?
https://goo.gl/DP593v
https://goo.gl/HhquKL
https://goo.gl/w1RIhH
https://goo.gl/brL9Zx
https://goo.gl/EbXZl1
https://goo.gl/Gcaunb
поиск
90%
10%
поиск
50%
50%
поиск
эволюция
поиска
текущая архитектура
заключение
План
ПОИСК
поиск
отбор по атрибутам
group fit
отбор по availability
ранжирование
autocomplete
&
disambiguation
определение
геопозиции
поиск
отбор по атрибутам
group fit
отбор по availability
ранжирование
autocomplete
&
disambiguation
определение
геопозиции
деревня Париж, Кигинский район, Республика Башкортостан, Россия ?
inventory
гостиница
«Домик с трубой»
1 янв. 2 янв. 3 янв.
2 000 ₽ 1750 ₽
4 янв. 5 янв.
1500 ₽ 1250 ₽
availability
гостиница
«Домик с трубой»
стоит 6500 ₽
с 1 янв. по 5 янв.
1 янв. 2 янв. 3 янв.
2 000 ₽ 1750 ₽
4 янв. 5 янв.
1500 ₽ 1250 ₽
2 янв. 3 янв. 4 янв. 5 янв.
2 150 ₽ занято 1 650 ₽ 1 150 ₽
1 янв.
2 000 ₽ 1 750 ₽ N/A занято
1 900 ₽ занято занято 900 ₽
занято 1 500 ₽ занято N/A
с звтрк, беспл. отмена
без звтрк, беспл. отмена
с звтрк, плати вперед
без звтрк, плати вперед
Эволюция поиска
< 100 000 (до 2010 г.)
• теплый LAMP-овый стек с 2003 г.
• монолитная архитектура
inv
поиск
~150 000 (около 2010 г.)
• тяжелый расчет availability
• надо: ~500 отелей в Париже
* 3+ типа комнат
* 2+ тарифа
= 3000+ расчетов
• можем:
• 1000 расчетов в сек для 1 ночи
• 90 расчетов в сек для 30 ночей
inv
поиск
Что делать?
1. Кэширование
• max cache hit ratio: 60%
2. Давайте перепишем все на X?
• пострадает agility
• есть что лучше?
3. Можно попробовать материализовать!
• высокий и ровный performance
• огромный объем данных
1 янв. – 2 янв. = 2000 ₽
1 янв. – 3 янв. = 3750 ₽
1 янв. – 4 янв. = 5250 ₽
1 янв. – 5 янв. = 6500 ₽
2 янв. – 3 янв. = 1750 ₽
2 янв. – 4 янв. = 3250 ₽
2 янв. – 5 янв. = 4500 ₽
3 янв. – 4 янв. = 1500 ₽
3 янв. – 5 янв. = 2750 ₽
4 янв. – 5 янв. = 1250 ₽
1 млн. отелей
3+ типа комнат
2+ тарифа
1-30 длительностей проживания
данные на 1+ год вперед
100 млрд.
цен
• как не испортить user experience?
• как поддерживать
консистентность?
Схема с материализацией
поиск
AVinv материализация AVAV
поиск
autocomplete
&
disambiguation
t = минуты
inv
AV
…
global
realtime
queue
global batch
queue
realtime
queue
batch
queue
расчет
нового дня
AV
AV
кластер материализации
материализатор
материализатор
материализатор
материализатор
очередь
уведомлений
источник
обновления
AV БД
• оптимизируем под чтение
• кластеризация PK по геопозиции (Z-order curve)
• шардинг по check-in
• 1x изменение в inv => 1000x изменений в AV
• SSD
• 4K IOPs reads+writes, 45 MB/s
AV
AV
AV
https://goo.gl/24mFR8
• ускорение в 50-100x раз
• быстрый холодный старт
• время материализации
в норме < 1 мин
• метрики + алерты
• quality check
Результаты
поиск
AVinv материализация AVAV
500 000+ (до ~2014 г.)
• uwsgi + nginx + perl + mysql
• рост бизнеса
• новые фичи
• поиск по странам и регионам
• один запрос = один воркер
2014 – 2015 гг.
• Map-Reduce фреймворк
• SOA
• большие запросы – быстрее
• маленькие запросы – медленнее
• IPC overheads
AVinv материализация AVAV
MR
веб-сервер
MR
MR
Текущая архитектура
Надо что-то менять!
• что хотелось:
• отойти от устаревших подходов
• сохранить MR и SOA
• быстрый доступ к AV и другим данным
• база данных в которую можно быстро писать
• дешевый параллелизм
• попробовали Tarantool
• будем делать:
• Perl => Java
• multithreading, меньший константный фактор
• данные in-memory
• MySQL => RocksDB
координатор
координатор
веб-сервер
координатор
AVпоиск AVпоиск AVпоиск
AVпоиск AVпоиск AVпоиск
AVпоиск AVпоиск AVпоиск
статический шардинг
hotel_id mod N
реплики эквивалентны
shard0
реплика0 реплика1 реплика M
…
…
…
shard1
shardN
… … …
материал.
очередь
availability
материализация
inv
scatter-gather
рандомный выбор
реплики
retry, если необходимо
ping nodes
апдейты за
последние часы
in-memory индексы
AV persisted
Paris => [ hotels in Paris ]
has_parking => [ hotels with parking ]
входные данные:
1. геопозиция: Париж
2. атрибуты поиска: парковка, завтрак и т.д.
инвертированные индексы
Paris => [ hotels in Paris ]
has_parking => [ hotels with parking ]
Париж => [ отели в Париже ]
has_parking => [ отели с парковкой ]
отели отели отели
thread 0 thread Nthread 1
…
filter
sort
topn
filter
sort
topn
filter
sort
topn
merge
…
к координатору
AV
входные данные:
3. check-in, check-out
4. состав «команды»
Почему встроенная БД?
Почему именно RocksDB?
Почему RocksDB?
http://rocksdb.org
Почему встроенная БД?
latency в масштабе
CPU цикл 0,3 нс 1 с
доступ в L1 кэш 0,9 нс 3 с
доступ в L2 кэш 2,8 нс 9 с
доступ в L3 кэш 12,9 нс 43 с
доступ в основную память 120 нс 6 мин
сжатие 1КБ в Snappy 3 000 нс 2,7 час
отправка 1КБ по сети 10 000 нс 9 час
чтение 1МБ из основной памяти 250 000 нс 9 дней
round trip внутри датацентра 500 000 нс 19 дней
ретрансмит TCP пакета 2 000 000 000 нс 200 лет
https://gist.github.com/jboner/2841832
http://talks.godoc.org/github.com/davecheney/high-performance-go-workshop/high-performance-go-workshop.slide#1
Почему встроенная БД?
latency в масштабе
CPU цикл 0,3 нс 1 с
доступ в L1 кэш 0,9 нс 3 с
доступ в L2 кэш 2,8 нс 9 с
доступ в L3 кэш 12,9 нс 43 с
доступ в основную память 120 нс 6 мин
сжатие 1КБ в Snappy 3 000 нс 2,7 час
отправка 1КБ по сети 10 000 нс 9 час
чтение 1МБ из основной памяти 250 000 нс 9 дней
round trip внутри датацентра 500 000 нс 19 дней
ретрансмит TCP пакета 2 000 000 000 нс 200 лет
Почему RocksDB?
• нужна key-value встроенная БД (store, get, delete)
• попробовали разные варианты:
• MapDB, Tokyo/Kyoto cabinet, leveldb
• «боевые условия»:
• датасет в pagecache
• 80% чтение + 20% запись
• стабильный random read performance при random writes
• HDDs, ~1.5K write IOPs, 6 MB/s
https://goo.gl/dqeBPG
Результаты
• время ответа поискового сервиса:
• время ответа странички поиска:
base: 2086ms
variant 1: 1361ms
кол-во отелей до после
Адриатическое побережье ~30 000 13 сек 30 мс
Рим ~6 000 5 сек 20 мс
София ~300 200 мс 10 мс
Заключение
• скорость – это не только про
конверсию
• посмотрите на
материализацию
• бизнес-процессы могут
облегчить жизнь
Иван Круглов
ivan.kruglov@booking.com
Спасибо!
Ваши вопросы?

More Related Content

What's hot

Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Ontico
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruOntico
 
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...Tanya Denisyuk
 
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.Tech Talks @NSU
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014Maxim Dementyev
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхSveta Smirnova
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереBadoo Development
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Pavel Dovbush
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Ontico
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуАлександр Ежов
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Ontico
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 

What's hot (19)

Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
 
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...
 
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секунду
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 

Viewers also liked

How to sell internationally - PayPal ebook
How to sell internationally - PayPal ebookHow to sell internationally - PayPal ebook
How to sell internationally - PayPal ebookPayPalMoscow
 
Исследование PayPal и Data Insight "Розничный экспорт товаров и услуг из Росс...
Исследование PayPal и Data Insight "Розничный экспорт товаров и услуг из Росс...Исследование PayPal и Data Insight "Розничный экспорт товаров и услуг из Росс...
Исследование PayPal и Data Insight "Розничный экспорт товаров и услуг из Росс...PayPalMoscow
 
Механики продвижения в Telegram. Кейс @devakatalk
Механики продвижения в Telegram. Кейс @devakatalkМеханики продвижения в Telegram. Кейс @devakatalk
Механики продвижения в Telegram. Кейс @devakatalkСергей Кокшаров
 
SEO эксперименты. Типы, примеры, рекомендации
SEO эксперименты. Типы, примеры, рекомендацииSEO эксперименты. Типы, примеры, рекомендации
SEO эксперименты. Типы, примеры, рекомендацииСергей Кокшаров
 
20141211 Booking.com Introduction
20141211 Booking.com Introduction20141211 Booking.com Introduction
20141211 Booking.com IntroductionYaskania Mejia
 
Tender In The Night
Tender In The NightTender In The Night
Tender In The NightPichesky
 
Digital Branding Summit 8-9 april 2014. Елена Бочкова (Henkel Beauty Care Ru...
 Digital Branding Summit 8-9 april 2014. Елена Бочкова (Henkel Beauty Care Ru... Digital Branding Summit 8-9 april 2014. Елена Бочкова (Henkel Beauty Care Ru...
Digital Branding Summit 8-9 april 2014. Елена Бочкова (Henkel Beauty Care Ru...World Brand Academy
 
Digital Branding Summit 15-16 october 2014 Светлана Анарува (Google Russia) &...
Digital Branding Summit 15-16 october 2014 Светлана Анарува (Google Russia) &...Digital Branding Summit 15-16 october 2014 Светлана Анарува (Google Russia) &...
Digital Branding Summit 15-16 october 2014 Светлана Анарува (Google Russia) &...World Brand Academy
 
Nokia Quest Actis Wunderman
Nokia Quest Actis WundermanNokia Quest Actis Wunderman
Nokia Quest Actis WundermanOlga Bass
 
Правила жизни Коли Степанова
Правила жизни Коли СтепановаПравила жизни Коли Степанова
Правила жизни Коли СтепановаPichesky
 
Социальная провокация. From Russia with хуй.
Социальная провокация. From Russia with хуй. Социальная провокация. From Russia with хуй.
Социальная провокация. From Russia with хуй. Pichesky
 
Татьяна Круглова - PepsiCo и Кристина Ватутина - Ailove
Татьяна Круглова - PepsiCo и Кристина Ватутина - AiloveТатьяна Круглова - PepsiCo и Кристина Ватутина - Ailove
Татьяна Круглова - PepsiCo и Кристина Ватутина - AiloveWorld Brand Academy
 
ONLINE and OFFLINE
ONLINE and OFFLINEONLINE and OFFLINE
ONLINE and OFFLINEPichesky
 
Dmitriy Kovalenko: Minimization of manual QA
Dmitriy Kovalenko: Minimization of manual QADmitriy Kovalenko: Minimization of manual QA
Dmitriy Kovalenko: Minimization of manual QAAndriy Krayniy
 
О Pichesky
О PicheskyО Pichesky
О PicheskyPichesky
 
31.5.13 HSE{Consult} SMM: закинь и продвинь
31.5.13 HSE{Consult} SMM: закинь и продвинь31.5.13 HSE{Consult} SMM: закинь и продвинь
31.5.13 HSE{Consult} SMM: закинь и продвиньBusiness incubator HSE
 

Viewers also liked (20)

How to sell internationally - PayPal ebook
How to sell internationally - PayPal ebookHow to sell internationally - PayPal ebook
How to sell internationally - PayPal ebook
 
SEO для мобильных сайтов
SEO для мобильных сайтовSEO для мобильных сайтов
SEO для мобильных сайтов
 
Исследование PayPal и Data Insight "Розничный экспорт товаров и услуг из Росс...
Исследование PayPal и Data Insight "Розничный экспорт товаров и услуг из Росс...Исследование PayPal и Data Insight "Розничный экспорт товаров и услуг из Росс...
Исследование PayPal и Data Insight "Розничный экспорт товаров и услуг из Росс...
 
Механики продвижения в Telegram. Кейс @devakatalk
Механики продвижения в Telegram. Кейс @devakatalkМеханики продвижения в Telegram. Кейс @devakatalk
Механики продвижения в Telegram. Кейс @devakatalk
 
SEO эксперименты. Типы, примеры, рекомендации
SEO эксперименты. Типы, примеры, рекомендацииSEO эксперименты. Типы, примеры, рекомендации
SEO эксперименты. Типы, примеры, рекомендации
 
SEO тренды в Google 2017
SEO тренды в Google 2017SEO тренды в Google 2017
SEO тренды в Google 2017
 
20141211 Booking.com Introduction
20141211 Booking.com Introduction20141211 Booking.com Introduction
20141211 Booking.com Introduction
 
Tender In The Night
Tender In The NightTender In The Night
Tender In The Night
 
Digital Branding Summit 8-9 april 2014. Елена Бочкова (Henkel Beauty Care Ru...
 Digital Branding Summit 8-9 april 2014. Елена Бочкова (Henkel Beauty Care Ru... Digital Branding Summit 8-9 april 2014. Елена Бочкова (Henkel Beauty Care Ru...
Digital Branding Summit 8-9 april 2014. Елена Бочкова (Henkel Beauty Care Ru...
 
Digital Branding Summit 15-16 october 2014 Светлана Анарува (Google Russia) &...
Digital Branding Summit 15-16 october 2014 Светлана Анарува (Google Russia) &...Digital Branding Summit 15-16 october 2014 Светлана Анарува (Google Russia) &...
Digital Branding Summit 15-16 october 2014 Светлана Анарува (Google Russia) &...
 
Nokia Quest Actis Wunderman
Nokia Quest Actis WundermanNokia Quest Actis Wunderman
Nokia Quest Actis Wunderman
 
Правила жизни Коли Степанова
Правила жизни Коли СтепановаПравила жизни Коли Степанова
Правила жизни Коли Степанова
 
Социальная провокация. From Russia with хуй.
Социальная провокация. From Russia with хуй. Социальная провокация. From Russia with хуй.
Социальная провокация. From Russia with хуй.
 
Татьяна Круглова - PepsiCo и Кристина Ватутина - Ailove
Татьяна Круглова - PepsiCo и Кристина Ватутина - AiloveТатьяна Круглова - PepsiCo и Кристина Ватутина - Ailove
Татьяна Круглова - PepsiCo и Кристина Ватутина - Ailove
 
ONLINE and OFFLINE
ONLINE and OFFLINEONLINE and OFFLINE
ONLINE and OFFLINE
 
Dmitriy Kovalenko: Minimization of manual QA
Dmitriy Kovalenko: Minimization of manual QADmitriy Kovalenko: Minimization of manual QA
Dmitriy Kovalenko: Minimization of manual QA
 
О Pichesky
О PicheskyО Pichesky
О Pichesky
 
структура кп
структура кпструктура кп
структура кп
 
JAMI
JAMIJAMI
JAMI
 
31.5.13 HSE{Consult} SMM: закинь и продвинь
31.5.13 HSE{Consult} SMM: закинь и продвинь31.5.13 HSE{Consult} SMM: закинь и продвинь
31.5.13 HSE{Consult} SMM: закинь и продвинь
 

Similar to Архитектура поиска в Booking.com

Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Ontico
 
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)Ontico
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)Ontico
 
Rootconf2016 nginx-lua-balancing
Rootconf2016 nginx-lua-balancingRootconf2016 nginx-lua-balancing
Rootconf2016 nginx-lua-balancingAndrey Kononov
 
Мой рассказ на Codefest 2015 о том, как мы пережили рост нагрузки
Мой рассказ на Codefest 2015 о том, как мы пережили рост нагрузкиМой рассказ на Codefest 2015 о том, как мы пережили рост нагрузки
Мой рассказ на Codefest 2015 о том, как мы пережили рост нагрузкиRoman Ivliev
 
Рост курса валют vs рост числа пользователей. Как banki.ru пережил утроение н...
Рост курса валют vs рост числа пользователей. Как banki.ru пережил утроение н...Рост курса валют vs рост числа пользователей. Как banki.ru пережил утроение н...
Рост курса валют vs рост числа пользователей. Как banki.ru пережил утроение н...CodeFest
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»e-Legion
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011CodeCamp
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...it-people
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...SQALab
 
100% натуралы. Экспресс-аудит Интернет Магазина
100% натуралы. Экспресс-аудит Интернет Магазина100% натуралы. Экспресс-аудит Интернет Магазина
100% натуралы. Экспресс-аудит Интернет МагазинаEugene Kuzmenko
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Ontico
 
Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Andrei Solntsev
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Highload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPIHighload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPILeonid Yuriev
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодAndrew Aksyonoff
 

Similar to Архитектура поиска в Booking.com (20)

Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
 
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
 
Rootconf2016 nginx-lua-balancing
Rootconf2016 nginx-lua-balancingRootconf2016 nginx-lua-balancing
Rootconf2016 nginx-lua-balancing
 
Мой рассказ на Codefest 2015 о том, как мы пережили рост нагрузки
Мой рассказ на Codefest 2015 о том, как мы пережили рост нагрузкиМой рассказ на Codefest 2015 о том, как мы пережили рост нагрузки
Мой рассказ на Codefest 2015 о том, как мы пережили рост нагрузки
 
Рост курса валют vs рост числа пользователей. Как banki.ru пережил утроение н...
Рост курса валют vs рост числа пользователей. Как banki.ru пережил утроение н...Рост курса валют vs рост числа пользователей. Как banki.ru пережил утроение н...
Рост курса валют vs рост числа пользователей. Как banki.ru пережил утроение н...
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
100% натуралы. Экспресс-аудит Интернет Магазина
100% натуралы. Экспресс-аудит Интернет Магазина100% натуралы. Экспресс-аудит Интернет Магазина
100% натуралы. Экспресс-аудит Интернет Магазина
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
 
Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Highload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPIHighload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPI
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диод
 

More from Ivan Kruglov

SRE: Site Reliability Engineering
SRE: Site Reliability EngineeringSRE: Site Reliability Engineering
SRE: Site Reliability EngineeringIvan Kruglov
 
Blue-green & canary deployments
Blue-green & canary deploymentsBlue-green & canary deployments
Blue-green & canary deploymentsIvan Kruglov
 
Обратная сторона сервис-ориентированной архитектуры
Обратная сторона сервис-ориентированной архитектурыОбратная сторона сервис-ориентированной архитектуры
Обратная сторона сервис-ориентированной архитектурыIvan Kruglov
 
Kubernetes в Booking.com
Kubernetes в Booking.comKubernetes в Booking.com
Kubernetes в Booking.comIvan Kruglov
 
Тернии контейнеризованных приложений и микросервисов
Тернии контейнеризованных приложений и микросервисовТернии контейнеризованных приложений и микросервисов
Тернии контейнеризованных приложений и микросервисовIvan Kruglov
 
Introducing envoy-based service mesh at Booking.com
Introducing envoy-based service mesh at Booking.comIntroducing envoy-based service mesh at Booking.com
Introducing envoy-based service mesh at Booking.comIvan Kruglov
 
Service mesh для микросервисов
Service mesh для микросервисовService mesh для микросервисов
Service mesh для микросервисовIvan Kruglov
 
SOA: Строим свой service mesh
SOA: Строим свой service meshSOA: Строим свой service mesh
SOA: Строим свой service meshIvan Kruglov
 
Solving some of the scalability problems at booking.com
Solving some of the scalability problems at booking.comSolving some of the scalability problems at booking.com
Solving some of the scalability problems at booking.comIvan Kruglov
 
Sereal: a view from inside
Sereal: a view from insideSereal: a view from inside
Sereal: a view from insideIvan Kruglov
 
SOA: послать запрос на сервер? Что может быть проще?!
SOA: послать запрос на сервер? Что может быть проще?!SOA: послать запрос на сервер? Что может быть проще?!
SOA: послать запрос на сервер? Что может быть проще?!Ivan Kruglov
 
Мониторинг, когда не тестируешь
Мониторинг, когда не тестируешьМониторинг, когда не тестируешь
Мониторинг, когда не тестируешьIvan Kruglov
 
Processing JSON messages in highspeed
Processing JSON messages in highspeedProcessing JSON messages in highspeed
Processing JSON messages in highspeedIvan Kruglov
 
Bringing code to the data: from MySQL to RocksDB for high volume searches
Bringing code to the data: from MySQL to RocksDB for high volume searchesBringing code to the data: from MySQL to RocksDB for high volume searches
Bringing code to the data: from MySQL to RocksDB for high volume searchesIvan Kruglov
 
Sereal and its tooling
Sereal and its toolingSereal and its tooling
Sereal and its toolingIvan Kruglov
 

More from Ivan Kruglov (16)

SRE: Site Reliability Engineering
SRE: Site Reliability EngineeringSRE: Site Reliability Engineering
SRE: Site Reliability Engineering
 
Blue-green & canary deployments
Blue-green & canary deploymentsBlue-green & canary deployments
Blue-green & canary deployments
 
Обратная сторона сервис-ориентированной архитектуры
Обратная сторона сервис-ориентированной архитектурыОбратная сторона сервис-ориентированной архитектуры
Обратная сторона сервис-ориентированной архитектуры
 
Kubernetes в Booking.com
Kubernetes в Booking.comKubernetes в Booking.com
Kubernetes в Booking.com
 
Тернии контейнеризованных приложений и микросервисов
Тернии контейнеризованных приложений и микросервисовТернии контейнеризованных приложений и микросервисов
Тернии контейнеризованных приложений и микросервисов
 
Introducing envoy-based service mesh at Booking.com
Introducing envoy-based service mesh at Booking.comIntroducing envoy-based service mesh at Booking.com
Introducing envoy-based service mesh at Booking.com
 
Service mesh для микросервисов
Service mesh для микросервисовService mesh для микросервисов
Service mesh для микросервисов
 
SOA: Строим свой service mesh
SOA: Строим свой service meshSOA: Строим свой service mesh
SOA: Строим свой service mesh
 
Solving some of the scalability problems at booking.com
Solving some of the scalability problems at booking.comSolving some of the scalability problems at booking.com
Solving some of the scalability problems at booking.com
 
Sereal: a view from inside
Sereal: a view from insideSereal: a view from inside
Sereal: a view from inside
 
SOA: послать запрос на сервер? Что может быть проще?!
SOA: послать запрос на сервер? Что может быть проще?!SOA: послать запрос на сервер? Что может быть проще?!
SOA: послать запрос на сервер? Что может быть проще?!
 
Мониторинг, когда не тестируешь
Мониторинг, когда не тестируешьМониторинг, когда не тестируешь
Мониторинг, когда не тестируешь
 
Processing JSON messages in highspeed
Processing JSON messages in highspeedProcessing JSON messages in highspeed
Processing JSON messages in highspeed
 
Bringing code to the data: from MySQL to RocksDB for high volume searches
Bringing code to the data: from MySQL to RocksDB for high volume searchesBringing code to the data: from MySQL to RocksDB for high volume searches
Bringing code to the data: from MySQL to RocksDB for high volume searches
 
Optimize sereal
Optimize serealOptimize sereal
Optimize sereal
 
Sereal and its tooling
Sereal and its toolingSereal and its tooling
Sereal and its tooling
 

Архитектура поиска в Booking.com

  • 3. We must deliver the best experience, as frictionless as possible, and grow and adapt fast to the customer’s need by Eduardo Shiota
  • 4. We must deliver the best experience, as frictionless as possible, and grow and adapt fast to the customer’s need by Eduardo Shiota
  • 5. by Eduardo Shiota We must deliver the best experience, as frictionless as possible, and grow and adapt fast to the customer’s need
  • 6. 0 200,000 400,000 600,000 800,000 1,000,000 1,200,000 2002 2004 2006 2008 2010 2012 2014 2016 объектов размещения ежедневно забронированных ночей
  • 7. by Eduardo Shiota We must deliver the best experience, as frictionless as possible, and grow and adapt fast to the customer’s need
  • 11.
  • 12.
  • 14. by Eduardo Shiota We must deliver the best experience, as frictionless as possible, and grow and adapt fast to the customer’s need
  • 15. наилучшее впечатление низкие цены большой выбор актуальная информация хороший поиск удобно доступно саппорт говорит на моем языке мобильный сайт скорость мобильное приложение сайт на родном языке и др.
  • 16. наилучшее впечатление низкие цены большой выбор актуальная информация хороший поиск удобно доступно саппорт говорит на моем языке мобильный сайт скорость мобильное приложение сайт на родном языке и др.
  • 17. низкие цены большой выбор актуальная информация хороший поиск удобно доступно саппорт говорит на моем языке мобильный сайт скорость мобильное приложение сайт на родном языке и др. наилучшее впечатление
  • 22.
  • 23. поиск отбор по атрибутам group fit отбор по availability ранжирование autocomplete & disambiguation определение геопозиции
  • 24. поиск отбор по атрибутам group fit отбор по availability ранжирование autocomplete & disambiguation определение геопозиции деревня Париж, Кигинский район, Республика Башкортостан, Россия ?
  • 25. inventory гостиница «Домик с трубой» 1 янв. 2 янв. 3 янв. 2 000 ₽ 1750 ₽ 4 янв. 5 янв. 1500 ₽ 1250 ₽ availability гостиница «Домик с трубой» стоит 6500 ₽ с 1 янв. по 5 янв.
  • 26. 1 янв. 2 янв. 3 янв. 2 000 ₽ 1750 ₽ 4 янв. 5 янв. 1500 ₽ 1250 ₽ 2 янв. 3 янв. 4 янв. 5 янв. 2 150 ₽ занято 1 650 ₽ 1 150 ₽ 1 янв. 2 000 ₽ 1 750 ₽ N/A занято 1 900 ₽ занято занято 900 ₽ занято 1 500 ₽ занято N/A с звтрк, беспл. отмена без звтрк, беспл. отмена с звтрк, плати вперед без звтрк, плати вперед
  • 28. < 100 000 (до 2010 г.) • теплый LAMP-овый стек с 2003 г. • монолитная архитектура inv поиск
  • 29. ~150 000 (около 2010 г.) • тяжелый расчет availability • надо: ~500 отелей в Париже * 3+ типа комнат * 2+ тарифа = 3000+ расчетов • можем: • 1000 расчетов в сек для 1 ночи • 90 расчетов в сек для 30 ночей inv поиск
  • 30. Что делать? 1. Кэширование • max cache hit ratio: 60% 2. Давайте перепишем все на X? • пострадает agility • есть что лучше? 3. Можно попробовать материализовать! • высокий и ровный performance • огромный объем данных 1 янв. – 2 янв. = 2000 ₽ 1 янв. – 3 янв. = 3750 ₽ 1 янв. – 4 янв. = 5250 ₽ 1 янв. – 5 янв. = 6500 ₽ 2 янв. – 3 янв. = 1750 ₽ 2 янв. – 4 янв. = 3250 ₽ 2 янв. – 5 янв. = 4500 ₽ 3 янв. – 4 янв. = 1500 ₽ 3 янв. – 5 янв. = 2750 ₽ 4 янв. – 5 янв. = 1250 ₽
  • 31. 1 млн. отелей 3+ типа комнат 2+ тарифа 1-30 длительностей проживания данные на 1+ год вперед 100 млрд. цен
  • 32. • как не испортить user experience? • как поддерживать консистентность? Схема с материализацией поиск AVinv материализация AVAV
  • 34. inv AV … global realtime queue global batch queue realtime queue batch queue расчет нового дня AV AV кластер материализации материализатор материализатор материализатор материализатор очередь уведомлений источник обновления
  • 35. AV БД • оптимизируем под чтение • кластеризация PK по геопозиции (Z-order curve) • шардинг по check-in • 1x изменение в inv => 1000x изменений в AV • SSD • 4K IOPs reads+writes, 45 MB/s AV AV AV https://goo.gl/24mFR8
  • 36. • ускорение в 50-100x раз • быстрый холодный старт • время материализации в норме < 1 мин • метрики + алерты • quality check Результаты поиск AVinv материализация AVAV
  • 37. 500 000+ (до ~2014 г.) • uwsgi + nginx + perl + mysql • рост бизнеса • новые фичи • поиск по странам и регионам • один запрос = один воркер
  • 38. 2014 – 2015 гг. • Map-Reduce фреймворк • SOA • большие запросы – быстрее • маленькие запросы – медленнее • IPC overheads AVinv материализация AVAV MR веб-сервер MR MR
  • 40. Надо что-то менять! • что хотелось: • отойти от устаревших подходов • сохранить MR и SOA • быстрый доступ к AV и другим данным • база данных в которую можно быстро писать • дешевый параллелизм • попробовали Tarantool • будем делать: • Perl => Java • multithreading, меньший константный фактор • данные in-memory • MySQL => RocksDB
  • 41. координатор координатор веб-сервер координатор AVпоиск AVпоиск AVпоиск AVпоиск AVпоиск AVпоиск AVпоиск AVпоиск AVпоиск статический шардинг hotel_id mod N реплики эквивалентны shard0 реплика0 реплика1 реплика M … … … shard1 shardN … … … материал. очередь availability материализация inv scatter-gather рандомный выбор реплики retry, если необходимо ping nodes апдейты за последние часы in-memory индексы AV persisted
  • 42. Paris => [ hotels in Paris ] has_parking => [ hotels with parking ] входные данные: 1. геопозиция: Париж 2. атрибуты поиска: парковка, завтрак и т.д. инвертированные индексы Paris => [ hotels in Paris ] has_parking => [ hotels with parking ] Париж => [ отели в Париже ] has_parking => [ отели с парковкой ] отели отели отели thread 0 thread Nthread 1 … filter sort topn filter sort topn filter sort topn merge … к координатору AV входные данные: 3. check-in, check-out 4. состав «команды»
  • 43. Почему встроенная БД? Почему именно RocksDB? Почему RocksDB? http://rocksdb.org
  • 44. Почему встроенная БД? latency в масштабе CPU цикл 0,3 нс 1 с доступ в L1 кэш 0,9 нс 3 с доступ в L2 кэш 2,8 нс 9 с доступ в L3 кэш 12,9 нс 43 с доступ в основную память 120 нс 6 мин сжатие 1КБ в Snappy 3 000 нс 2,7 час отправка 1КБ по сети 10 000 нс 9 час чтение 1МБ из основной памяти 250 000 нс 9 дней round trip внутри датацентра 500 000 нс 19 дней ретрансмит TCP пакета 2 000 000 000 нс 200 лет https://gist.github.com/jboner/2841832 http://talks.godoc.org/github.com/davecheney/high-performance-go-workshop/high-performance-go-workshop.slide#1
  • 45. Почему встроенная БД? latency в масштабе CPU цикл 0,3 нс 1 с доступ в L1 кэш 0,9 нс 3 с доступ в L2 кэш 2,8 нс 9 с доступ в L3 кэш 12,9 нс 43 с доступ в основную память 120 нс 6 мин сжатие 1КБ в Snappy 3 000 нс 2,7 час отправка 1КБ по сети 10 000 нс 9 час чтение 1МБ из основной памяти 250 000 нс 9 дней round trip внутри датацентра 500 000 нс 19 дней ретрансмит TCP пакета 2 000 000 000 нс 200 лет
  • 46. Почему RocksDB? • нужна key-value встроенная БД (store, get, delete) • попробовали разные варианты: • MapDB, Tokyo/Kyoto cabinet, leveldb • «боевые условия»: • датасет в pagecache • 80% чтение + 20% запись • стабильный random read performance при random writes • HDDs, ~1.5K write IOPs, 6 MB/s https://goo.gl/dqeBPG
  • 47. Результаты • время ответа поискового сервиса: • время ответа странички поиска: base: 2086ms variant 1: 1361ms кол-во отелей до после Адриатическое побережье ~30 000 13 сек 30 мс Рим ~6 000 5 сек 20 мс София ~300 200 мс 10 мс
  • 48. Заключение • скорость – это не только про конверсию • посмотрите на материализацию • бизнес-процессы могут облегчить жизнь

Editor's Notes

  1. отсутствие сортировки по цене
  2. разбиваем задачу по Z24 индексу