Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

Архитектура Greengage DB

Павел Семёнов

Greengage DB (на основе Greenplum) — это распределенная система управления базами данных с открытым исходным кодом. Она предназначена для построения хранилищ данных и аналитических платформ, работающих с большими объемами данных — обычно от десятков до сотен терабайт. Массивно-параллельная архитектура (MPP) позволяет Greengage DB выполнять аналитические задачи (OLAP) параллельно на нескольких узлах. Эта архитектура хорошо подходит для сложных запросов над большими таблицами, включающих соединения, агрегирование и другие ресурсоемкие операции.

Greengage DB использует PostgreSQL в качестве базового движка хранения и выполнения на каждом сегменте кластера. Благодаря этому она наследует форматы данных PostgreSQL, SQL-семантику и совместимость с экосистемой, что позволяет стандартным BI-, отчетным и ETL-инструментам взаимодействовать с системой привычным образом.

Массивно-параллельная архитектура

Greengage DB использует массивно-параллельную архитектуру (Massively Parallel Processing, MPP), также известную как shared-nothing. В отличие от другой модели мультипроцессорных вычислений — симметричной многопроцессорной архитектуры (Symmetric Multiprocessing, SMP) — каждый узел в MPP-системе использует собственные ресурсы CPU, памяти и хранения. Вычислительные узлы не используют диски или память друг друга напрямую и координируются только через высокоскоростную сеть (интерконнект).

Модели мультипроцессорных вычислений MPP и SMP

Характеристика MPP (массивно-параллельная архитектура) SMP (симметричная многопроцессорная архитектура)

Ресурсная модель

Shared-nothing: независимые CPU, память и хранение

Несколько CPU, работающих с общей памятью и общим хранилищем

Масштабирование

Горизонтальное: добавление новых узлов

Вертикальное: увеличение ресурсов (CPU/RAM) одного сервера

Параллелизм запросов

Параллельное выполнение на всех узлах, каждый обрабатывает локальные данные

Ограничен ресурсами одной машины

Сценарии использования

OLAP: BI, аналитика, хранилища данных, сложные запросы над большими наборами данных

OLTP, смешанные нагрузки, малые и средние объемы данных

Отказоустойчивость

Сбой выводит из строя отдельные узлы

Сбой одного компонента может повлиять на всю систему

Стоимость оборудования

Серверы средней производительности; стоимость кластера растет линейно с количеством узлов

Для масштабирования требуется дорогое оборудование

В архитектуре MPP каждый сегмент хранит часть набора данных и в основном выполняет локальные вычисления над своими данными. Запросы выполняются параллельно на всех сегментах; при необходимости они обмениваются промежуточными результатами. При проектировании систем с учетом распределения данных и параллелизма вычислений MPP-подход дает значительные преимущества для аналитической обработки.

К ключевым преимуществам MPP относятся:

  • Горизонтальная масштабируемость, близкая к линейной

    Объем хранилища и вычислительная мощность увеличиваются за счет добавления новых сегмент-хостов одинаковой конфигурации. Во многих случаях это обеспечивает почти линейный прирост производительности с ростом размера кластера.

  • Устойчивость к сбоям и их изоляция

    Если сегмент или целый хост выходит из строя, это не останавливает кластер. Доступность данных обеспечивается зеркалированием: зеркала вышедших из строя сегментов берут на себя их нагрузку, распределяя ее между рабочими узлами.

  • Экономичность

    MPP-архитектура позволяет строить системы большого объема и вычислительной мощности на основе относительно недорогого стандартного оборудования. Кластеры масштабируются добавлением стандартных серверов, что часто более выгодно, чем покупка дорогого оборудования для масштабирования SMP-систем.

Компоненты

На диаграмме ниже показана высокоуровневая архитектура Greengage DB. Она включает следующие ключевые компоненты:

Архитектура Greengage DB

Мастер

Мастер (master) — это единая точка доступа ко всем базам данных кластера Greengage DB. Он является единственной точкой подключения клиентов: все запросы, управление объектами базы данных и административные операции выполняются через мастер.

Мастер представляет собой экземпляр PostgreSQL, который хранит метаданные кластера Greengage DB, включая системные каталоги и встроенные административные схемы. Эти метаданные описывают конфигурацию кластера, структуру и свойства пользовательских объектов. Когда пользователь создает таблицу, мастер фиксирует информацию о ней: структуру данных, права доступа, распределение, схему партиционирования и другие атрибуты. Сами данные хранятся на сегментах.

Мастер выполняет следующие основные функции:

  • Аутентификация клиентов

    Доступ к данным контролируется механизмами аутентификации PostgreSQL на основе ролей и привилегий. Правила аутентификации хранятся в конфигурационных файлах мастера (например, pg_hba.conf), а метаданные авторизации — в таблицах системного каталога.

  • Разбор и планирование запросов

    Мастер принимает все клиентские SQL-запросы, выполняет их разбор и строит планы выполнения, используя метаданные о конфигурации кластера и распределении данных. Оптимизация выполняется встроенными планировщиками: стандартным PostgreSQL-планировщиком или GPORCA — оптимизатором на основе стоимостной модели, разработанным для MPP-архитектуры Greengage DB.

  • Координация выполнения запросов и агрегация результатов

    После планирования выполнения запроса мастер отправляет части плана на соответствующие сегменты. Каждый сегмент обрабатывает свою часть данных с помощью собственного исполнителя запросов и возвращает промежуточные или итоговые результаты мастеру. Мастер координирует выполнение, отслеживает прогресс и собирает итоговый набор результатов для возврата клиенту.

  • Административные операции

    Операции управления кластером, такие как создание баз данных, изменение модели данных, обслуживание или изменение конфигурации, выполняются на мастере. Мастер автоматически распространяет такие изменения на сегменты, обеспечивая согласованность системы.

Резервный мастер

Резервный мастер (standby master) — это запасной узел, который может заменить основной мастер в случае сбоя. Этот компонент является опциональным, но настоятельно рекомендуется для production-кластеров во избежание простоя при отказе мастера. Для отказоустойчивости резервный мастер должен работать на отдельном хосте, чтобы один аппаратный сбой не затронул оба экземпляра.

Когда в кластере есть резервный мастер, Greengage DB непрерывно синхронизирует его с основным мастером с помощью репликации журнала предзаписи (Write-Ahead Log, WAL). Реплицируется только каталог данных мастера; сегменты в процессе не участвуют. Таким образом, резервный мастер хранит актуальную копию системного каталога и состояния метаданных мастера.

Переключение на резервный мастер при сбое выполняется вручную администратором в соответствии с регламентами восстановления. После активации резервный мастер применяет операции, записанные в WAL, восстанавливает состояние системного каталога и принимает роль основного мастера. Подробнее о переключении мастера см. Восстановление мастера после сбоев.

Сегменты

Сегменты (segment) хранят пользовательские данные в кластере Greengage DB. Каждый сегмент — независимый экземпляр PostgreSQL, который хранит часть данных каждой таблицы и участвует в выполнении запросов. Сегменты взаимодействуют с мастером и друг с другом, когда выполнение запроса требует перераспределения данных или межсегментных операций.

Сегменты работают на сегментных хостах кластера. На одном сегментном хосте могут работать несколько сегментов, обычно от 2 до 8 в зависимости от аппаратных ресурсов и операционных требований.

Распределение данных между сегментами — один из ключевых факторов, влияющих на производительность и масштабируемость кластера.

Сегменты бывают двух типов:

  • Основные сегменты (primary segment) хранят пользовательские данные в обычном режиме.

  • Зеркальные сегменты (mirror segment) поддерживают синхронизированную копию данных соответствующего основного сегмента.

Если основной сегмент выходит из строя, его зеркало автоматически принимает на себя нагрузку, обеспечивая доступность данных. Подробнее см. Проверка и восстановление сегментов.

Зеркальные сегменты работают на сегмент-хостах кластера и располагаются на разных хостах с соответствующими основными сегментами. В этом случае один аппаратный сбой одного хоста не выведет их из строя одновременно. Точное расположение зеркал на сегмент-хостах определяется используемой в кластере политикой зеркалирования: group или spread. При включенном зеркалировании каждый сегмент данных хранится на двух разных хостах. Следовательно, кластер должен включать четное число сегмент-хостов для сбалансированной загрузки.

Когда мастер получает SQL-запрос от клиента, он формирует распределенный план выполнения, используя метаданные о распределении данных. Затем он передает части плана сегментам. Каждый сегмент выполняет назначенные шаги с помощью собственного процесса-исполнителя запросов (Query Executor, QE). Некоторые операции могут требовать обмена данными между сегментами. Такой обмен выполняется с помощью операции перемещения данных (motion). После выполнения сегменты возвращают промежуточные или финальные результаты мастеру.

Производительность кластера определяется параллельным выполнением на сегментах. Система работает лучше всего, когда:

  • данные равномерно распределены между сегментами;

  • все сегмент-хосты имеют одинаковое оборудование и конфигурацию.

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

Интерконнект

Интерконнект (interconnect) — это сетевой слой, обеспечивающий обмен данными между сегментами во время выполнения запросов. Он используется для операций, таких как перераспределение, широковещательная передача (broadcasting) и объединение промежуточных результатов.

Для поддержки распределенного выполнения необходима сеть с высокой пропускной способностью и низкой задержкой. Рекомендуется использовать сеть минимум 10 Гбит/с; для нагрузок с интенсивным обменом данными рекомендуются сети 25 или 100 Гбит/с.

По умолчанию интерконнект использует UDP с реализацией механизмов надежности и управления передачей данных на уровне СУБД. Система также может работать через TCP или использовать прокси для уменьшения числа прямых подключений между узлами.

Хранение на основе PostgreSQL

СУБД Greengage DB 6 основана на PostgreSQL 9.4: и мастер, и сегменты представляют собой работающие процессы PostgreSQL. Каждый процесс имеет собственное хранилище, буферный кеш, WAL и системный каталог. При этом внутреннее устройство используемых экземпляров PostgreSQL изменено и расширено так, что из набора независимых экземпляров формируется единая распределенная MPP-система. К таким модификациям относятся механизм координации кластера, реализованный на мастере (планировщик и диспетчер запросов, менеджер распределенных транзакций), а также модель распределения данных между сегментами.

Хотя СУБД Greengage DB расширяет функциональность PostgreSQL для параллельной работы в распределенной системе, она сохраняет основной формат хранилища PostgreSQL, модель MVCC и реляционную семантику. В этом разделе описаны основные компоненты PostgreSQL, которые Greengage DB использует для хранения и обработки данных.

Дисковое хранение

Каждый экземпляр — мастер и сегменты — хранит свои данные локально, используя файловую структуру PostgreSQL. Это включает:

  • каталог base с файлами баз данных и таблиц;

  • журналы предзаписи (pg_wal);

  • таблицы системного каталога;

  • табличные пространства;

  • временные и spill-файлы (создаются при выполнении запросов);

  • конфигурационные файлы, такие как postgresql.conf и pg_hba.conf.

Модель shared-nothing подразумевает, что сегменты не используют общие диски или другие хранилища. Все операции ввода-вывода — сканирование таблиц, поиск по индексам, запись WAL и другие — выполняются локально на каждом сегмент-хосте. Такая изоляция обеспечивает горизонтальное масштабирование, но требует аккуратного распределения данных, чтобы избежать дисбаланса хранилища.

Реляционная модель данных

Greengage DB использует такую же реляционную модель данных, что и PostgreSQL, с иерархией объектов: база данных, схема, таблица и столбец. В этой иерархии базы данных, схемы и столбцы не отличаются от модели данных PostgreSQL. На уровне таблиц Greengage DB расширяет модель данных для поддержки распределенного хранения и параллельного выполнения запросов:

  • Типы хранения

    Помимо таблиц с типом хранения heap, как в PostgreSQL, Greengage DB поддерживает оптимизированные для добавления (Append-Optimized, AO) таблицы. AO-таблицы оптимизированы для массового чтения и аналитических нагрузок: они обеспечивают более быстрое последовательное чтение и эффективную массовую загрузку данных.

  • Ориентация данных

    Для AO-таблиц доступны две ориентации: строковая (как в традиционных реляционных СУБД) и колоночная. Колоночная ориентация обеспечивает лучшую производительность запросов, которые обращаются только к части столбцов.

  • Распределение данных

    Каждая таблица имеет политику распределения, определяющую, как ее строки распределяются по сегментам. Правильный выбор политики распределения минимизирует перемещение данных (motion) при соединениях и агрегации. Доступны следующие политики:

    • хеш-распределение по одному или нескольким столбцам

    • случайное распределение

    • реплицированное распределение

  • Партиционирование

    Таблицы могут быть горизонтально партиционированы, то есть разделены на отдельные логические таблицы меньшего объема. Это позволяет системе отбрасывать ненужные партиции при выполнении запросов и обеспечивает более эффективное хранение. Партиционирование может использоваться вместе с распределением: каждая партиция независимо распределяется по сегментам.

    Распределение и партиционирование вместе определяют, как реляционные таблицы физически размещаются на сегментах кластера.

Поддержка SQL

Greengage DB поддерживает синтаксис SQL, совместимый с PostgreSQL. Поддерживаются стандартные конструкции DDL, DML и запросов, включая:

Некоторые функции реализованы иначе для поддержки распределенного хранения. Например, последовательные сканирования выполняются параллельно на всех сегментах, а часть операций требует перераспределения данных через интерконнект. Тем не менее в большинстве случаев пользователи могут писать запросы так же, как в PostgreSQL.

Администрирование и обслуживание

Многие административные функции PostgreSQL доступны в Greengage DB. Однако они модифицированы таким образом, чтобы выполняться на всех экземплярах кластера согласованно. Примеры:

  • Конфигурация через GUC

    Greengage DB использует механизм PostgreSQL GUC для конфигурации кластера. Система автоматически обеспечивает согласованность GUC-параметров на экземплярах кластера, за исключением некоторых параметров, которые могут отличаться на мастере.

  • Контроль доступа на основе ролей

    Мастер управляет ролями и привилегиями, используя стандартные каталоги PostgreSQL, такие как pg_authid. Сегменты получают информацию для контроля доступа от мастера при диспетчеризации запросов.

  • Сбор статистики

    Статистика данных в таблицах и отдельных столбцах собирается с помощью ANALYZE, аналогично PostgreSQL, но с расширениями для распределенного хранилища.

  • Вакуумирование

    Greengage DB освобождает дисковое пространство, занятое устаревшими строками (логически удаленными), с помощью VACUUM или vacuumdb, как в PostgreSQL. АО-таблицы используют иную модель видимости строк, в которой метаданные видимости отслеживаются специфическим для Greengage DB образом.

  • Очистка временных и spill-файлов

    Сегменты создают временные и spill-файлы при выполнении больших запросов. Их очистка использует механизмы PostgreSQL, управляемые централизованно с мастера.

ETL

СУБД Greengage DB предоставляет ряд механизмов для интеграции с внешними системами, что позволяет использовать ее в пайплайнах Extract–Transform–Load (ETL). ETL-пайплайны — распространенный шаг в процессах работы хранилищ данных. Они используются, например, для загрузки больших объемов данных из внешних источников в хранилище. Greengage DB включает компоненты, предназначенные для высокопроизводительной и масштабируемой загрузки данных в рамках ETL.

Ключевым компонентом является gpfdist — легковесный сервер распространения файлов, используемый вместе с внешними таблицами. Внешние таблицы позволяют Greengage DB читать и записывать данные без хранения в базах данных на сегментах. Они поддерживают распространенные форматы данных, такие как CSV или текст, а также пользовательские форматы через определяемые пользователем трансформации. При использовании gpfdist данные передаются напрямую с ETL-хоста на сегмент-хосты, без передачи через мастер. Загрузка выполняется параллельно: каждый сегмент читает свою часть потока.

Загрузка данных в Greengage DB с помощью gpfdist

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

Greengage DB также включает утилиту gpload, которая позволяет управлять процессами загрузки данных через gpfdist на более высоком уровне, например:

  • создавать таблицы для загружаемых данных;

  • выполнять трансформацию данных при загрузке;

  • удалять артефакты после загрузки.

ETL-пайплайны, использующие gpfdist и gpload, могут интегрироваться с такими системами, как Apache Airflow, Apache NiFi, а также дополняться пользовательскими скриптами.