С тех пор, как я написал пост про Архитектуру Facebook, я как-то перестал активно следить за развитием событий и, как оказалось, зря.  В Facebook ввели новый функционал "социального почтового ящика", агрегирующий входящие сообщения из электронной почты, мессенджеров, SMS и сообщений на сайте Facebook. Изначально они разрабатывали Cassandra именно для использования в этом проекте, но в итоге этот пост заняла достаточно противоречивая технология: HBase. HBase одержала вверх над Cassandra, MySQL и многими другими решениями. Как так получилось?

Используемая в Cassandra логика целостности данных оказалась не достаточно строгой для использования в этом продукте. В Facebook широко используется MySQL, но производительность существенно снижается с ростом массива данных и увеличением размеров индексов. Возможно они взялись бы за разработку нового решения для этой задачи, но их выбор пал на HBase.

HBase представляет собой горизонтально масштабируемую систему хранения таблиц, поддерживающую высокую частоту обновления строк в массивных наборах данных. Звучит как то что надо, для построения новой системы сообщений в Facebook. В основе модели данных HBase лежит концепция BigTable от Google, которая хорошо подходит для поиска строк по идентификаторам, фильтрации и сканированию наборов строк. Из слабых сторон можно назвать отсутствию поддержки сложных запросов, но этот факт компенсируется широким спектром инструментов по аналитике, в том числе и Hive, разработанном в самом Facebook для работы с их многопетабайтным хранилищем данных. Помимо прочего HBase основана на ApacheHadoop и HDFS, с которыми Facebook и так активно работает для анализа данных.

Это решение было принято не на пустом месте, а так как они отслеживали как используется данный функционал и пришли к выводу, что это то, что им нужно. Им нужна была система, справляющаяся с двумя типичными ситуациями:

  • Небольшой нестабильный набор временных данных
  • Постоянно растущий архив информации, который очень редко используется

Звучит правдоподобно. Обычно входящие сообщения читаются один раз, и очень редко к ним возвращаются снова. Напрашивается использование двух разных систем для каждого случая, но на практике оказалось, что HBase отлично справляется с обоими. Полнотекстный поиск же, скорее всего, переложен на одну из сторонних систем вроде Lucene.

HBase:

  • имеет более подходящую модель консистентности, чем Cassandra;
  • отлично масштабируется и показывает неплохую производительность при паттернах использования в FB;
  • имеет ряд преимуществ благодаря использованию HDFS для хранения данных: репликация, проверка целостности, автоматическая перебалансировка;
  • легко поддерживать в Facebook, так как их системные администраторы уже имеют большой опыт со смежными проектами - Hadoop и HDFS.

Для хранения прикрепленных файлов используется Haystack, их собственная система, изначально разработанная для хранения изображений.

Для сбора сообщений из различных источников используется собственный сервер приложений.

Поиск новых пользователей основан на ZooKeeper.

Продукт тесно с другими сервисами Facebook для:

  • Проверка адресов электронной почты
  • Определения отношений дружбы
  • Настроек приватности
  • Решений о транспорте для отправки сообщения (e-mail, SMS, внутреннее сообщение)

Использование смежных проектов Hadoop и Hive стало одним из ключевых факторов, повлиявших на то, что эта технология прижилась как часть экосистемы в таком крупном проекте, как Facebook. Это идеальный сценарий для практически любого продукта: стать партнером успешного популярного продукта в надежде на то, что пользователь воспользуется обоими за компанию - именно по такому пути развивается HBase.

Хочется добавить пару слов от себя: я имел довольно приличный опыт работы с HBase в (уже) далеком 2008 году, на тот момент HBase был самым нестабильным из всех проектов, составляющих экосистему Hadoop. На бумаге HBase и правда выглядит идеальным решением для многих задач, но малейший сбой в метаданных делал всю базу данных неработоспособной, а таковое случалось достаточно часто, обычно по вине HDFS. В том проекте было убито массу времени на попытки "нормализовать" работу связки Hadoop+HBase, но в итоге от последней пришлось отказаться. Очень рад, что этот проект развивается такими семимильными шагами, задумка у проекта изначально была и правда очень стоящая. HBase буквально за пару лет стал пригоден для production использования, да еще и на таком масштабе.  Пройдет еще год-другой, кардинально изменится архитектура Hadoop в лучшую сторону, и HBase наверняка станет лучшей из распределенных систем хранения структурированных данных, доступных на рынке. Если, конечно, Google к тому времени не успеет опубликовать в opensource её прародителя, BigTable :)

А Вы как относитесь к HBase? Использовали ли на практике? Какие впечатления?

Источники информации