Examinar os recursos distribuídos fornecidos pelo Citus

Concluído

Para fornecer uma plataforma de banco de dados que atenda aos requisitos do Woodgrove Bank, sua equipe decidiu migrar o servidor PostgreSQL local para um banco de dados distribuído com vários nós usando o Azure Cosmos DB para PostgreSQL. O Azure Cosmos DB para PostgreSQL, criado pela equipe do Citus Data, combina os benefícios do PostgreSQL, a extensão do Citus para PostgreSQL e um banco de dados como serviço totalmente gerenciado no Azure.

Para habilitar os recursos extras solicitados pelo Woodgrove Bank, você planeja usar várias das extensões do PostgreSQL suportadas pelo Azure Cosmos DB para PostgreSQL.

O que são extensões PostgreSQL?

No PostgreSQL, uma extensão é um pacote que agrupa vários objetos SQL relacionados. A extensão fornece novos tipos de dados, melhor monitoramento, wrappers de dados estrangeiros, recursos avançados de segurança e até mesmo novos idiomas para escrever procedimentos armazenados. O empacotamento de objetos relacionados dessa maneira pode simplificar significativamente o gerenciamento do banco de dados.

A principal vantagem de usar uma extensão, em vez de apenas executar um script SQL para carregar um monte de objetos "desacoplados" em seu banco de dados, é que o PostgreSQL entende que os objetos incluídos na extensão andam juntos. Os objetos SQL contidos no pacote de extensão podem ser carregados ou removidos do banco de dados com um único comando. Depois de serem carregadas no banco de dados, as extensões podem funcionar como recursos internos, permitindo que você use os recursos como a funcionalidade nativa do PostgreSQL.

Qual é Citus?

O Citus fornece os principais recursos de desempenho e escalabilidade do Azure Cosmos DB para PostgreSQL. Nesta unidade, você examinará a extensão e seus recursos para entender melhor como ela ajudará o Woodgrove Bank a atingir suas metas de desempenho e escalabilidade.

O Citus é uma extensão de código aberto para PostgreSQL que foi criada para permitir que os recursos de armazenamento e computação de dados sejam dimensionados em um cluster de servidores PostgreSQL. O Citus foi projetado para ainda fornecer a funcionalidade tradicional de banco de dados relacional, como transações, junções e chaves estrangeiras. A extensão Citus permite essa funcionalidade transformando o PostgreSQL em um banco de dados distribuído altamente escalável com recursos como um mecanismo SQL distribuído, fragmentação, tabelas de referência e tabelas distribuídas.

Diagram of an Azure Cosmos DB for PostgreSQL cluster, with multiple worker nodes and a single coordinator node.

O diagrama também apresenta setas à direita e à esquerda, mostrando como nós extras podem ser adicionados para dimensionamento.

Dimensionar a computação entre nós

O Citus estende a funcionalidade do PostgreSQL permitindo que vários servidores PostgreSQL, conhecidos como nós, sejam agrupados. Cada cluster consiste em um nó coordenador e vários nós de trabalho, permitindo que a computação e a memória sejam dimensionadas em vários servidores PostgreSQL na nuvem. Coletivamente, os clusters podem armazenar mais dados e usar mais núcleos de CPU do que um único servidor, fornecendo respostas mais rápidas em grandes conjuntos de dados, mesmo em várias regiões.

O aplicativo de pagamento sem contato do Woodgrove Bank requer a capacidade de adicionar facilmente recursos de computação para atender às demandas de suas pesadas cargas de trabalho de análise de usuários e atender seus clientes de forma eficiente. O Azure Cosmos DB para PostgreSQL permite que eles dimensionem seu banco de dados entre regiões para fornecer consultas de maior desempenho enquanto distribuem sua carga de trabalho de análise em vários nós, aproveitando mais núcleos de memória e CPU.

Distribuição de dados

A extensão Citus permite que os dados sejam distribuídos entre nós no cluster, permitindo que você crie tabelas distribuídas. As tabelas distribuídas melhoram o desempenho particionando horizontalmente as linhas da tabela entre nós de trabalho. Cada linha é atribuída a um grupo lógico chamado fragmento. Cada linha estará em precisamente um fragmento, e cada fragmento pode conter várias linhas. Ao distribuir dados entre nós, você pode aproveitar mais capacidade de armazenamento do que estaria disponível em um único servidor.

As tabelas de metadados localizadas no nó coordenador armazenam informações sobre quais fragmentos são armazenados em qual nó. O mapeamento de fragmentos para nós de trabalho é conhecido como colocação de fragmentos. O posicionamento de estilhaços permite operações de consulta de desempenho em relação a dados distribuídos no banco de dados. Essas tabelas de metadados rastreiam os nomes DNS e a integridade dos nós de trabalho, além da distribuição de dados entre nós. Durante a execução da consulta, o coordenador decide qual ação tomar fazendo referência a essas tabelas de metadados. O nó coordenador verifica as tabelas de metadados para determinar se os dados residem em um único nó ou em vários nós e, em seguida, encaminha as consultas para nós de trabalho conforme necessário.

O poder da execução de consultas paralelizadas

A combinação de paralelismo do Citus, mantendo mais dados na memória e maior largura de banda de E/S pode levar a melhorias significativas de desempenho para aplicativos SaaS multilocatário, painéis de análise em tempo real voltados para o cliente e cargas de trabalho de séries cronológicas.

A criação de tabelas distribuídas no banco de dados do Woodgrove Bank permite distribuir cargas de trabalho entre vários nós de trabalho, aplicando o Citus para aproveitar mais poder de computação. Os desenvolvedores de banco de dados do Woodgrove Bank não precisarão aprender novas maneiras de consultar dados, pois as tabelas distribuídas parecem ser tabelas regulares para instruções SQL. No entanto, as tabelas distribuídas são particionadas horizontalmente entre nós de trabalho e, armazenando linhas diferentes em trabalhadores diferentes, o nó coordenador pode paralelizar a execução da consulta.

O coordenador cria fragmentos de consulta direcionados a fragmentos específicos e, em seguida, envia esses fragmentos para o trabalhador apropriado para execução. Esses fragmentos de consulta são executados simultaneamente nos nós de trabalho, permitindo que o sistema paralelize a carga de trabalho uniformemente entre muitos servidores.

Animation of the flow of a query arriving from an application.

Na animação, a consulta é processada pelo nó coordenador usando tabelas de metadados e, em seguida, os fragmentos de consulta que estão sendo enviados para os nós de trabalho para execução. Os resultados da execução da consulta nos nós de trabalho são passados de volta ao coordenador, agregados e retornados ao aplicativo.