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.

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:
- 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.
- 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.
- 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).
-