Архитектура Azure Synapse Analytics
В этой статье описываются компоненты архитектуры Synapse SQL. В ней также объясняется, как Azure Synapse SQL объединяет возможности обработки распределенных запросов со службой хранилища Azure для достижения высокой производительности и масштабируемости.
Компоненты архитектуры Synapse SQL
Synapse SQL использует масштабируемую архитектуру для распределения вычислительной обработки данных между несколькими узлами. Вычислительные ресурсы отделены от ресурсов хранилища, что дает возможность масштабировать вычислительные ресурсы независимо от данных в системе.
В выделенном пуле SQL единица масштабирования представляет собой абстракцию вычислительной мощности, известную как единица использования хранилища данных.
В бессерверном пуле SQL, не зависящем от сервера, масштабирование выполняется автоматически в соответствии с требованиями к ресурсам в запросе. По мере того, как топология изменяется с течением времени из-за добавления, удаления узлов или отработки отказа, она адаптируется к этим изменениям и гарантирует, что запросу будет выделено достаточно ресурсов для успешного выполнения. Например, на следующем рисунке показан бессерверный пул SQL, использующий четыре вычислительных узла для выполнения запроса.
В Synapse SQL используется архитектура на основе узлов. Приложения подключаются к управляющему узлу и выполняют команды T-SQL. Этот узел представляет собой единую точку входа для Synapse SQL.
Управляющий узел Azure Synapse SQL использует подсистему распределенных запросов, которая оптимизирует запросы для параллельной обработки, а затем перенаправляет операции на вычислительные узлы, чтобы обеспечить параллельную работу.
Управляющий узел бессерверного пула SQL использует подсистему распределенной обработки запросов (DQP) для оптимизации и организации распределенного выполнения запросов пользователей, разбивая их на запросы меньшего размера, которые будут выполняться на вычислительных узлах. Каждый меньший запрос называется задачей и представляет единицу распределенного выполнения. Он считывает файлы из хранилища, объединяет результаты из других задач и группирует или упорядочивает данные, полученные из других задач.
Вычислительные узлы хранят все данные пользователей в службе хранилища Azure и выполняют параллельные запросы. Служба перемещения данных (DMS) представляет собой внутреннюю службу на уровне системы, которая перемещает данные между узлами, что необходимо для выполнения параллельных запросов и возвращения точных результатов.
Благодаря тому, что хранилище и вычислительные узлы не связаны, использование Synapse SQL может дать преимущества независимого объема вычислительной мощности от потребностей хранилища. Масштабирование бессерверного пула SQL выполняется автоматически, в то время как в выделенном пуле SQL возможно следующее:
- увеличение или уменьшение вычислительной мощности в выделенном пуле SQL без перемещения данных;
- приостановка вычислений без изменения данных (вы платите только за хранилище);
- возобновление вычислений во время рабочих часов.
Хранилище Azure
Synapse SQL использует службу хранилища Azure для защиты пользовательских данных. Так как ваши данные хранятся и управляются службой хранилища Azure, за использование хранилища взимается отдельная плата.
Бессерверный пул SQL позволяет отправлять запросы к файлам озера данных, тогда как выделенный пул SQL позволяет запрашивать и принимать данные из файлов озера данных. Когда данные принимаются в выделенный пул SQL, для оптимизации производительности системы они сегментируются по распределениям. При определении таблицы вы можете выбрать шаблон сегментирования, который будет использоваться для распределения данных. Поддерживаются следующие шаблоны сегментирования:
- Хэш
- Циклический перебор
- Репликация
Управляющий узел
Управляющий узел в этой архитектуре отвечает за все решения. Это внешний интерфейс, который взаимодействует со всеми приложениями и подключениями.
В Synapse SQL подсистема обработки распределенных запросов запускается на управляющем узле, чтобы оптимизировать и координировать параллельные запросы. При отправке запроса T-SQL в выделенный пул SQL управляющий узел преобразует его в запросы, которые будут выполняться на каждом вычислительном узле в параллельном режиме.
В бессерверном пуле SQL на управляющем узле выполняется подсистема DQP, которая оптимизирует и организовывает распределенное выполнение запросов пользователей, разбивая их на запросы меньшего размера, которые будут выполняться на вычислительных узлах. Она также назначает наборы файлов, которые будут обрабатываться каждым узлом.
Вычислительные узлы
Вычислительные узлы обеспечивают вычислительную мощность.
В выделенном пуле SQL распределения сопоставляются с вычислительными узлами для обработки. Когда вы оплачиваете использование дополнительных вычислительных ресурсов, пул повторно сопоставляет распределения с доступными вычислительными узлами. Число вычислительных узлов колеблется от 1 до 60 и определяется уровнем обслуживания выделенного пула SQL. У каждого вычислительного узла есть идентификатор узла, который видно в представлениях системы. Идентификатор вычислительного узла можно увидеть в столбце node_id в системных представлениях, имена которых начинаются с sys.pdw_nodes. Список системных представлений см. в системном представлении Synapse SQL.
В бессерверном пуле SQL по запросу каждому вычислительному узлу назначается задача и набор файлов для выполнения этой задачи. Задача — это единица распределенного выполнения запроса, которая фактически является частью отправленного пользователем запроса. Используется автомасштабирование, чтобы для выполнения запроса пользователя предоставлялось достаточное количество вычислительных узлов.
Служба перемещения данных
Служба перемещения данных (DMS) — это технология перемещения данных в выделенном пуле SQL, которая координирует перемещение данных между вычислительными узлами. Некоторым запросам требуется перемещение данных, чтобы параллельные запросы вернули точные результаты. При необходимости перемещения данных DMS гарантирует, что нужные данные окажутся в нужном расположении.
Дистрибутивы
Распределение представляет собой базовую единицу хранения и обработки параллельных запросов, выполняемых для распределенных данных в выделенном пуле SQL. При выполнении запроса в выделенном пуле SQL формируются 60 меньших запросов, которые выполняются параллельно.
Каждый из этих 60 небольших запросов выполняется в одном из распределений данных. Каждый вычислительный узел управляет одним или несколькими из 60 распределений. Выделенный пул SQL с максимальным количеством вычислительных ресурсов содержит одно распределение на каждом вычислительном узле. Выделенный пул SQL с минимальным количеством вычислительных ресурсов содержит все распределения на одном вычислительном узле.
Таблицы с хэш-распределением
С помощью распределенной хэш-таблицы можно обеспечить наибольшую производительность запроса для операций объединения и агрегирования для больших таблиц.
Чтобы сегментировать данные в распределенную хэш-таблицу, в выделенном пуле SQL используется хэш-функция для детерминированного назначения каждой строки отдельному распределению. В определении таблицы один из столбцов определяется как столбец распределения. Хэш-функция использует значения в столбце распределения для присвоения каждой строки распределению.
На следующей схеме показано, как полная (нераспределенная) таблица хранится в качестве хэш-распределенной.
- Каждая строка относится к одному распределению.
- Детерминированный хэш-алгоритм присваивает каждую строку одному распределению.
- Количество строк таблицы в распределении зависит от размеров таблиц (как показано на схеме).
Существуют влияющие на производительность факторы, которые учитываются при выборе столбца распределения. Например, определенность, неравномерное смещение данных и типы запросов, выполняемых в системе.
Таблицы с распределением методом циклического перебора
Таблица с распределением методом циклического перебора — это самая простая таблица для создания и обеспечения высокой производительности, если ее использовать как промежуточную таблицу для нагрузок.
В таблице с распределением методом циклического перебора данные распределяются равномерно, но без какой-либо последующей оптимизации. Распределение сначала выбирается случайным образом, а затем буферы строк назначаются распределениям последовательно. Быстро загрузить данные в таблицу с циклическим перебором, но производительность запросов часто может быть выше при использовании хэш-распределенных таблиц. Для объединения таблиц с циклическим перебором требуется перетасовка данных, что занимает дополнительное время.
Реплицированные таблицы
Реплицированная таблица обеспечивает наилучшую производительность запросов для небольших таблиц.
Полная копия реплицированной таблицы хранится на каждом вычислительном узле. Таким образом, репликация таблицы устраняет необходимость передавать данные между вычислительными узлами перед операциями соединения или агрегирования. Реплицированные таблицы лучше всего использовать для небольших таблиц. Требуется дополнительное хранилище, и при записи данных возникают дополнительные издержки, что делает большие таблицы непрактичными.
На следующей схеме представлена реплицированная таблица, которая кэшируется при первом распределении на каждом вычислительном узле.
Дальнейшие действия
Теперь, когда вы познакомились с Synapse SQL, узнайте о том, как быстро создать выделенный пул SQL и загрузить демонстрационные данные. Или приступайте к работе с бессерверным пулом SQL. Если вы еще не знакомы с Azure, глоссарий Azure может оказаться полезным при работе с новой терминологией.