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.
set role actualUser
Respuestas:
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 role
al 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íareset role
cuando 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.
fuente
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_name
se registrapg_stat_activity
y también se puede registrar. Creo que sería más fácil de implementar. Yapplication_name
también se registra en el disparador de auditoría que desea aplicar. Más detalles aquí .Espero eso ayude.
fuente