Компания Facebook открыла исходные коды Presto — новой распределённой системы управления базами данных, которая, с одной стороны, полностью поддерживает стандартный язык запросов SQL, а с другой — позволяет строить кластеры, состоящие из сотен узлов, и обрабатывать на них петабайты данных.

В дата-центрах Facebook хранится более 300 петабайт информации.
В дата-центрах Facebook хранится более 300 петабайт информации.

Это уже не первая попытка Facebook совместить удобство реляционных СУБД и масштабируемость, свойственную MapReduce и NoSQL-решениям. Несколько лет назад инженеры компании разработали систему хранения данных Hive. В отличие от Presto, её основой служила платформа Hadoop (открытая реализация концепции MapReduce). Кроме того, Hive не понимала SQL. Система использовала похожий, но не совпадающий язык запросов.

Создатели Presto пришли к выводу, что отказ от MapReduce значительно ускорит обработку запросов. И, судя по всему, не зря: их разработка на порядок превосходит Hive по эффективности загрузки процессора и времени задержки.

В посте Мартина Траверсо, участвовавшего в работе над Presto, кратко обрисовывается архитектура Presto:

«Клиент отправляет SQL координатору Presto. Координатор разбирает запрос, анализирует его, а затем планирует исполнение запроса. Диспетчер соединяет конвейер исполнения, даёт поручения узлам, которые расположены ближе всего к данным, и следит за продвижением обработки. Клиент извлекает данные из внешней ступени, которая, в свою очередь, заимствует их с ещё более низких уровней».

На схеме этапы этого пути показаны в виде зелёных прямоугольников. Parser производит разбор, planner планирует, а scheduler — делит работу между серверами.

1467246_10151935581722200_1107575290_n

Presto реализована на Java. Более того, система способна компилировать в байт-код Java даже сами запросы SQL, причём делать это так, чтобы по возможности избежать проблем с выделением памяти и сборкой мусора. На этом превращения запроса на заканчиваются: виртуальная машина, исполняющая байт-код, «на лету» компилирует его в машинный код. В результате он выполняется ещё быстрее.

Разработка Presto началась около года назад. В начале 2013 года первые версии этой системы стали внедрять в Facebook. Весной соцсеть начала полномасштабный переход на Presto. Теперь она работает на нескольких гигантских кластерах (количество узлов в одном из них может достигать тысячи), ежедневно исполняя более 30 тысяч запросов к петабайту информации.

Исходные коды Presto опубликованы на сервисе Github: вот её репозиторий. Как в случае Hive, для новой системы в Facebook выбрали свободную лицензию Apache.