Estou trabalhando em um projeto que deve atender milhões de usuários logo após o lançamento. O banco de dados é postgres e, por enquanto, estou assumindo que pelo menos dois servidores serão necessários. Um administrador de sistemas (que é claramente versado em sistemas escalonáveis) sugeriu colocar um balanceador de carga entre os servidores Web e os servidores de banco de dados.
Minha pergunta é em relação à diferença de balanceamento de carga versus pool de conexão. Para manter o desempenho, devo olhar para um ou outro, ou ambos?
postgresql
bogeymin
fonte
fonte
Respostas:
Com o PostgreSQL, você tem duas áreas diferentes que podem fazer pool, na camada do aplicativo (ou seja, no jdbc integrado no pool etc.) ou em uma camada intermediária que fica entre o aplicativo e o db (s), como pgbouncer ou pgpool.
Se você fizer um pool em uma camada intermediária, como pgbouncer ou pgpool, essa camada também poderá fazer o balanceamento de carga de consultas selecionadas. Além disso, no balanceamento de carga, você pode fazer gravações de duas maneiras: você pode ter um único mestre de gravação que replica por outros meios para seus slaves de leitura, usando uma ferramenta como slony ou a replicação de streaming incorporada que aparece na página 9.0 e acima, ou você pode fazer com que o balanceador de carga faça toda a gravação, para que as leituras recebidas atinjam apenas um db, mas as gravações atinjam cada banco de dados para mantê-las atualizadas.
Ou, se você é aventureiro, pode mover a camada de balanceamento de carga para outra camada para o próprio postgresql usando o plproxy. Essa é uma linguagem pl para o pgsql projetada para permitir que você coloque um banco de dados pg no front-end que não possui dados reais, e esse banco de dados pode executar sobre vários dbs possivelmente redundantes para obter uma taxa de transferência incrível. O plpoxy é bastante complexo para configurar e funcionar, mas também é bastante escalável. Observe que seu aplicativo precisa ser reescrito para suportá-lo, para que não possa ser lançado em nenhum aplicativo antigo e apenas funcione.
http://slony.info/ http://wiki.postgresql.org/wiki/PL/Proxy http://pgpool.projects.postgresql.org/
fonte
O balanceamento de carga e o pool de conexões são duas coisas muito diferentes.
O pool de conexões (eu venho de um lado da Microsoft no mundo, mas suponho que as coisas sejam semelhantes) permite que o aplicativo mantenha a conexão com o banco de dados aberta para que possa reutilizá-lo para a próxima consulta, em vez de precisar desconectar e reconectar para cada consulta que precisa ser executada.
O balanceamento de carga permite que você tenha vários servidores de banco de dados atrás do balanceador de carga, para que você possa distribuir a carga por vários servidores, em vez de ter um único servidor lidando com todo o trabalho.
Você pode usar o pool de conexões com o balanceamento de carga; no entanto, lembre-se de que, como as conexões nunca serão descartadas, você poderá acabar com uma carga não balanceada entre os dois servidores de banco de dados.
Se um único servidor de banco de dados não puder lidar com a carga do aplicativo, obtenha três servidores lá atrás. Dessa forma, você pode reiniciar um conforme necessário, sem o aplicativo travar.
fonte