Comments 34
Спасибо, интересное чтиво.
Если интересуют более подробные детали, спрашивайте. Я могу уточнить.
Жаль в статье не рассказано, что будет после вашего заказа, это же самое интересное!
Вы только что вернулись из отпуска в Казани?
Отлично! Тогда мы через два дня пришлем вам письмо с предложением снова туда съездить.
Не хотите? Только чемоданы распаковали?
Может тогда через четыре дня? Снова нет? Странно… Вам же там понравилось, вы 5 звезд поставили?
Что, у вас следующий отпуск только через полгода?
А, ну ничего страшного, за это время найдем для вас и пришлем вам на почту 91 вариант где его можно провести.
Оставайтесь с нами, ваш Booking.
Хотелось просто ввести название отеля и получить ссылку на него — не получилось.
А если перейти в рубрику отели, то вообще будет вывален список всего что есть, но уже же без поиска, если там не один десяток вариантов, то поиск нужного доставляет массу удовольствия.
В любом случае — спасибо за статью, было очень интересно!
То же самое с поиском на сайте. Про то что нет поиска по каким-либо параметрам- надо понимать есть тут коммерческие моменты. В моем частном случае айрбнб за прошлый год сильно просел в бронировании, а букинг занял эти дни и добавил очень серьезно, суточно.ру и остальные вообще погоды пока не строят, к сожалению. Думаю весь секрет как раз в волшебных календарях и availability, который только у букинга в адеквате. Модель букинга по монетизации- стоит на стороне клиента. А, допустим, Суточно.ру — тупиковая модель, по сути сайта с обьявлениями.
Что не нравится — отзывы на букинге сплошь восторженные. Если ехать приходится, я на них вообще не смотрю, только по негативу пытаюсь определиться.
Спасибо, пользуюсь booking эпизодически, полезное приложение. И статья интересная.
Честно говоря, часто пользуюсь booking, чтобы оценить, где больше всего отелей и какова средняя цена. Потом приезжаю в нужное место, и беру номер уже на месте. Заранее бронирую редко по двум причинам:
- когда приезжаю и смотрю на месте, номера могут серьезно отличаться от того, что на картинках. Личное впечатление ничто не заменит
- если не забронировал номер заранее, то можно торговаться. В Таиланде один раз удалось так снять комнату в три раза дешевле (!), чем цена на booking
Понимаю, что от таких как я, booking'у один лишь вред. :) Но я все же изредка бронирую заранее… Допустим, кто-то, чьему мнению я доверяю, говорит мне: «Приедешь в такое-то место, там есть замечательный отель YYY». Личному отзыву доверяю больше, чем отзывам в Интернете, потому что когда читаешь отзывы на booking о тех отелях, где бывал, возникает только каша в голове.
Кто-то бывал до этого только в 5* отелях, и если ему не меняют ежедневно 4 полотенца, напишет, что это ужасная грязная клоака. А кто-то совершенно неприятязательный, жил до этого в индийских мотелях для дальнобойщиков за 100 рупий в день, и пишет паршивому отелю отличный отзыв. Короче, в отзывы даже перестал смотреть, так как они не сообщают никакой полезной информации.
Смысл in-memory в том, что каждая нода обрабатывая запрос много раз ходит в БД за availability. И ходить в память ближе чем ходить по сети.
Очень интересный доклад и полезный. Возникло несколько вопросов:
>> На входе делается первичная фильтрация тех отелей, которые удовлетворяют нашим критериям на основе инвертированных индексов. У нас есть индекс, ключом являются города, value — это все отели этого города. Например, Париж и все отели, которые находятся в Париже. Есть второй список, например, те отели у которых есть паркинг. Далее если мы пересечём эти два списка — операция дёшевая и быстрая, — мы получим те отели которые в Париже и с парковкой.
т.е. у вас должны поддерживаться N инвертированных индексов по одному на каждую "фичу". В вашем примере для Парижа вы найдете 500 идшников отелей, для has_parking вы получите скорее всего под 100 тыс отелей, по другим фичам кажется вы тоже получите очень много вариантов. Звучит так, что пересечение таких списков - это будет сложная операция. Как это реализовано? наверняка там к-н хаки есть?
>> Как мы обновляем данные availability? Каждая нода независимо от кого-либо берёт и читает эту очередь, применяет update к своему локальному состоянию. Мы посчитали данные один раз, что очень дорого, а применяем их много раз. В этой очереди данные хранятся за последние часы. Если нода отстала, она смогла бы догнать.
я так понял, что внутри шарды все ноды независимы. Может ли возникнуть ситуация, когда пользователь сделает сначала запрос и попадет на 1 ноду, получит результат 1, а потом сделает второй запрос и попадет на ноду 2, которая отстает и в результате получит разные результаты? например, пользовтаель может делать просто рефреши и получать разные результаты? есть ли такое? или может это не проблема?
Архитектура поиска в Booking.com