Компания Facebook открыла исходные коды Presto — новой распределённой системы управления базами данных, которая, с одной стороны, полностью поддерживает стандартный язык запросов SQL, а с другой — позволяет строить кластеры, состоящие из сотен узлов, и обрабатывать на них петабайты данных.
В дата-центрах Facebook хранится более 300 петабайт информации.Это уже не первая попытка Facebook совместить удобство реляционных СУБД и масштабируемость, свойственную MapReduce и NoSQL-решениям. Несколько лет назад инженеры компании разработали систему хранения данных Hive. В отличие от Presto, её основой служила платформа Hadoop (открытая реализация концепции MapReduce). Кроме того, Hive не понимала SQL. Система использовала похожий, но не совпадающий язык запросов.
Создатели Presto пришли к выводу, что отказ от MapReduce значительно ускорит обработку запросов. И, судя по всему, не зря: их разработка на порядок превосходит Hive по эффективности загрузки процессора и времени задержки.
В посте Мартина Траверсо, участвовавшего в работе над Presto, кратко обрисовывается архитектура Presto:
«Клиент отправляет SQL координатору Presto. Координатор разбирает запрос, анализирует его, а затем планирует исполнение запроса. Диспетчер соединяет конвейер исполнения, даёт поручения узлам, которые расположены ближе всего к данным, и следит за продвижением обработки. Клиент извлекает данные из внешней ступени, которая, в свою очередь, заимствует их с ещё более низких уровней».
На схеме этапы этого пути показаны в виде зелёных прямоугольников. Parser производит разбор, planner планирует, а scheduler — делит работу между серверами.
Presto реализована на Java. Более того, система способна компилировать в байт-код Java даже сами запросы SQL, причём делать это так, чтобы по возможности избежать проблем с выделением памяти и сборкой мусора. На этом превращения запроса на заканчиваются: виртуальная машина, исполняющая байт-код, «на лету» компилирует его в машинный код. В результате он выполняется ещё быстрее.
Разработка Presto началась около года назад. В начале 2013 года первые версии этой системы стали внедрять в Facebook. Весной соцсеть начала полномасштабный переход на Presto. Теперь она работает на нескольких гигантских кластерах (количество узлов в одном из них может достигать тысячи), ежедневно исполняя более 30 тысяч запросов к петабайту информации.
Исходные коды Presto опубликованы на сервисе Github: вот её репозиторий. Как в случае Hive, для новой системы в Facebook выбрали свободную лицензию Apache.