Multitenant es una arquitectura de software que permite a una sola instancia de software servir a muchos clientes. En otras palabras, un solo desarrollo de código puede servir a multiples usuarios, separando la información sensible de cada uno y que solo sea visible por ellos.
Con el aumento en los últimos años de las aplicaciones SaaS, necesitamos como desarrolladores entender cómo funcionan este tipo de servicios y la diferencia entre las diferentes arquitecuras de software que existen para estos desarrollos. Una de ellas es llamada multitenant.
Cada cliente del servicio es considerado como un tenant, esto permite que se pueda personalizar elementos de la aplicación, como son colores de la interfaz, pero no se personaliza el código como tal.
Algo que es importante resaltar en esta arquitectura es que un cliente no necesariamente es un usuario único, puede ser un grupo de usuarios. Por ejemplo algunos servicios funcionan los teams o grupos en los que un cliente puede tener un subdominio para entrar a la aplicación y este cliente puede tener multiples usuarios que ven la información de ese cliente.
Existen tres tipos principales de arquitecturas en las bases de datos, los cuales se explican a continuación pero primero es importante entender qué es un schema
En Postgres un Schema actúa como un nombre de espacio, lo que permite una organización/separación a la base de datos.
(Base de datos -> Schema -> Tabla)
En MySQL un Schema es una base de datos independiente.
Una Base de Datos - Un Schema
Esta arquitectura es la que se usa por defecto en la mayoría de aplicaciones, se separa los usuarios de la aplicación por una relación con la tabla de usuarios. Es útil para servicios B2C como Evernote o LastPass en sus planes individuales.
Ventajas
Desventajas
Cada cliente (tenant) tiene su propia base de datos
Esta arquitectura permite usar cualquier motor de base de datos, se puede relacionar como el proceso de virtualización en el que cada instancia se implementa para el nuevo cliente.
Ventajas
Desventajas
Una base de datos - Multiples Schemas
Esta arquitectura usa lo mejor de las dos anteriores y es posible usarla en PostgreSQL. Esto permite, por ejemplo, que cada uno de los clientes tenga usuarios y sus datos estén separados por cada schema.
Ventajas
Desventajas
Dependiendo de la aplicación que desarrolles y el stack tecnológico que uses, puedes elegir la que mejor se ajuste siempre teniendo en cuenta las ventajas y desventajas de cada una y el tipo de aplicación en la que estas trabajando y sobre todo pensando en el futuro de tu aplicación.
Sabes cómo podría poner un dominio a cada subdominio de cada tenancy?, Podrías ayudarme con esa inquietud por favor
La arquitectura semi asilada, se puede implementar en MySQL? o sólo en PostgreSQL? Gracias desde ya, excelente artículo.
Actualmente estoy usando MySQL en mi proyecto, pero tengo dudas de que lenguaje usar, cual es el más recomendable en este caso, deseaba usar Nodejs, pero no se si es el más adecuado, gracias.
Con mysql no puedes implementar multi tenant, y el lenguaje de programación depende del proyecto que quieras hacer.
Si no puedo usar MySQL, que base de datos es la más recomendable
Postgresql
@gollum23 Interesante lo que dices. Porqué piensas que MySQL no puede ser usado para una arquitectura multi-tenant? Desde mi perspectiva es todo lo contrario pero no quiero decir que mi punto de vista sea el único válido.
Personalmente e implementado multitenant en varios proyectos con mysql teniendo muy buenos resultados, creo que el tema de que tipo de base de datos utilizar se va a ver muy atado a las necesidades especificas del negocio, pero una buena implementación de mysql con multitenant funcionará muy bien aún con bases de datos separadas
Excelente explicación y de fácil comprensión
Cómo puedo empezar a implementar esto en un proyecto real ?
Excelente post, me encantó!
Como aplico la multi tenecia en mi proyecto ?
Algun servidor que recomiendes ?
No, esto es más a nivel de base de datos y programación, la mejor base de datos que conozco para tener multitenant es postgresql, es la única recomendación específica.
Muchas gracias por la recomendación, de pronto conoces alguna estructura enfocada…
USUARIO - TENANT - ROL
de agradecería mucho sí me podrías ayudar.
Sería genial un curso con este tema
Disculpe, de pronto tienen alguna recomendación de cómo sería un esquema de base de datos enfocada a este esquema.
Esta sería una estructura recomendada?
muchas gracias a todos.
muy buen post
Tienen algún curso sobre desarrollo Multitenant? con laravel en un caso puntual.
Muy buen Post
Tuve una idea de negocio donde aplicaba la multitenencia, pero llegue al punto donde no sabaia como dividir o hacer una base de daros diferente por cada cliente que rentara el servicio, es un bune post
Hola como estas, de pronto tienes alguna solución de cómo gestionar la estructura de base de datos?