Estoy tratando de construir una solución SaaS basada en la web, y llegué a un camino en el que no estoy seguro de usar múltiples inquilinos o múltiples instancias. Trataré de describir lo que estoy tratando de lograr, y cada enfoque tiene ventajas y desventajas (mi opinión, de acuerdo con lo que leí). Incluya sus sugerencias en caso de que me haya perdido algo en un enfoque sobre el otro.
La aplicación que estoy tratando de construir es, como mencioné, una solución SaaS donde las compañías pueden crear sus cuentas, y cada cuenta / compañía tiene sus propios usuarios, clientes, productos, servicios ... etc. Cada usuario; quien es un empleado de la compañía; relacionado con una cuenta / empresa tendrá acceso solo a los clientes, productos y servicios de su empresa. Las empresas pueden tener un número ilimitado de clientes, productos y servicios, por lo que cada empresa debe tener su propio centro de datos.
Para eso, decidí crear una base de datos compartida (guardar todas las credenciales de los usuarios para fines de inicio de sesión) y un esquema compartido de varias bases de datos (base de datos por cuenta / empresa). Básicamente, Multi Tenancy .
Luego, alguien sugirió usar Multi Instance , donde cada compañía tendrá su propia instancia de la aplicación (es decir, código, bibliotecas, bases de datos, marcos ... etc.) totalmente separada de las otras compañías. Esto suena mejor ya que no tengo que ocuparme de una capa adicional donde necesito asegurarme de que los usuarios de cada inquilino tengan acceso solo a los datos de su empresa. Creo que es bueno mencionar que estoy dependiendo de Docker para lograr este enfoque (nunca lo he usado antes), pero creo que carece de características (más sobre eso más adelante) que necesitaré en el futuro (al menos no No los encuentre con un poco de búsqueda).
Sin embargo, cada enfoque tiene ventajas y desventajas, por lo que no pude tomar una decisión con respecto a qué enfoque seguir. Aquí hay una lista, pero desnuda conmigo, ya que me falta el conocimiento en ambos, por lo que podría haber algo de lo que no estoy al tanto, o una solución para un problema que no encontré en la web: [Cada enfoque tiene una lista ordenada de la cual seguí una comparación uno por uno]
Tenencia múltiple :
- Host / hardware compartido, código compartido y base de datos múltiple.
- Es más fácil ampliar la funcionalidad del código y corregir errores (código compartido).
- Es más difícil extender el hardware (podría usar un servicio en la nube) o mover la base de datos del inquilino individual a otro sistema sin realizar cambios en el código.
- Lo más importante, como mencioné antes, necesito agregar una capa adicional al sistema para asegurarme de que el usuario realmente pertenezca a su compañía y no acceda a la información de otra compañía.
Instancia múltiple :
- Host / hardware compartido o no compartido, código por instancia y base de datos por instancia.
- Es más difícil extender la funcionalidad o corregir errores (no estoy seguro de si hay una manera de hacerlo en Docker donde pueda agregar funcionalidad / característica a una instancia o contenedor de Docker e implementarla en las demás).
- Es más fácil mover toda la instancia a un host / hardware diferente.
- Como instancia, no necesito cuidar esa capa ya que cada instancia tendrá su propia base de datos.
Todas las ventajas y desventajas son redundantes en caso de que quiera hacer algo manualmente (como crear una instancia para cada inquilino manualmente), y es por eso que dudo de la solución Docker, a menos que haya una forma de resolver eso, que tal vez sea la principal. razón de la pregunta. Le agradecería que respondiera a la pregunta con referencias a las soluciones, y por qué cree que este enfoque es mejor que el otro.
En caso de que eso ayude (¿tal vez?), Estamos usando Laravel como el marco principal para el back-end (todo RESTfully).