É possível ter milhares de usuários no Postgres?

9

Estamos criando o SAAS, onde teremos no máximo 50.000 clientes. Estamos pensando em criar um usuário no banco de dados do Postgres para cada cliente. Mapearemos cada usuário que fizer login em nosso serviço para um usuário no banco de dados, para ter certeza de que eles só terão acesso aos seus próprios dados. Também queremos implementar uma trilha de auditoria diretamente no banco de dados por essas soluções , que utiliza gatilhos. Se cada cliente tiver seu próprio usuário do banco de dados, será muito fácil ver quem fez o que, mesmo que dois clientes compartilhem os mesmos dados.

Teremos problemas inesperados porque temos 50.000 usuários em nosso banco de dados? Em termos de desempenho ou administração. Talvez o pool de conexões seja mais difícil, mas eu realmente não sei se precisaríamos disso.

David
fonte
2
Você não poderá fazer nenhum tipo de pool de conexão se estiver usando a autenticação de banco de dados, certo? Para desempenho, a questão importante é o número de conexões simultâneas e a quantidade de recursos que eles estão usando, em vez do número de usuários no banco de dados.
Jack diz que tente topanswers.xyz 14/01
2
@JackDouglas Sim, você pode usar o pool de conexão. Conecte-se como "commonUser" entãoset role actualUser
Neil McGuigan
2
@ Neil claro, mas isso não é DB auth. Se você estiver autenticando usando a senha do usuário do banco de dados, precisará usar algum tipo de autenticação externa no postgres.
Jack diz que tente topanswers.xyz 14/01
2
@JackDouglas você está certo, é proxy auth ao invés de db auth.
Neil McGuigan
As respostas até agora estão assumindo um alto número de usuários simultâneos, será esse o caso?
Jack diz que tente topanswers.xyz 15/01

Respostas:

12

Sim, tudo bem. Você deve usar o pool de conexões, pois a pg usa uma quantidade razoável de memória por conexão (cerca de 10 MB de AFAIK).

Porém, mais de 500 conexões simultâneas por caixa serão um problema (como consultar ativamente o banco de dados ao mesmo tempo). Mais cpus / núcleos é melhor. Use SSDs com RAID 10.

Seu aplicativo SaaS deve se conectar como um usuário e depois set roleao usuário real. Isso permite que você use o pool de conexões, pois a cadeia de conexão será a mesma, mas use usuários diferentes. Você deve reset roleretornar a conexão com a piscina.

Isso realmente não é autenticação de banco de dados. É autenticação por proxy (também conhecida como representação).

Você também pode considerar pools separados por empresa ou função.

Para facilitar a administração, você pode colocar usuários em grupos e definir permissões por meio de grupos. Isso é chamado de RBAC.

Atualização: Consegui criar 50.000 usuários em 2,4 segundos. O PGAdmin é visivelmente mais lento, devido ao número de usuários. No entanto, a conexão via JDBC é tão rápida quanto antes. Não consegui eliminar 50.000 usuários de uma só vez, mas consegui fazer cerca de 10.000 por vez.

Neil McGuigan
fonte
Muito obrigado pela sua pesquisa. Foi possível trabalhar no PGAdmin? Foi um grande problema com o desempenho lá?
David
@ David PGAdmin estava bem, apenas lento. psql deve estar bem. Pode ser capaz de ajustar o PGAdmin para acelerar as coisas.
Neil McGuigan
2

Desempenho: milhares de conexões simultâneas consumirão Sua memória, aproximadamente um valor acima de 1.000 conexões simultâneas recomendadas para usar o pool de conexões, o pgbouncer é bom, desenvolvido pelo skype.

Administrando: administrar 50.000 usuários será um grande trabalho na IMO. Que tal diferenciar o cliente com o mesmo acesso a dados usando diferente application_name, para que cada cliente se conecte ao banco de dados usando o mesmo nome de usuário.

Exemplo:

usando nome de usuário diferente, a seqüência de conexão de cada cliente seria: --user user1, --user user2, etc.

Mas usando diferente application_name, a seqüência de conexão de cada cliente seria: --user user1 --application_name costumer1, --user user1 --aplication_name costumer2, etc.

O application_nameé gravado pg_stat_activitye também pode ser registrado. Eu acho que seria mais fácil de implementar. E o application_nametambém é registrado no gatilho de auditoria que você deseja aplicar. Mais detalhes aqui .

Espero que ajude.

Soni Harriz
fonte
4
Como a administração de 50.000 usuários de banco de dados é mais difícil que 50.000 usuários de aplicativos?
Neil McGuigan