
Actualmente, mi empleador tiene varias instancias de Postgres (una por cliente, con un código de sitio único) que están físicamente separadas en las instalaciones del cliente. Cada cliente tiene de 1 a 4 bases de datos ejecutándose dentro de una instancia, y cada base de datos contiene más de 20 esquemas.
Estamos intentando reunir estas bases de datos en una única instancia de Postgres, ya sea localmente o con un proveedor de nube (piense en RDS), para que podamos simplificar el acceso/control. El cliente seguirá accediendo a la base de datos; sin embargo, introduciremos una capa de servicio RESTful compartida, donde la base de datos específica se dirigirá mediante un código de sitio agregado como parte de la ruta URL de cada API. Para cumplir con nuestro SLA de rendimiento (90 % por debajo de 1) y mantener bajo el uso de recursos, pretendemos utilizar la agrupación de conexiones en la capa de servicio.
El principal problema al que nos enfrentamos es que Postgres requiere una base de datos durante la conexión, lo que significa que tendremos que tener un grupo de conexiones por cliente, lo que utilizará muchos recursos de manera ineficiente. Como no usamos los recursos de manera eficiente, es posible que necesitemos tener más instancias de la capa de servicio, lo que introduce más costos y complejidad en la arquitectura. Aunque es posible "fragmentar" eficazmente a los clientes en múltiples instancias de la capa de servicio, ¡no soluciona el problema real que es el uso ineficiente de las conexiones!
¿Hay otra solución que no he considerado? ¿Quizás una forma de tener un único grupo de conexiones donde las solicitudes se reenvían a bases de datos específicas? ¿O quizás grupos de conexiones dinámicas que pueden cambiar de tamaño dinámicamente según la carga?
Gracias
Respuesta1
Proxy RDS de AWSpodría ser una forma práctica de reducir los requisitos de conexión.