Архитектура Apache Doris: FE, BE и сервисы взаимодействия
Apache Doris проектируется как высокопроизводительная аналитическая база данных для больших объемов данных и интерактивной аналитики. Её архитектура строится вокруг разделения функций на Frontend (FE) и Backend (BE), а также через clearly определённые сервисы, которые координируют выполнение запросов, управление метаданными и загрузку данных. В этой главе рассматриваются ключевые принципы архитектуры Doris, роли FE и BE, протоколы взаимодействия между ними и критические аспекты построения устойчивых real-time витрин данных.
Краткое введение
Apache Doris реализует парадигму MPP-процессинга, где FE выполняет роль умного планировщика и менеджера метаданных, тогда как BE отвечает за хранение данных и исполнение вычислений на основе данных, разложенных по планшетам. Взаимодействие между FE и BE строится через распределённые RPC-сервисы, которые обеспечивают согласованность транзакций, нагрузочные процессы загрузки и контроль очередей задач. Эффективная архитектура Doris требует грамотной настройки кластера, понимания жизненного цикла запросов и чёткой координации данных между узлами. В дальнейшем мы рассмотрим архитектуру на концептуальном уровне и перейдём к механизмам реализации и настройкам.
- Обзор архитектуры Doris: FE, BE и межуточные сервисы.
- Роли FE и BE: обработка SQL, планирование, хранение и исполнение.
- Протоколы взаимодействия и механизмы консистентности.
- Инфраструктура кластера, безопасность и мониторинг.
Архитектура Doris: ключевые компоненты FE, BE и сервисы
Doris строится вокруг двух основных типов узлов: FE и BE, каждый из которых выполняет специализированные задачи. Frontend отвечает за часть, связанной с анализом и планированием запросов, метаданными, безопасностью и координацией задач. Backend обеспечивает хранение, репликацию и исполнение вычислительных операций над данными.
Главные принципы архитектуры включают модульность, изоляцию ответственности и высокую степень параллелизма между узлами. FE является точкой входа для клиентов и систем интеграции, выполняя синтаксический разбор SQL, валидирование запросов, построение логического плана и распределение задач между BE. BE содержит вычислительно-накопители и хранение данных: данные размещаются в планшетах (tablet) и организованы в сегменты Rowset-ов, которые FT-агрегируются и обрабатываются параллельно. Между FE и BE существуют определённые сервисы и протоколы, которые обеспечивают маршрутизацию, управление сессиями, транзакциями и потоками данных.
Для реализации архитектурной гибкости Doris использует несколько уровней взаимодействий:
- Клиентский уровень взаимодействия: клиентские приложения направляют SQL-коды FE.
- Уровень планирования: FE выполняет распознавание контекста запроса, анализирует доступность данных и формирует физический план исполнения.
- Координационный уровень: FE координирует работу над запросами и распределяет задачи по BE-узлам.
- Исполнительный уровень: BE выполняет сканирование данных, агрегацию и вычисления; результаты возвращаются FE для формирования итогового ответа.
На практике эти слои реализованы через набор сервисов и RPC-интерфейсов. Например, FE предоставляет сервисы Catalog, Analysis и Coordination, которые используются для регистрации объектов метаданных, анализа схемы и распределения задач. BE предоставляет сервисы Storage, Computation и DataNode, которые отвечают за физическое хранение, чтение и вычисления над данными. Взаимодействие между FE и BE может осуществляться через двунаправленные вызовы RPC: FE может отправлять задания на выполнение, собирать результаты и объединять их в единую ответную выборку.
Важно отметить, что архитектура Doris допускает горизонтальное масштабирование FE и BE независимо. В реальных кластерах FE может быть несколько инстансов для обработки большого потока запросов и обеспечения высокой доступности, тогда как BE-узлы масштабируются по объему данных и вычислительной мощности в зависимости от требований к хранению и скорости выполнения запросов.
Архитектурная структура файлов и модулей
FE содержит модули для:
- Парсинга и анализа SQL: синтаксический разбор, валидация прав доступа и контекст выполнения.
- Планирования и оптимизации: генерирование физического плана на основе статистик и доступности данных.
- Менеджмента метаданных: реестр баз данных, таблиц, схем, партиций и транзакций.
- Координации и очередей задач: механизм очередей загрузки, реорганизации и перераспределения нагрузки.
BE включает модули:
- Хранение данных: управление планшетами, репликациями, консистентностью и хранение наносителей (дисковое или флэш-хранилище).
- Выполнение вычислений: vectorized execution engine, эффективная обработка столбцов, агрегации, соединения и фильтрации.
- Сервисы загрузки и загрузочной очереди: обработка партий данных из внешних источников и трансформаций.
- Мониторинг и диагностика: сбор метрик нагрузки, ошибок и производительности.
Переходя к взаимодействию FE и BE, следует подчеркнуть, что взаимные протоколы обеспечивают эффективное использование ресурсов кластера, минимизируют задержки и поддерживают консистентность данных в распределённой среде.
Frontend (FE): роль, модули, взаимодействия
FE выполняет роль центрального контроллера кластера Doris. Он не только принимает запросы клиентов, но и управляет метаданными, безопасностью и координацией выполнения запросов. Ключевые функции FE включают:
- Сбор и верификация прав доступа: FE обеспечивает механизм безопасности, включая пользователей, роли и политики доступа к данным.
- Анализ и оптимизация запроса: FE строит план выполнения, который может включать распараллеливание, выбор стратегий агрегации и сортировку.
- Управление транзакциями и метаданными: FE регистрирует банки данных, таблиц, партиций и версий схем; управляет транзакциями на уровне каталога.
- Координация выполнения запросов: FE распределяет задачи по BE-узлам, осуществляет сбор результатов и формирует итоговую выборку.
Взаимодействие FE и BE реализуется через RPC-сервисную инфраструктуру. Клиент отправляет запрос в FE, FE парсит SQL, проверяет разрешения, затем формирует операционный план и делегирует фрагменты плана BE-узлам. FE возвращает клиенту частичные результаты по мере их формирования, а по завершении агрегации - окончательный ответ.
Логика работы FE требует учёта статистик данных и распределения нагрузки. Наличие актуальных статистик по таблицам и колонкам позволяет FE выбирать эффективные стратегии доступа к данным: например, выбрать последовательное сканирование или использование индексной структуры, если она поддерживается на данном уровне. FE также управляет оптимизацией запросов на уровне схем, включая выбор колонки, сжатие и формат хранения данных, чтобы ускорить сканирование в BE.
Взаимодействие FE и внешними системами
FE не ограничивается рамками внутреннего взаимодействия. Он может быть интегрирован с системами оркестрации и загрузки, например, с системами потоковой обработки данных для оповещения о новых данных или запуска загрузок. В контексте real-time витрин FE отвечает за организацию и согласование задач загрузки, координацию очередей и партиционирование данных. Взаимодействие с внешними системами требует согласования форматов метаданных и режимов инкрементной загрузки.
Backend (BE): хранение данных и выполнение запросов
Backend отвечает за физическое хранение данных и вычислительную часть выполнения запросов. Основные аспекты BE:
- Хранение и репликация: данные хранятся в планшетах; репликации обеспечивают отказоустойчивость и доступность. Распределённое хранение позволяет масштабировать объём данных и скорость чтения.
- Выполнение вычислений: BE использует vectorized execution engine, оптимизированный для аналитических нагрузок. Работа осуществляется по принципу конвейера: чтение данных, фильтрация, агрегации, сортировки, соединения и вычисления.
- Управление загрузкой: BE обрабатывает потоки загрузки данных из внешних источников, а также поддерживает режимы точной и поздней загрузки данных, транзакционную согласованность и откаты.
- Мониторинг и оптимизация: BE собирает метрики по задержкам, пропускной способности, загрузке CPU и дисков, что позволяет корректировать конфигурацию кластера.
Исполнение запроса в BE начинается после того, как FE сформирует физический план. План разбивается на фрагменты, которые отправляются на соответствующие BE-узлы. Каждый BE-узел выполняет свою часть плана, возвращает частичные результаты FE, который далее агрегирует их и возвращает клиенту. Важно, чтобы BE поддерживал согласованность данных и версий схем, особенно в сценариях обновления структур таблиц или схожих операциях.
Архитектура хранения и планшетов
Данные Doris хранятся в столбцовых форматах, что оптимизирует аналитические запросы с агрегациями и сканированиями больших объёмов. Таблицы разделяются на партиции и далее на планшеты. Каждый планшет может реплицироваться на нескольких BE-узлах. Репликация позволяет выдержать сбой узла без потери доступности. Внутри BE планшеты содержат сегменты данных и метаданные индексов, которые ускоряют доступ к нужным частям столбцов.
Разделение данных по планшетам снижает латентность запросов за счёт параллельной обработки. BE выполняет сквозной параллелизм на уровне планшетов и клеток вычислительных узлов, что обеспечивает масштабируемость при росте объема данных и сложности запросов.
Протоколы взаимодействия FE и BE
С точки зрения инженерной реализации критически важно понимать протоколы и форматы обмена между FE и BE. Doris использует набор RPC-сервисов, которые обеспечивают:
- Регистрация и каталог объектов: FE хранит схему и метаданные, BE обновляет локальные копии в рамках согласованных операций.
- Планирование и координация: FE раздаёт части физического плана BE-узлам и собирает результаты.
- Управление транзакциями: транзакции на уровне таблиц и партиций координируются FE и BE с гарантией согласованности.
- Мониторинг и диагностика: FE и BE обмениваются метриками и журналами событий для обнаружения аномалий и сбоя.
Коммуникация между компонентами оптимизирована для минимизации задержек: FE может отправлять запросы на сканирование и вычисления в BE параллельно нескольким узлам, а затем агрегировать результаты. В частности, важны следующие аспекты:
- Распределённость исполнения: каждый BE-узел обрабатывает часть данных независимо, что позволяет быстро масштабировать обработку.
- Протоколы согласованности: Doris использует версии схем и механизм координации транзакций, чтобы обеспечить корректность изменений в базах данных.
- Отказоустойчивость: при сбоях узлов FE повторно перераспределяет задачи, BE пересобирает данные после восстановления, чтобы сохранить целостность результатов.
Реализация протоколов предусматривает минимизацию сетевых задержек и эффективную сериализацию данных. Важным элементом является детальная статистика по данным, которая помогает FE строить эффективный план: например, выбор между сканированием по партициям или сканированием по столбцам внутри планшета.
Безопасность и доступ
FE и BE поддерживают механизмы аутентификации и авторизации. Доступ к данным ограничивается правами, привязанными к ролям пользователей. В контексте real-time витрин особое внимание уделяется безопасной загрузке данных и поддержке транзакционной согласованности без риска компрометации консистентности в момент высокой активности.
Инфраструктура и эксплуатация: конфигурация кластера, безопасность, мониторинг
Эффективная эксплуатация Doris требует аккуратной настройки кластера и мониторинга. Рекомендуемые практики включают:
- Разделение ролей: выделение FE и BE, настройка резервирования и отказоустойчивости. В крупных кластерах бывает несколько FE-узлов для каталога и планирования, и множество BE-узлов для хранения и вычислений.
- Архитектура сети: минимизация задержек между FE и BE, настройка сетевых квот и приоритетов для критических сервисов.
- Мониторинг: сбор метрик по времени выполнения, загрузке CPU, скорости дисковой I/O, задержках RPC, наличию сбоев и откатов. Мониторинг позволяет оперативно реагировать на проблемы, оптимизировать конфигурацию и поддерживать требуемые SLA.
- Безопасность: управление ролями и политиками доступа, шифрование сетевых соединений, аудит операций над данными.
Интеграции с внешними системами часто являются ключевыми для реального внедрения. Например, для real-time витрин данных Doris может работать совместно с системами потоковой обработки данных, такими как Kafka или Pulsar, для загрузки инкрементных данных. В одном из сценариев это может быть реализовано через компонент загрузки, который принимает поток и преобразует его в табличные данные в BE. В рамках одного проекта возможно использование одного или двух внешних источников, чтобы минимизировать сложность и обеспечить надёжность.
Производительность и оптимизация взаимодействия
Успешная работа архитектуры Doris зависит от того, как эффективно FE координирует BE. Ключевые факторы:
- Статистика данных: актуальные статистики по колонкам и таблицам позволяют FE выбирать оптимальные стратегии доступа к данным.
- Распределённость данных: правильное партиционирование и размещение планшетов по BE-узлам снижает задержки сканирования и балансирует нагрузку.
- Параллелизм и конвейеры: параллельная обработка на уровне планшетов и конвейерная обработка потоков данных ускоряют выполнение крупных запросов.
- Кэширование и сжатиие: на уровне BE применяются техники сжатия и кэширования, чтобы снизить требования к памяти и скорости дисков.
- Оптимизация загрузки: режимы загрузки и конвейеры, поддерживаемые BE, позволяют обеспечивать быстрый импорт новых данных без блокирования запросов.
Понимание этих аспектов позволяет архитекторам и инженерам по данным проектировать кластеры Doris под конкретные сценарии: объем данных, частоту обновлений, требования к задержкам и SLA. В реалиях real-time витрин критично обеспечить устойчивую загрузку при высокой частоте обновлений, избегая неожиданных задержек в пакете данных и в сами запросы.
Распределение данных, транзакции и консистентность
Изучение механик распределения данных и консистентности есть важный элемент архитектуры Doris. Таблицы разбиваются на партиции и планшеты. Репликация обеспечивает отказоустойчивость, но требует согласованной координации между FE и BE для поддержания согласованности. В сценариях высоких нагрузок важно, чтобы FE принимал решения по планированию так, чтобы BE работали в оптимальном распределении, минимизируя задержки и избегая конфликтов.
Tranzакционные механизмы Doris поддерживают атомарность операций на уровне таблиц и партиций; FE держит контроль версий схем, чтобы обновления не приводили к несогласованности на BE. В реальном времени это особенно важно для витрин: данные обновляются часто, но пользователи требуют мгновенного доступа к точной информации. Грамотная настройка уровня транзакций и согласованности помогает обеспечить баланс между скоростью загрузки и корректностью результатов.
Key takeaways
- Frontend (FE) выполняет синтаксический разбор, планирование и координацию запросов, управляет метаданными и безопасностью.
- Backend (BE) реализует хранение, репликацию и выполнение вычислений над данными в параллельном режиме.
- Взаимодействие FE и BE реализуется через RPC-сервисы с фокусом на планирование, координацию и выполнение запросов.
- Распределение данных по планшетам и партициям обеспечивает масштабируемость и высокую пропускную способность аналитических нагрузок.
- Консистентность и транзакции поддерживаются на уровне каталога FE и узлов BE, что критично для точности витрин данных.
- Мониторинг, безопасность и управление нагрузкой являются составной частью эксплуатации Doris.
- Интеграции с внешними системами загрузки данных (например, Kafka, Pulsar) позволяют строить real-time витрины и поддерживать актуальные данные.
FAQ
- Какой основной вклад FE в Doris и почему он не может быть вынесен на BE полностью?
FE выполняет роль центрального планировщика и менеджера метаданных: без него не было бы понятной схемы данных, согласованности транзакций и эффективного распределения задач по BE. BE отвечает за исполнение и хранение данных. Разделение ролей обеспечивает независимое масштабирование, устойчивость к сбоям и оптимизацию планирования: FE может фокусироваться на интеллектуальной части запроса, BE - на высокой пропускной способности хранения и вычислений.
- Какие проблемы возникают при масштабировании FE и BE и как их решать?
FE подвержен задержкам при большом количестве одновременных запросов, что может стать узким местом. Решение - горизонтальное масштабирование FE, разделение вычислительных и каталожных функций, внедрение дополнительных экземпляров FE и грамотное распределение пользователей и рабочих нагрузок. BE может сталкиваться с проблемами I/O и балансировкой нагрузки между узлами; практика указывает на правильное размещение планшетов, репликаций и мониторинг метрик для адаптивного масштабирования.
- Какие протоколы обеспечивают консистентность при параллельном выполнении запросов?
Doris применяет версии схем и транзакций на уровне каталога. FE руководит координацией и согласованностью изменений, BE поддерживает согласованное чтение и запись через механизмы репликации. В сценариях обновлений таблиц важно, чтобы FE и BE синхронизировали версии и не допускали схлопывания изменений между узлами.
- Какие типы загрузки данных поддерживает Doris и как они влияют на архитектуру?
Doris поддерживает загрузку через локальные файлы, потоковую загрузку и интеграции с внешними системами. Функциональные потоки загрузки могут быть встроены в BE, но FE остаётся ответственным за координацию и целью является поддержка консистентности. Реализация real-time витрин требует устойчивого потока данных и эффективной загрузки без задержки в доступе к данным.
- Какие сценарии безопасности важны для архитектуры Doris?
Важно обеспечить управление ролями и правами доступа, а также шифрование сетевых соединений и аудит операций над данными. В витринах real-time критично иметь безопасную загрузку и контроль доступа на уровне схем и таблиц, чтобы предотвратить несанкционированное использование данных.
- Как архитектура Doris поддерживает real-time витрины?
Real-time витрины требуют низких задержек и своевременной синхронизации данных между источником и витриной. Doris позволяет параллельно загружать данные и выполнять запросы на BE, FE координирует обновления схем и распределение нагрузки. Интеграции с потоковыми системами, такими как Kafka или Pulsar, позволяют двигать данные в BE почти в реальном времени.
- Какие практики мониторинга полезны в эксплуатации Doris?
Рекомендуются обзоры метрик задержек выполнения, пропускной способности, загрузки CPU и состояния репликаций. Мониторинг в реальном времени и сбор журналов ошибок помогают быстро обнаруживать узкие места и корректировать конфигурацию кластера.
- Какие ограничения следует учитывать при проектировании кластера Doris?
Необходимо балансировать мощность FE и BE в зависимости от рабочих нагрузок, предусмотреть резервирование и планы на случай сбоев, а также учитывать требования к задержкам и частоте обновлений витрин. Встроенная логика планирования и распределения задач требует точной настройки параметров кластера для обеспечения устойчивости.
- Какой подход к хранению данных оптимален в Doris?
Столбцовые форматы хранения, разделение на планшеты и партиционирование позволяют ускорить аналитические запросы и уменьшить объем данных, считываемых за один проход. Репликация обеспечивает отказоустойчивость и доступность.
- Какую роль играет статистика в планировании запросов?
Актуальная статистика по колонкам и таблицам улучшает качество планирования, позволяя FE выбирать эффективные стратегии сканирования и агрегаций. Регулярное обновление статистик в процессе изменений данных является необходимостью для поддержания производительности.



