Pular para o conteúdo principal

Pool de Conexões

O processo de abrir conexões numa base de dados envolve custos significativos em termos de recursos computacionais e tempo. Uma estratégia eficaz para atenuar esses custos é a utilização dum pool de conexões, que mantém um número de conexões abertas prontas a ser reutilizadas, reduzindo assim a sobrecarga associada à frequente abertura e fecho de conexões.

Figura 1 - Pool de Conexões
Figura 1 - Pool de Conexões

PgBouncer

O PgBouncer é o componente de gestão de conexões de base de dados do PostgreSYS, atuando como intermédio entre os clientes e a instância da base de dados PostgreSQL.

As suas principais características incluem:

  • Flexibilidade: No mesmo servidor, podemos ter pools de conexões para bases de dados de diferentes hosts.
  • Disponibilidade: Permite a modificação de configurações e atualizações sem interromper as conexões ativas dos clientes nos pools.
  • Otimização: Reduz a sobrecarga causada por conexões no servidor PostgreSQL, promovendo uma melhor utilização dos recursos disponíveis.
  • Facilidade de Uso: Configuração simples e eficiente.
  • Segurança: Suporta vários métodos de autenticação.
  • Desempenho: Ideal para ambientes com um elevado número de clientes simultâneos.

Reutilização de Conexões

O PgBouncer reutiliza conexões, otimizando a eficiência e desempenho do sistema. Existem três modos de reutilização de conexões:

  1. Sessão: A conexão é atribuída ao cliente durante toda a sessão. Ao desconectar, a conexão retorna para o pool. Este é o modo padrão.
  2. Transação: A conexão é utilizada apenas durante uma transação. Uma vez concluída, através dum COMMIT ou ROLLBACK, a conexão é devolvida ao pool.
  3. Instrução: A conexão é devolvida ao pool imediatamente após a execução dum comando SQL. Este modo não suporta transações com várias instruções.

Autenticação

O PgBouncer atua como intermédio entre as aplicações clientes e o servidor PostgreSQL, autenticando e gerindo as conexões. O processo de autenticação garante que apenas os clientes autorizados tenham acesso às bases de dados da instância.

Este componente suporta os mesmos mecanismos de autenticação suportados pelo PostgreSQL, incluindo a configuração de acesso baseado em host.

O processo de autenticação para um pedido de conexão a um pool do PgBouncer envolve as seguintes etapas:

  • Verificação dos Dados Fornecidos: Quando um cliente faz um pedido de conexão com o PgBouncer, o PgBouncer verifica se os dados fornecidos pelo cliente, incluindo o nome de usuário e, opcionalmente, a palavra-passe, são suficientes para autenticar o cliente.

  • Verificação no userslist.txt: O PgBouncer verifica o ficheiro de configuração userslist.txt (ou outro ficheiro definido na sua configuração), onde estão especificadas as tuplas de autenticação, que consistem no nome de usuário e palavras-passe correspondentes. O PgBouncer procura neste ficheiro pelo nome de usuário fornecido pelo cliente:

    • Se o nome de usuário for encontrado e a palavra-passe fornecida pelo cliente coincidir com a palavra-passe correspondente no ficheiro userslist.txt, a autenticação é bem-sucedida. Neste caso, nenhuma conexão adicional com o PostgreSQL é estabelecida, e o PgBouncer direciona o cliente para uma conexão existente no pool, se disponível.

    • Se o nome de usuário não for encontrado no ficheiro userslist.txt, o PgBouncer continua o processo de autenticação.

  • Autenticação de Passagem: Se o mecanismo de autenticação de passagem estiver configurado e o nome de usuário não for encontrado no ficheiro userslist.txt, o PgBouncer procura por uma consulta de autenticação definida na sua configuração. O PgBouncer então conecta-se ao servidor PostgreSQL como um usuário predefinido (cuja palavra-passe é especificada no ficheiro userslist.txt) e executa a consulta de autenticação para localizar e verificar a palavra-passe do usuário em relação à palavra-passe fornecida pelo cliente.

    • Se a consulta de autenticação for bem-sucedida e a palavra-passe corresponder, o PgBouncer autentica o cliente com sucesso.
  • Conexão ao Pool: Após a autenticação bem-sucedida, o PgBouncer verifica se existe uma conexão em cache no pool de conexões com a mesma combinação de nome de usuário e base de dados solicitados pelo cliente.

    • Se uma conexão correspondente for encontrada no cache, o PgBouncer recupera-a e atribui-a ao cliente, poupando recursos de criação de conexões.

    • Se não houver uma conexão correspondente disponível no cache, o PgBouncer cria uma nova conexão com o servidor PostgreSQL, desde que isso não ultrapasse os limites de conexões definidos nas configurações do PgBouncer (como o número máximo de conexões permitidas).