Um pool de conexões deve ser executado no meu servidor de banco de dados ou no meu servidor de aplicativos?

4

Estou me preparando para começar a usar o PGBouncer, mas não tenho certeza se ele deve ser usado no meu servidor de banco de dados ou nos servidores de aplicativos. Se estiver nos servidores de aplicativos, haverá necessariamente vários conjuntos de conexões, em vez de um pool central de conexões para os servidores de aplicativos compartilharem, mas as conexões TCP precisarão ser recriadas para cada nova consulta, em vez de também estarem em pool, presumivelmente. Qual é a maneira "correta" de usar um looker de conexão como o PGBouncer, e os pontos que eu faço sobre cada um são válidos?

Nota:

Para aqueles que se deparam com essa questão, consulte Perguntas freqüentes sobre o PgBouncer (a última pergunta).

    
por orokusaki 22.12.2012 / 00:26

1 resposta

3

Pessoalmente, eu colocaria no servidor de aplicativos. Aqui está o porquê.

O PGBouncer basicamente implementa o pool de conexões, que é uma coisa útil (embora às vezes irritantemente problemática) que reduz a latência geral do aplicativo, removendo o custo de configurar uma nova conexão com o banco de dados. Em muitos casos, isso é feito pelo próprio driver de conexão do banco de dados - consulte o driver ADO.NET MSSQL no Windows, PDO no PHP, etc. etc. O objetivo principal é minimizar o custo de tempo entre o código dizendo "Preciso falar para o banco de dados "e, em seguida, ser capaz de realmente começar jogando comandos SQL ao redor.

Os drivers mencionados acima implementam o conjunto de conexões, portanto, o código precisa fazer muito pouco antes de chegar ao ponto em que o banco de dados pode receber comandos SQL.

O PGBouncer é um caso estranho, porque você ainda tem que abrir uma conexão com o daemon do PGBouncer, onde quer que seja. Como você está tentando minimizar o tempo de conexão, faz sentido colocar o daemon o mais próximo possível do código do aplicativo. Idealmente, você se conectaria através de um soquete na mesma caixa, assim você não teria que passar pela ladainha do TCP apenas para chegar ao pooler de conexões.

Tal como acontece com tudo, YMMV. Teste, teste e teste um pouco mais.

    
por 22.12.2012 / 18:37