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

49
Архитектура поиска в Booking.com Иван Круглов

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

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

АрхитектурапоискавBooking.comИванКруглов

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

Амстердам

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

Wemustdeliverthebestexperience,asfrictionlessaspossible,andgrowandadaptfasttothecustomer’sneedbyEduardoShiota

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

Wemustdeliverthebestexperience,asfrictionlessaspossible,andgrowandadaptfasttothecustomer’sneedbyEduardoShiota

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

byEduardoShiota

Wemustdeliverthebestexperience,asfrictionlessaspossible,andgrowandadaptfasttothecustomer’sneed

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

0

200 000

400 000

600 000

800 000

1 000 000

1 200 000

2002 2004 2006 2008 2010 2012 2014 2016

объектовразмещения

ежедневнозабронированных

ночей

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

byEduardoShiota

Wemustdeliverthebestexperience,asfrictionlessaspossible,andgrowandadaptfasttothecustomer’sneed

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

try & fail

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

A/Bтестирование

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

Buy now

Buy now

vs

Page 11: Архитектура поиска в Booking.com
Page 12: Архитектура поиска в Booking.com
Page 13: Архитектура поиска в Booking.com

1000+экспериментов

70+роллаутов вдень

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

byEduardoShiota

Wemustdeliverthebestexperience,asfrictionlessaspossible,andgrowandadaptfasttothecustomer’sneed

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

наилучшеевпечатление

низкиеценыбольшойвыборактуальнаяинформацияхорошийпоискудобнодоступносаппорт говоритнамоемязыкемобильныйсайтскоростьмобильноеприложениесайтнародномязыкеидр.

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

наилучшеевпечатление

низкиеценыбольшойвыборактуальнаяинформацияхороший поискудобнодоступносаппорт говоритнамоемязыкемобильныйсайтскоростьмобильноеприложениесайтнародномязыкеидр.

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

низкиеценыбольшойвыборактуальнаяинформацияхороший поискудобнодоступносаппорт говоритнамоемязыкемобильныйсайтскоростьмобильноеприложениесайтнародномязыкеидр.

наилучшеевпечатление

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

почемуважнаскорость?

https://goo.gl/DP593vhttps://goo.gl/HhquKLhttps://goo.gl/w1RIhHhttps://goo.gl/brL9Zxhttps://goo.gl/EbXZl1https://goo.gl/Gcaunb

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

поиск90%

10%

поиск50%50%

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

поискэволюция поиска текущая

архитектура

заключение

План

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

ПОИСК

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

поиск

отбор по атрибутам

group fitотбор по availability

ранжирование

autocomplete&

disambiguation

определениегеопозиции

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

поиск

отбор по атрибутам

group fitотбор по availability

ранжирование

autocomplete&

disambiguation

определениегеопозиции

деревняПариж,Кигинский район,РеспубликаБашкортостан,Россия?

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

inventory

гостиница«Домикструбой»

1янв. 2 янв. 3 янв.2 000₽ 1750 ₽

4 янв. 5 янв.1500 ₽ 1250 ₽

availability

гостиница«Домикструбой»

стоит6500₽с1янв.по5янв.

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

1янв. 2 янв. 3 янв.2 000₽ 1750 ₽

4 янв. 5 янв.1500 ₽ 1250 ₽

2 янв. 3 янв. 4 янв. 5 янв.2 150₽ занято 1650 ₽ 1150 ₽

1 янв.

2 000₽ 1750 ₽ N/A занято1900₽ занято занято 900 ₽занято 1500 ₽ занято N/A

сзвтрк,беспл.отмена

беззвтрк,беспл.отмена

с звтрк,плативперед

беззвтрк,плативперед

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

Эволюцияпоиска

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

<100 000(до 2010г.)

• теплыйLAMP-овый стекс2003г.• монолитнаяархитектура

inv

поиск

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

~150000(около2010г.)

• тяжелыйрасчетavailability• надо:~500отелей вПариже

*3+типакомнат*2+тарифа=3000+ расчетов

• можем:• 1000расчетоввсекдля1ночи• 90расчетоввсекдля30ночей

inv

поиск

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

Чтоделать?

1. Кэширование• maxcachehitratio: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₽

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

1 млн.отелей

3+типакомнат

2+тарифа

1-30длительностейпроживания

данныена1+ годвперед

100млрд.цен

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

• какнеиспортитьuserexperience?• какподдерживатьконсистентность?

Схемасматериализацией

поиск

AVinv материализация AVAV

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

поиск

autocomplete&

disambiguation

t =минуты

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

invAV

…globalrealtimequeue

globalbatchqueue

realtimequeue

batchqueue

расчетновогодня

AV

AV

кластерматериализации

материализаторматериализаторматериализаторматериализатор

очередьуведомлений

источникобновления

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

AV БД

• оптимизируемподчтение• кластеризацияPK погеопозиции (Z-ordercurve)• шардинг по check-in• 1xизменениев inv =>1000xизмененийвAV• SSD• 4KIOPs reads+writes,45MB/s

AVAVAV

https://goo.gl/24mFR8

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

• ускорениев50-100xраз• быстрыйхолодныйстарт• времяматериализациивнорме<1мин• метрики+алерты• qualitycheck

Результаты

поиск

AVinv материализация AVAV

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

500000+(до~2014г.)

• uwsgi +nginx +perl +mysql• ростбизнеса• новыефичи• поискпостранамирегионам

• один запрос=один воркер

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

2014 – 2015 гг.

• Map-Reduceфреймворк• SOA

• большиезапросы– быстрее• маленькиезапросы– медленнее

• IPCoverheadsAVinv материализация AVAV

MR

веб-сервер

MR

MR

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

Текущаяархитектура

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

Надочто-томенять!

• чтохотелось:• отойтиотустаревшихподходов• сохранитьMRи SOA• быстрыйдоступкAVидругимданным• базаданныхвкоторуюможнобыстрописать• дешевыйпараллелизм

• попробовалиTarantool

• будемделать:• Perl=>Java

• multithreading,меньшийконстантныйфактор• данныеin-memory• MySQL=>RocksDB

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

координаторкоординатор

веб-сервер

координатор

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

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

Paris=>[hotels inParis]has_parking =>[hotelswithparking]

входные данные:

1. геопозиция: Париж2. атрибуты поиска: парковка, завтрак и т.д.

инвертированныеиндексы

Paris=>[hotels inParis]has_parking =>[hotelswithparking]Париж=>[отели вПариже]has_parking =>[отелиспарковкой ]

отели отели отели

thread0 threadNthread1

… filtersorttopn

filtersorttopn

filtersorttopn

merge

ккоординатору

AV

входные данные:

3. check-in, check-out4. состав «команды»

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

ПочемувстроеннаяБД?

ПочемуименноRocksDB?

ПочемуRocksDB?

http://rocksdb.org

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

ПочемувстроеннаяБД?latency вмасштабе

CPUцикл 0,3нс 1сдоступвL1кэш 0,9нс 3сдоступвL2кэш 2,8нс 9сдоступвL3кэш 12,9нс 43сдоступвосновнуюпамять 120нс 6минсжатие 1КБв Snappy 3000нс 2,7часотправка1КБпосети 10000нс 9часчтение1МБизосновнойпамяти 250000нс 9днейroundtripвнутридатацентра 500000нс 19днейретрансмит TCPпакета 2000000000нс 200лет

https://gist.github.com/jboner/2841832http://talks.godoc.org/github.com/davecheney/high-performance-go-workshop/high-performance-go-workshop.slide#1

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

ПочемувстроеннаяБД?latency вмасштабе

CPUцикл 0,3нс 1сдоступвL1кэш 0,9нс 3сдоступвL2кэш 2,8нс 9сдоступвL3кэш 12,9нс 43сдоступвосновнуюпамять 120нс 6минсжатие 1КБв Snappy 3000нс 2,7часотправка1КБпосети 10000нс 9часчтение1МБизосновнойпамяти 250000нс 9днейroundtripвнутридатацентра 500000нс 19днейретрансмит TCPпакета 2000000000нс 200лет

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

ПочемуRocksDB?

• нужнаkey-valueвстроеннаяБД(store,get,delete)• попробовалиразныеварианты:• MapDB,Tokyo/Kyotocabinet,leveldb

• «боевыеусловия»:• датасет вpagecache• 80%чтение+20%запись

• стабильныйrandomreadperformanceприrandomwrites• HDDs, ~1.5KwriteIOPs,6MB/s

https://goo.gl/dqeBPG

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

Результаты• времяответапоисковогосервиса:

• времяответастраничкипоиска:

base:2086ms

variant1:1361ms

кол-воотелей до послеАдриатическоепобережье ~30 000 13сек 30мсРим ~6 000 5сек 20мсСофия ~300 200мс 10мс

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

Заключение

• скорость– этонетолькопроконверсию• посмотритенаматериализацию• бизнес-процессымогутоблегчитьжизнь

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

Иван Круглов[email protected]

Спасибо!

Ваши вопросы?