Компания Alibaba открыла код распределённой СУБД PolarDB, основанной на PostgreSQL
30 мая 2021 года
Alibaba, одна из крупнейших китайских IT-компаний, открыла исходные тексты распределённой СУБД PolarDB, основанной на PostgreSQL. PolarDB расширяет возможности PostgreSQL средствами для распределённого хранения данных с обеспечением целостности и поддержкой ACID-транзакций в контексте всей глобальной базы данных, разнесённой по разным узлам кластера. PolarDB также поддерживает распределённую обработку SQL-запросов, обеспечение отказоустойчивости и избыточное хранение данных для восполнения информации после выхода из строя одного или нескольких узлов. При необходимости расширения хранилища достаточно просто добавить в кластер новые узлы. Код открыт под лицензией Apache 2.0.
PolarDB состоит из двух составных частей - расширений и набора патчей к PostgreSQL. Патчи расширяют возможности ядра PostgreSQL, а расширения включают компоненты, реализованные отдельно от PostgreSQL, такие как механизм распределённого управления транзакциями, глобальные сервисы, обработчик распределённых SQL-запросов, дополнительные метаданные, инструменты для управления кластером, развёртывания кластера и упрощения переноса в него существующих систем.
Патчи добавляют в ядро PostgreSQL распределённый вариант механизма управления параллельным доступом к данным при помощи многоверсионности (MVCC, Multiversion concurrency control) для разных уровней изоляции. Большая часть функциональности PolarDB вынесена в расширения, что снижает зависимость от PostgreSQL и упрощает обновление и внедрение решений на базе PolarDB (упрощается переход на новые версии PostgreSQL и поддержание полной совместимости с PostgreSQL). Для управления кластером применяется инструментарий pgxc_ctl, основанный на аналогичной утилите от PostgreSQL-XC и PostgreSQL-XL(недоступная ссылка).
В кластере выделяется три базовых компонента: узлы БД (DN), менеджер кластера (CM) и сервис управления транзакциями (TM). Дополнительно может быть задейсвован прокси-балансировщик нагрузки. Каждый из компонентов является отдельным процессом и может быть запущен на разном сервере. Узлы БД обслуживают SQL-запросы от клиентов и одновременно выступают координаторами распределённого выполнения запросов с участием других узлов БД. Менеджер кластера отслеживает состояние каждого узла БД, хранит конфигурацию кластера и предоставляет инструменты для управления, резервного копирования, балансировки нагрузки, обновления, запуска и остановки узлов. Сервис управления транзакциями отвечает за поддержание общей целостности во всём кластере.
PolarDB базируется на архитектуре распределённых вычислений Shared-nothing, в соответствии с которой данные распределяются при хранении на разные узлы, без применения общего для всех узлов хранилища, и каждый узел отвечает за привязанную к нему порцию данных и выполняет связанные с данными запросы. Каждая таблица сегментируется на части (sharding) с применением хэширования по первичному ключу. Если запрос охватывает данные, размещённые на разных узлах, для обеспечения атомарности, согласованности, изолированности и надёжности (ACID) подключается механизм распределённого выполнения транзакций и координатор транзакций.
Для обеспечения отказоустойчивости каждый сегмент реплицируется как минимум на три узла. Для экономии ресурсов полные данные включают только две реплики, а одна ограничивается хранением лога отложенной записи (WAL). Один из двух узлов с полными репликами выбирается в качестве лидера и участвует в обработке запросов. Второй узел выступает запасным для рассматриваемого сегмента данных, а третий принимает участие в выборе лидирующего узла и может использоваться для восстановления информации в случае выхода из строя двух узлов с полными репликами. Репликация данных между узлами кластера организована с использованием алгоритма Paxos, обеспечивающего согласованное определение консенсуса в сети с потенциально ненадёжными узлами.
Отмечается, что полную функциональность СУБД PolarDB планируется раскрыть в течение трёх выпусков: В первой версии будет опубликованы средства репликации, обеспечения высокой доступности и управления кластером. Во втором выпуске будет реализована система распределённого выполнения транзакций, поддерживающая ACID на уровне разных узлов и распределённое выполнение SQL. В третьем выпуске появится плагин к PostgreSQL и средства для гибкого распределения данных по узлам, включая адаптивное размещение сегментов для достижения оптимальной производительности и возможность расширения кластера через добавление новых узлов.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.