Aplicativos modernos como microsserviços normalmente exigem muitas conexões de banco de dados, eles também usam e liberam essas conexões muito rapidamente. Quando o PostgreSQL foi desenvolvido há quase 25 anos, seus desenvolvedores decidiram não usar threads para novas solicitações, mas criar um novo processo para cada solicitação. Embora essa decisão provavelmente fizesse sentido naquela época, muitas conexões podem ser um problema sério hoje. Uma das soluções para esse problema é um pool de conexões. Nesta postagem do blog, discutiremos o pool de conexões do PgBouncer e como utilizá-lo no ClusterControl 1.8.2.
Por que usar o pool de conexões
Bem, a resposta curta para esta pergunta é que é uma solução simples, mas eficaz para melhorar o desempenho de seus aplicativos, ao mesmo tempo que reduz a carga no servidor PostgreSQL. Vamos nos aprofundar um pouco nisso, certo?
Um pool de conexões pode ser definido como um cache de conexões de banco de dados abertas que é reutilizável pelos clientes. Em outras palavras, ele mitigará a carga no banco de dados reduzindo as solicitações em cada nova conexão. Essas novas conexões são basicamente geradas pelo processo do postmaster cada vez que uma conexão é estabelecida, o que normalmente levará cerca de 2 a 3 MB de memória por conexão.
Sem um pool de conexões, isso levará a um problema sempre que o número de conexões for muito alto, pois o postmaster precisa fornecer muita memória. No PostgreSQL, o pool de conexões é gerenciado pelo PgBouncer.
O que é o PgBouncer
PgBouncer é leve, binário único, de código aberto e provavelmente o pool de conexões mais popular para PostgreSQL. O PgBouncer é um utilitário simples que faz exatamente uma coisa, fica entre o banco de dados e os clientes e fala o protocolo PostgreSQL, copiando um servidor PostgreSQL. No momento da escrita, a versão mais recente do PgBouncer é 1.15.0.
Vamos ver quais são alguns dos melhores recursos que ele oferece e provavelmente a razão pela qual é tão popular no mundo PostgreSQL:
-
Leve - apenas um único processo, todas as solicitações do cliente e as respostas do servidor passam pelo PgBouncer sem nenhum em processamento
-
Configuração fácil – não requer alterações no código do lado do cliente e um dos poolers de conexão PostgreSQL mais simples de configurar
-
Escalabilidade e desempenho – escala bem para um grande número de clientes e ao mesmo tempo aumenta significativamente as transações por segundo que o servidor PostgreSQL pode suportar
Etapas para configurar o PgBouncer com ClusterControl
Existem alguns passos para você instalar e configurar o PgBouncer com ClusterControl. Nesta seção, passaremos pelas etapas desde que você já tenha o cluster PostgreSQL implantado. Se você ainda não tem o cluster, pode seguir o guia nesta postagem do blog.
Na interface do usuário da web> Selecione PostgreSQL Cluster> Gerenciar> Load Balancer> Selecione a guia PgBouncer e a captura de tela a seguir será exibida. Aqui você pode escolher entre Deploy ou Import PgBouncer, neste exemplo, vamos escolher Deploy.:
Você pode selecionar o nó na lista suspensa, especificar a porta, adicionar ' PgBouncer Admin User', bem como a senha e clique em 'Deploy PgBouncer'. O trabalho começará a ser executado e o status começará a aparecer nesta tela, você também pode monitorá-lo na guia 'Atividade'.
Depois que o nó PgBouncer for implantado com sucesso, a próxima etapa é criar o pool de conexões. Em seu cluster> nós> selecione o nó PgBouncer e a seguinte captura de tela aparecerá:
A tela de conexão aparecerá quando você clicar em 'Create Connection Pool' botão. Você pode preencher todas as informações e atualizar o valor dependendo da sua configuração, para este exemplo usaremos o valor padrão para ‘Pool Mode’, ‘Pool Size’ e ‘Max Database Connection’:
Aqui você precisará adicionar as seguintes informações:
-
Nome do host do PgBouncer:Selecione os hosts do nó para criar o pool de conexões.
-
Nome do pool:os nomes do pool e do banco de dados devem ser os mesmos.
-
Nome de usuário: Selecione um usuário no nó mestre do PostgreSQL ou crie um novo.
-
Modo de pool:sessão (padrão), transação ou pool de instruções.
-
sessão (padrão):o servidor é liberado de volta ao pool após a desconexão do cliente
-
transação:o servidor é liberado de volta ao pool após a conclusão da transação
-
instrução:O servidor é liberado de volta ao pool após a conclusão da consulta. As transações que abrangem várias instruções não são permitidas neste modo
-
-
Tamanho do Pool:Tamanho máximo dos pools para este banco de dados. O valor padrão é 20.
-
Máximo de conexões de banco de dados:Configure um máximo de todo o banco de dados. O valor padrão é 0, o que significa ilimitado.
O pool de conexões aparecerá depois que você clicar no botão 'Concluir' conforme a captura de tela abaixo e o PgBouncer e o pool de conexões estarão prontos:
Conclusão
Usar o pool de conexões e o PgBouncer são algumas das etapas para melhorar o desempenho do seu aplicativo quando se trata de alta disponibilidade. Com o ClusterControl, você pode implantar o PgBouncer e criar um pool de conexões de maneira fácil e rápida.
Para torná-lo ainda melhor, também sugerimos a implantação do HAProxy além do PgBouncer. O recurso HAProxy está disponível no ClusterControl e, no momento da escrita, a versão que estamos usando é 1.8.23.