Arquitetura do Azure Synapse SQL

Este artigo descreve os componentes de arquitetura do Synapse SQL. Também explica como Azure Synapse SQL combina capacidades de processamento de consultas distribuídas com o Armazenamento do Azure para alcançar um elevado desempenho e escalabilidade.

Componentes de arquitetura do Synapse SQL

O Synapse SQL utiliza uma arquitetura de escalamento horizontal para distribuir o processamento computacional de dados por vários nós. A computação é separada do armazenamento, o que lhe permite dimensionar a computação independentemente dos dados no seu sistema.

Para o conjunto de SQL dedicado, a unidade de dimensionamento é uma abstração do poder de computação conhecido como uma unidade do armazém de dados.

Para o conjunto de SQL sem servidor, sendo sem servidor, o dimensionamento é feito automaticamente para acomodar os requisitos de recursos de consulta. À medida que a topologia muda ao longo do tempo ao adicionar, remover nós ou ativações pós-falha, adapta-se às alterações e garante que a consulta tem recursos suficientes e é concluída com êxito. Por exemplo, a imagem seguinte mostra o conjunto de SQL sem servidor com quatro nós de computação para executar uma consulta.

Captura de ecrã da arquitetura do Synapse SQL.

O Synapse SQL utiliza uma arquitetura baseada em nós. As aplicações ligam e emitem comandos T-SQL para um nó de Controlo, que é o ponto único de entrada do Synapse SQL.

O nó Azure Synapse Controlo de SQL utiliza um motor de consulta distribuído para otimizar as consultas para processamento paralelo e, em seguida, transmite operações aos nós de Computação para fazerem o seu trabalho em paralelo.

O nó de Controlo do conjunto de SQL sem servidor utiliza o motor de Processamento de Consultas Distribuídas (DQP) para otimizar e orquestrar a execução distribuída da consulta do utilizador ao dividi-la em consultas mais pequenas que serão executadas em nós de Computação. Cada consulta pequena é denominada tarefa e representa a unidade de execução distribuída. Lê os ficheiros do armazenamento, associa os resultados de outras tarefas, grupos ou encomendas de dados obtidos a partir de outras tarefas.

Os nós de computação armazenam todos os dados de utilizador no Armazenamento do Microsoft Azure e executam as consultas paralelas. O Serviço de Movimento de Dados (DMS – Data Movement Service) é um serviço interno ao nível do sistema que move os dados em todos os nós, conforme necessário, para executar consultas em paralelo e devolver resultados precisos.

Com o armazenamento e a computação desacoplados, ao utilizar o Synapse SQL, pode beneficiar do dimensionamento independente do poder de computação, independentemente das suas necessidades de armazenamento. Para o dimensionamento do conjunto de SQL sem servidor é feito automaticamente, enquanto para o conjunto de SQL dedicado, pode-se:

  • Aumente ou reduza o poder de computação num conjunto de SQL dedicado, sem mover dados.
  • Colocar a capacidade de computação em pausa, mantendo os dados intactos, pelo que só paga pelo armazenamento.
  • Retomar a capacidade de computação durante as horas de funcionamento.

Armazenamento do Azure

O Synapse SQL utiliza o Armazenamento do Azure para manter os seus dados de utilizador seguros. Uma vez que os seus dados são armazenados e geridos pelo Armazenamento do Azure, existe um custo separado para o consumo de armazenamento.

O conjunto de SQL sem servidor permite-lhe consultar os seus ficheiros do Data Lake, enquanto o conjunto de SQL dedicado permite-lhe consultar e ingerir dados a partir dos seus ficheiros do data lake. Quando os dados são ingeridos no conjunto de SQL dedicado, os dados são fragmentados em distribuições para otimizar o desempenho do sistema. Pode escolher o padrão de fragmentação que será utilizado para distribuir os dados, ao definir a tabela. Estes padrões de fragmentação são suportados:

  • Hash
  • Round Robin
  • Replicar

Nó de controlo

O nó de Controlo é o cérebro da arquitetura. É o front-end que interage com todas as ligações e aplicações.

No Synapse SQL, o motor de consulta distribuído é executado no nó Controlo para otimizar e coordenar consultas paralelas. Quando submete uma consulta T-SQL para o conjunto de SQL dedicado, o nó Controlo transforma-a em consultas que são executadas em cada distribuição em paralelo.

No conjunto de SQL sem servidor, o motor DQP é executado no nó Controlo para otimizar e coordenar a execução distribuída da consulta do utilizador ao dividi-la em consultas mais pequenas que serão executadas em nós de Computação. Também atribui conjuntos de ficheiros a processar por cada nó.

Nós de computação

Os nós de computação conferem poder de computação.

No conjunto de SQL dedicado, as distribuições mapeiam para Nós de computação para processamento. À medida que paga mais recursos de computação, o conjunto remapa as distribuições para os nós de Computação disponíveis. O número de nós de computação varia entre 1 e 60 e é determinado pelo nível de serviço do conjunto de SQL dedicado. Cada nó de Computação tem um ID de nó que está visível nas vistas do sistema. Pode ver o ID do nó de Computação ao procurar a coluna node_id nas vistas do sistema cujos nomes começam com sys.pdw_nodes. Para obter uma lista destas vistas de sistema, veja Vistas do sistema SQL do Synapse.

No conjunto de SQL sem servidor, é atribuída a cada nó de Computação uma tarefa e um conjunto de ficheiros para executar a tarefa. A tarefa é uma unidade de execução de consulta distribuída, que na verdade faz parte do utilizador de consulta submetido. O dimensionamento automático está em vigor para garantir que são utilizados nós de Computação suficientes para executar a consulta do utilizador.

Serviço de Movimento de Dados

O Serviço de Movimento de Dados (DMS) é a tecnologia de transporte de dados no conjunto de SQL dedicado que coordena o movimento de dados entre os nós de Computação. Algumas consultas requerem movimento de dados para garantir que as consultas paralelas devolvem resultados precisos. Quando o movimento de dados é necessário, o DMS garante que os dados certos acedem à localização certa.

Distribuições

Uma distribuição é a unidade básica de armazenamento e processamento de consultas paralelas que são executadas em dados distribuídos no conjunto de SQL dedicado. Quando o conjunto de SQL dedicado executa uma consulta, o trabalho é dividido em 60 consultas mais pequenas que são executadas em paralelo.

Cada uma das 60 consultas mais pequenas é executada numa das distribuições de dados. Cada nó de Computação gere uma ou mais das 60 distribuições. Um conjunto de SQL dedicado com o máximo de recursos de computação tem uma distribuição por nó de Computação. Um conjunto de SQL dedicado com recursos de computação mínimos tem todas as distribuições num nó de computação.

Tabelas distribuídas por hash

Uma tabela distribuída por hash pode proporcionar o mais elevado desempenho a nível de consultas para associações e agregações em tabelas de grandes dimensões.

Para realizar a extensão de dados numa tabela distribuída por hash, o conjunto de SQL dedicado utiliza a função de hash para atribuir de forma determinista cada fila a uma distribuição. Na definição da tabela, uma das colunas será a coluna de distribuição. A função hash utiliza os valores na coluna de distribuição para atribuir cada linha a uma distribuição.

O diagrama seguinte ilustra como uma tabela não distribuída completa é armazenada como uma tabela distribuída por hash.

Captura de ecrã de uma tabela armazenada como uma distribuição hash.

  • Cada linha pertence a uma distribuição.
  • Um algoritmo hash determinista atribui cada linha a uma distribuição.
  • O número de linhas de tabela por distribuição varia conforme mostrado pelos diferentes tamanhos das tabelas.

Existem considerações de desempenho para a seleção de uma coluna de distribuição, como a distinção, a distorção de dados e os tipos de consultas que são executadas no sistema.

Tabelas distribuídas com round robin

Uma tabela round robin é a tabela mais simples para criar e oferece um desempenho rápido quando utilizada como uma tabela de teste para carregamentos.

As tabelas distribuídas com round robin distribuem uniformemente os dados por uma tabela, mas sem qualquer otimização adicional. Uma distribuição é escolhida aleatoriamente e, em seguida, as memórias intermédias de linhas são atribuídas a distribuições sequencialmente. É rápido carregar dados para uma tabela round robin, mas o desempenho das consultas pode, muitas vezes, ser melhor com tabelas distribuídas por hash. As associações em tabelas round robin requerem a reativação de dados, o que demora mais tempo.

Tabelas replicadas

As tabelas replicadas proporcionam o desempenho de consulta mais rápido para tabelas pequenas.

Uma tabela replicada coloca em cache uma cópia completa da tabela em cada nó de computação. Assim, replicar uma tabela remove a necessidade de transferir dados entre nós de computação antes de uma associação ou agregação. Idealmente, as tabelas replicadas devem ser utilizadas com tabelas pequenas. É necessário armazenamento adicional e é incorrido um overhead adicional ao escrever dados, o que torna as tabelas grandes impraticáveis.

O diagrama abaixo mostra uma tabela replicada que é colocada em cache na primeira distribuição em cada nó de computação.

Captura de ecrã a mostrar a tabela replicada em cache na primeira distribuição em cada nó de computação.

Passos seguintes

Agora que sabe um pouco sobre o Synapse SQL, saiba como criar rapidamente um conjunto de SQL dedicado e carregar dados de exemplo. Em alternativa, comece a utilizar o conjunto de SQL sem servidor. Se não estiver familiarizado com o Azure, poderá considerar o glossário do Azure útil à medida que encontra uma nova terminologia.