Перейти к содержимому
Последнее обновление

Системная архитектура

В этом документе описана системная архитектура Apache Doris, включая основные компоненты и логику их взаимодействия в двух режимах развёртывания:

  • Архитектура с совмещением хранения и вычислений: классическая архитектура FE + BE, в которой хранение данных и вычисления объединены.
  • Архитектура с разделением хранения и вычислений: трёхуровневая архитектура с отдельными уровнями метаданных, вычислений и хранения.

Сценарии использования: выбор архитектуры, изучение её устройства и принципов эксплуатации.

Архитектура с совмещением хранения и вычислений​

Архитектура с совмещением хранения и вычислений представляет собой классический режим развёртывания Apache Doris. Она состоит из двух типов процессов: Frontend (FE) и Backend (BE).

Архитектура с совмещением хранения и вычислений

Основные компоненты​

Узел Frontend (FE)​

FE служит точкой входа в Apache Doris и отвечает за координацию и управление:

ОбязанностьОписание
Обработка пользовательских запросовСовместимость с протоколом MySQL и поддержка стандартного SQL
Разбор и планирование запросовЛексический анализ -> семантический анализ -> построение логического плана -> оптимизация CBO -> передача на выполнение
Управление метаданнымиСхемы баз данных и таблиц, распределение реплик, права пользователей, топология кластера и состояние загрузки данных
Управление узламиПроверка сигналов heartbeat, балансировка нагрузки, восстановление реплик, управление расширением и сокращением кластера

FE использует BDB JE в качестве движка хранения метаданных и поддерживает транзакции. Он не зависит от внешних компонентов, таких как ZooKeeper, что упрощает развёртывание и обслуживание.

Узел Backend (BE)​

BE отвечает за вычисления и хранение данных:

ВозможностьОписание
Колоночное хранениеДанные организованы по столбцам; кодирование и сжатие повышают эффективность I/O
Шардирование данных (Tablet)Данные разделяются по горизонтали; tablet является минимальной единицей планирования размещения реплик
Несколько репликПо умолчанию каждый tablet имеет 3 реплики, размещённые на разных узлах BE
Векторизованное выполнениеКолоночное размещение данных в памяти в сочетании с ускорением SIMD повышает производительность агрегаций по широким таблицам в 5–10 раз
Движок PipelineПараллельная работа на нескольких ядрах с ограничением числа потоков предотвращает их чрезмерное разрастание

Высокая доступность FE​

В производственных средах развёртывается несколько узлов FE. Они могут выполнять следующие роли:

РольОбязанностьУчаствует в выборах
MasterЧитает и записывает метаданные, синхронизирует их с узлами Follower и ObserverДа
FollowerЧитает метаданные и участвует в выборах при отказе MasterДа
ObserverЧитает метаданные, увеличивая только число одновременно обрабатываемых запросовНет

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

Особенности архитектуры​

  • Простота и удобство обслуживания: всего два типа процессов, FE и BE.
  • Высокая производительность: вычислительные узлы напрямую обращаются к локальному хранилищу, что снижает сетевые накладные расходы.
  • Высокая доступность: несколько реплик в сочетании с автоматической изоляцией сбоев.
  • Горизонтальное масштабирование: FE и BE поддерживают добавление узлов без остановки работы.

Архитектура с разделением хранения и вычислений​

Эта архитектура появилась в версии 3.0. Она полностью отделяет вычислительный уровень от уровня хранения, позволяя независимо и эластично масштабировать их.

Архитектура с разделением хранения и вычислений

Основные компоненты​

В архитектуре с разделением хранения и вычислений узел FE сохраняется и по-прежнему принимает пользовательские запросы и выполняет их разбор. Для управления метаданными на уровне данных добавлен новый компонент Meta Service.

Узел FE Frontend​

Обязанности FE в архитектуре с разделением хранения и вычислений остаются прежними:

ОбязанностьОписание
Обработка пользовательских запросовСовместимость с протоколом MySQL, поддержка стандартного SQL, аутентификация и проверка прав доступа
Разбор и планирование запросовЛексический анализ -> семантический анализ -> логический план -> оптимизация CBO -> передача на выполнение
Метаданные уровня SQLСхемы баз данных и таблиц, права пользователей и топология кластера

Уровень метаданных (Meta Service)​

Сервис без состояния, поддерживающий горизонтальное масштабирование.

ОбязанностьОписание
Транзакции загрузки данныхУправление версиями и обнаружение конфликтов
Метаданные tabletВерсии данных и списки файлов
Метаданные rowsetИнформация об инкрементальных данных, используемая для восстановления и сборки мусора
Ресурсы кластераВыделение ресурсов и планирование для вычислительных групп

Вычислительный уровень​

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

ВозможностьОписание
Независимые ресурсыКаждый вычислительный кластер независимо обслуживает свою бизнес-нагрузку
BE без состоянияНе хранит данные постоянно, а только кэширует часто используемые данные
Эластичное масштабированиеДобавление или удаление узлов не влияет на другие вычислительные кластеры
Локальный кэшЧасто используемые данные кэшируются по политике LRU для снижения задержки доступа

Уровень общего хранилища​

Уровень хранения обеспечивает постоянное хранение всех файлов данных, включая файлы сегментов и инвертированных индексов.

Поддерживаемый типПримеры
Объектное хранилищеS3, OSS, COS, OBS, MinIO
Распределённая файловая системаHDFS
CephRGW, CephFS

Особенности архитектуры​

  • Эластичные вычисления: ресурсы масштабируются по потребности, что подходит для нагрузок с пиками и спадами.
  • Изоляция нагрузок: разные бизнес-команды используют общие данные, сохраняя независимость вычислительных ресурсов.
  • Низкая стоимость хранения: доступны недорогие варианты, такие как объектные хранилища.
  • Масштабирование за минуты: объём вычислительных ресурсов можно быстро изменить.

Сравнение и выбор​

Сравнение функций компонентов​

Обязанности компонентов в двух архитектурах различаются следующим образом:

Критерий сравненияСовмещение хранения и вычисленийРазделение хранения и вычислений
Узел FEСохраняется, хранит все метаданныеСохраняется, хранит только метаданные уровня SQL
Узел BEС состоянием (хранит данные)Без состояния (только кэширует часто используемые данные)
Расположение данныхЛокальный диск BEУровень общего хранилища; локальный диск BE используется как кэш
Особенности масштабированияХранение и вычисления масштабируются вместеВычисления и хранение могут масштабироваться независимо
Стоимость храненияВыше (SSD)Ниже (объектное хранилище)
Сложность эксплуатацииНижеВыше (зависит от внешнего хранилища)
Задержка запросовНиже (локальные операции I/O)Немного выше (при промахе кэша). При попадании в кэш задержка такая же, как в архитектуре с совмещением хранения и вычислений.

Рекомендации по выбору​

Выбирайте подходящую архитектуру исходя из своего сценария:

СценарийСовмещение хранения и вычисленийРазделение хранения и вычислений
Среды разработки и тестирования, быстрые эксперименты✓
Нет доступного общего хранилища (HDFS / Ceph / объектное хранилище)✓
Нет выделенного DBA, несколько команд самостоятельно занимаются обслуживанием✓
Не нужны эластичное масштабирование или контейнеризация в Kubernetes✓
Система уже развёрнута в публичном облаке✓
Доступна надёжная система общего хранения✓
Требуются контейнеризация в Kubernetes или эластичность частного облака✓
Несколько вычислительных кластеров должны использовать общие данные✓
Есть выделенная платформенная команда для обслуживания✓

Основные технические модули​

Движок хранения​

Колоночное хранение и сжатие

Данные организованы по столбцам, поэтому считываются только столбцы, участвующие в запросе, что сокращает объём I/O. В сочетании с такими алгоритмами, как словарное кодирование, сжатие битовых карт и RLE, это обеспечивает высокую степень сжатия.

Индексные структуры

Тип индексаСценарий использования
Сортированный составной ключ (до 3 столбцов)Отсечение данных при одновременном выполнении большого числа отчётных запросов
Min/MaxФильтрация по равенству и диапазону для числовых типов
BloomFilterФильтрация по равенству для столбцов с высокой кардинальностью
Инвертированный индексБыстрый и полнотекстовый поиск по произвольным полям

Модели данных

МодельОсобенностиСценарий использования
Модель DuplicateСохраняет детальные данныеХранение детальных данных таблиц фактов
Модель Primary KeyУникальный первичный ключ; строки с одинаковым первичным ключом перезаписываютсяОбновления на уровне строк
Модель AggregateСтроки с одинаковым первичным ключом автоматически агрегируютсяУскорение за счёт предварительной агрегации

Движок запросов​

Распределённые запросы MPP

Сложные запросы разбиваются на несколько этапов и обрабатываются параллельно на нескольких узлах BE. Поддерживаются распределённые соединения shuffle join для эффективного соединения больших таблиц.

Векторизованное выполнение

Колоночное размещение данных в памяти в сочетании с инструкциями SIMD повышает производительность агрегаций по широким таблицам в 5–10 раз.

Движок выполнения Pipeline

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

Оптимизатор запросов

ОптимизаторСтратегия
RBOСвёртка констант, переписывание подзапросов и проталкивание предикатов
CBOОценка стоимости и изменение порядка соединений
HBOИспользует историю запросов для ускорения повторных запросов

Runtime Filter

Фильтры динамически создаются во время выполнения и передаются узлам сканирования, чтобы сократить объём обрабатываемых данных. Поддерживаются типы In, Min/Max и BloomFilter.

Механизм высокой доступности​

Несколько реплик и кворумный протокол

  • По умолчанию хранятся 3 реплики.
  • Для успешной записи требуется подтверждение большинства реплик (например, 2 реплик).
  • Сбои части узлов не приводят к потере данных, и кластер остаётся доступным.

Автоматическая изоляция сбоев

  1. Обнаружение превышения времени ожидания heartbeat узла или повреждения реплики.
  2. Пометка узла как недоступного и прекращение отправки ему задач.
  3. Автоматическое восстановление недостающих реплик на основе исправных.
  4. Автоматическая синхронизация инкрементальных данных после восстановления.

Высокая доступность FE

Протокол консенсуса, подобный Paxos, обеспечивает согласованность метаданных. При отказе Master узлы Follower автоматически выбирают новый Master; этот процесс прозрачен для пользователя.


Часто задаваемые вопросы​

Вопрос: в чём основное различие между архитектурами с совмещением и разделением хранения и вычислений?​

В архитектуре с совмещением хранения и вычислений узлы BE отвечают и за хранение данных, и за вычисления, а данные хранятся на локальных дисках. В архитектуре с разделением хранения и вычислений данные находятся на уровне общего хранилища (например, S3 или HDFS), а узлы BE работают как вычислительные узлы без состояния, ускоряя запросы за счёт локального кэша. Архитектура с разделением поддерживает независимое эластичное масштабирование вычислительных ресурсов и ресурсов хранения.

Вопрос: когда следует выбирать архитектуру с разделением хранения и вычислений?​

Архитектура с разделением хранения и вычислений подходит для следующих сценариев: система уже развёрнута в публичном облаке, требуется контейнеризация в Kubernetes, доступна надёжная система общего хранения (HDFS, Ceph или объектное хранилище), нескольким вычислительным кластерам нужен доступ к общим данным, а обслуживанием занимается выделенная платформенная команда. Для простых сценариев, а также сред разработки и тестирования больше подходит архитектура с совмещением хранения и вычислений.

Вопрос: хранят ли узлы BE данные в архитектуре с разделением хранения и вычислений?​

В архитектуре с разделением хранения и вычислений узлы BE не имеют состояния и сами не обеспечивают постоянное хранение данных. Однако они используют локальный SSD для кэширования часто используемых данных с политикой вытеснения LRU. Это позволяет компенсировать задержки, вызванные относительно низкой производительностью случайного чтения из объектного хранилища и накладными расходами на передачу данных по сети.

Вопрос: какова роль FE в архитектуре с разделением хранения и вычислений?​

FE сохраняется в архитектуре с разделением хранения и вычислений и в основном отвечает за приём пользовательских запросов, разбор и планирование SQL, а также управление метаданными уровня SQL (схемами баз данных и таблиц, правами пользователей и топологией кластера). Управление метаданными на уровне данных (например, метаданными tablet и rowset) выполняет новый компонент Meta Service.

Вопрос: как реализована высокая доступность в Doris?​

Doris обеспечивает высокую доступность с помощью нескольких реплик и кворумного протокола: по умолчанию каждый tablet имеет 3 реплики, а запись требует подтверждения большинства. При отказе части узлов они автоматически изолируются, а реплики восстанавливаются на основе исправных. FE использует протокол консенсуса, подобный Paxos, для обеспечения согласованности метаданных; при отказе текущего Master автоматически выбирается новый Master.

Вопрос: какова роль Meta Service в архитектуре с разделением хранения и вычислений?​

Meta Service представляет собой сервис без состояния в архитектуре с разделением хранения и вычислений, предназначенный для управления метаданными на уровне данных. В его обязанности входят обработка транзакций загрузки данных (управление версиями и обнаружение конфликтов), управление метаданными tablet и rowset, а также выделение ресурсов и планирование для вычислительных кластеров. Отсутствие состояния позволяет ему масштабироваться горизонтально и увеличивать производительность обработки метаданных.


Итоги​

Apache Doris предлагает две архитектуры для разных потребностей:

АрхитектураСценарий использования
Совмещение хранения и вычисленийПриоритет производительности, ограниченные ресурсы на эксплуатацию и управляемый масштаб
Разделение хранения и вычисленийОблачная среда, эластичное масштабирование и общие данные для нескольких команд

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

На этой странице