Airbnb — популярный сервис, который помогает туристам найти жильё в чужом городе. И речь не о простых гостиничных номерах. На Airbnb для съёма доступно всё, что можно представить, начиная с раскладушки на ночь и заканчивая частным островом, причём хозяева, как правило, не компании, а обычные люди. За пять лет пользователями Airbnb стали более девяти миллионов человек, причём почти пять миллионов добавились за последний год. Количество данных, с которыми приходится иметь дело стартапу, растёт ещё быстрее.

Иглу, построенные из снега, стоят недёшево.
Жизнь в иглу, построенном из снега, обходится недёшево.

Объём архивных данных, накопленных Airbnb, составляет по меньшей мере два петабайта. Ежедневно компания обрабатывает около 22 терабайтов информации при помощи хранилища, построенного на основе Apache Hadoop и Hive. Информация поступает из множества источников. При таком числе пользователей даже серверные логи растут с пугающей скоростью. Кроме того, используется информация, накопленная внешними аналитическими приложениями, и разнообразные наборы данных, сгенерированные самим сервисом.

Требования к инструментам, которые обрабатывает эти данные, тоже различные. Многие из них предназначены исключительно для внутреннего использования. К этой категории относятся, например, средства, позволяющие изучать особенности поведения посетителей. Это не особенно срочная задача, поэтому такие отчёты можно автоматически генерировать раз в сутки. Встроенный поисковик сайта или рекомендательная система, доступные обычным пользователям, — совсем другое дело. Они должны выдавать ответ «на лету».

Серверное оборудование, необходимое для того, чтобы справляться с огромной нагрузкой, компания арендует в Amazon Web Services. Первоначально в Airbnb применяли также и Amazon Elastic MapReduce, однако теперь программное решение полностью основано на открытом коде и собственных разработках.

В Airbnb можно найти средневековые замки, особняки, баржи и даже домики на деревьях.
В Airbnb можно найти средневековые замки, особняки, баржи и даже домики на деревьях.

Основа софтверной инфраструктуры Airbnb — это кластерный менеджер Apache Mesos, Специалисты компании сравнивают его с операционной системой, предназначенной не для отдельного компьютера, а для целого кластера. Mesos автоматически распределяет доступные серверные ресурсы между различными приложениями, следя, чтобы загрузка машин всегда была максимальной.

Mesos справляется с кластерами, состоящими из десятков тысяч узлов. Такая способность к масштабированию делает его особенно привлекательным для крупных интернет-компаний, обслуживающих миллионы пользователей. Кроме Airbnb, Mesos используют Twitter и видеосервис Vimeo.

В Airbnb предпочитают Mesos по двум причинам. Во-первых, он позволяет обходиться меньшим количеством серверов. Иными словами, это выгодно. Во-вторых, автоматическое управление ресурсами упрощает работу программистов. В результате команды разработчиков могут действовать оперативнее.

Для регулярного запуска процессов, которые время от времени перерабатывают данные, генерируя поисковые индексы, отчёты для бизнес-аналитики, а также обеспечивают работу системы рекомендации цен и детектора мошеннических транзакций, в Airbnb разработали систему под названием Chronos. Как пишет в блоге компании инженер Airbnb Бренден Мэтьюз, проблема, которую решает эта система, куда сложнее, чем кажется.

Chronos фактически представляет собой распределённую и «пуленепробиваемую» версию cron — демона UNIX, автоматически запускающего программы в установленное время. В отличие от cron, Chronos предназначен для использования в кластерах в сочетании с Mesos. Кроме того, он обладает пользовательским интерфейсом, с помощью которого аналитики могут узнать, какие процессы успешно отработали своё, а какие — остановились из-за ошибки.

Интерфейс Chronos
Интерфейс Chronos.

Обработкой данных «на лету» заведует ещё одна система с открытыми исходниками — Storm. Если Hadoop предназначается для исполнения пакетных заданий, то Storm пропускает через себя потоки информации в реальном времени. При этом задачи Storm могут без помех исполняться на тех же узлах кластера, которые задействованы для Hadoop или Chronos. Storm используют не только в Airbnb, но и в Twitter, купонном сервисе Gropon и гигантах китайской электронной коммерции Alibaba.com и Taobao.com.

Одним из примеров использования Storm может служить персонализированная поисковая система Airbnb. Её основа — подбор предложений по принципу географической близости к указанному месту, однако при ранжировании учитывается масса других факторов, связанных с конкретным пользователем, в том числе его настройки, известные социальные связи, история заказов, а также комментарии и оценки, которые он оставлял на сервисе.

В Airbnb ценят информацию и всецело полагаются на её анализ. «Мы хотим применять данные во время принятия каждого решения, — говорит вице-президент по техническим решениям Майк Кёртис. — Мы хотим быть компанией, путь которой задают данные».