¿Es factible tener miles de usuarios en Postgres?


9

Estamos creando SAAS donde tendremos como máximo 50,000 clientes. Estamos considerando crear un usuario en la base de datos de Postgres para cada cliente. Asignaremos cada usuario que inicie sesión en nuestro servicio a un usuario de la base de datos para estar muy seguros de que solo tienen acceso a sus propios datos. También queremos implementar un seguimiento de auditoría directamente en la base de datos mediante estas soluciones , que utilizan disparadores. Si cada cliente tiene su propio usuario de la base de datos, sería muy fácil ver quién hizo qué, incluso si dos clientes compartieran los mismos datos.

¿Nos encontraremos con algunos problemas inesperados porque tenemos 50,000 usuarios en nuestra base de datos? Rendimiento sabio o administración sabio. Quizás la agrupación de conexiones sería más difícil, pero no sé realmente si la necesitaríamos.


2
No podrá hacer ningún tipo de agrupación de conexiones si está utilizando la autenticación de base de datos, ¿verdad? Para el rendimiento, el problema importante es la cantidad de conexiones concurrentes y la cantidad de recursos que están utilizando en lugar de la cantidad de usuarios en la base de datos.
Jack dice que intente topanswers.xyz

2
@JackDouglas Sí, puede usar la agrupación de conexiones. Conéctese como "usuario común" entoncesset role actualUser
Neil McGuigan

2
@Neil seguro, pero eso no es autenticación de base de datos. Si está autenticando con la contraseña del usuario de la base de datos, deberá usar algún tipo de autenticación externa en postgres.
Jack dice que intente topanswers.xyz

2
@JackDouglas tienes razón, es la autenticación proxy en lugar de la autenticación db.
Neil McGuigan

Las respuestas hasta ahora suponen una gran cantidad de usuarios concurrentes, ¿será este el caso?
Jack dice que intente topanswers.xyz

Respuestas:


12

Si, deberia estar bien. Sin embargo, debe usar la agrupación de conexiones, ya que pg usa una buena cantidad de memoria por conexión (aproximadamente 10 MB de AFAIK).

Sin embargo, más de 500 conexiones simultáneas por caja serán un problema (como consultar activamente la base de datos al mismo tiempo). Más cpus / núcleos es mejor. Use SSD con RAID 10.

Su aplicación SaaS debe conectarse como un solo usuario, luego set roleal usuario real. Esto le permite usar la agrupación de conexiones, ya que la cadena de conexión será la misma, pero usará diferentes usuarios. Debería reset rolecuando regrese la conexión al grupo.

Esto no es realmente la autenticación de la base de datos. Es autenticación de proxy (también conocido como suplantación).

También podría considerar grupos separados por compañía o por rol.

Para facilitar la administración, puede poner a los usuarios en grupos y establecer permisos a través de grupos. Esto se llama RBAC.

Actualización: pude crear 50,000 usuarios en 2.4 segundos. PGAdmin es notablemente más lento debido a la cantidad de usuarios. Sin embargo, conectarse a través de JDBC es tan rápido como antes. No pude dejar 50,000 usuarios a la vez, pero podía hacer unos 10,000 a la vez.


Muchas gracias por tu investigación. ¿Era posible trabajar en PGAdmin? ¿Fue un gran problema con el rendimiento allí?
David

@David PGAdmin estaba bien, solo lento. psql debería estar bien. Podría ser capaz de ajustar PGAdmin para acelerar las cosas.
Neil McGuigan

2

Rendimiento: miles de conexiones simultáneas consumirán Su memoria, aproximadamente un valor superior a 1,000 conexiones simultáneas recomendadas para usar la agrupación de conexiones, pgbouncer es una buena, desarrollada por skype.

Administración: administrar 50,000 usuarios será un gran trabajo de la OMI. ¿Qué tal diferenciar al cliente con el mismo acceso a datos usando diferentes application_name, para que cada cliente se conecte a la base de datos usando el mismo nombre de usuario?

Ejemplo:

usando nombre de usuario diferente, la cadena de conexión de cada cliente sería: --user user1, --user user2, etc.

Pero usando diferentes application_name, la cadena de conexión de cada cliente sería: --user user1 --application_name costumer1, --user user1 --aplication_name costumer2, etc.

El application_namese registra pg_stat_activityy también se puede registrar. Creo que sería más fácil de implementar. Y application_nametambién se registra en el disparador de auditoría que desea aplicar. Más detalles aquí .

Espero eso ayude.


44
¿Cómo es más difícil administrar 50,000 usuarios de db que 50,000 usuarios de aplicaciones?
Neil McGuigan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.