46

Arquitectura multitenant: qué es y por qué es importante

175646Puntos

hace 7 años

¿Qué es Multitenant?

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.

Ventajas y desventajas de un multitentant

Ventajas

  • Economía en desarrollo y mantenimiento, ya que los costos son distribuidos entre todos los clientes.
  • Fácil actualización, ya que es necesario solo actualizar una sola instancia.
  • Seguridad de la información de cada cliente, ya que cuenta con un schema separado para cada uno.
  • Optimiza el uso de recursos de los servidores.

Desventajas

  • Dificulta el desarrollo de características específicas para un cliente.
  • Único punto de falla: si la aplicación tiene un error o falla, fallará para todos los clientes.
multitenant.jpg

Arquitectura Multitenant aplicada a bases de datos.

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.

Compartida (Shared)

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

  • La capa de datos es fácil de construir (crear las tablas de la base de datos).
  • Todos los usuarios usan el mismo dominio de la aplicación.

Desventajas

  • Es costoso (Tamaño y cantidad de peticiones a la base de datos).

Separada (Isolated)

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

  • Mayor seguridad.
  • Fácil recuperación en caso de daño en la base de datos
  • Bajo consumo de recursos de procesamiento…

Desventajas

  • Dificultad para escalar.
  • Costoso en recursos de almacenamiento (se necesitan muchas bases de datos).
  • Dificultad para compartir información entre clientes.
  • Dificultad de actualización (hay que hacer el proceso por cada base de datos).

Híbrida (Semi - Isolated)

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

  • Facilmente escalable.
  • Reducción de costos en almacenamiento y procesamiento.
  • Seguro (cada cliente tiene su información separada en el schema).
  • Compartir información entre clientes (hay tablas que se pueden acceder por todos los clientes).

Desventajas

  • El proceso de recuperación de datos de un schema es más complejo.
  • Es menos seguro que las bases de datos separadas.

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.

Diego Alexander
Diego Alexander
gollum23

175646Puntos

hace 7 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
2

Sabes cómo podría poner un dominio a cada subdominio de cada tenancy?, Podrías ayudarme con esa inquietud por favor

1
12578Puntos

Tienen algún curso sobre desarrollo Multitenant? con laravel en un caso puntual.

1
11886Puntos

Sería genial un curso con este tema

1

Como aplico la multi tenecia en mi proyecto ?
Algun servidor que recomiendes ?

2
175646Puntos
4 años

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.

1
4739Puntos
2 años

Muchas gracias por la recomendación, de pronto conoces alguna estructura enfocada…

USUARIO - TENANT - ROL

de agradecería mucho sí me podrías ayudar.

1
4739Puntos

Disculpe, de pronto tienen alguna recomendación de cómo sería un esquema de base de datos enfocada a este esquema.

  • USUARIO - EMPRESA - ROL

Esta sería una estructura recomendada?

muchas gracias a todos.

1
11886Puntos

Cómo puedo empezar a implementar esto en un proyecto real ?

1

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.

1
175646Puntos
4 años

Con mysql no puedes implementar multi tenant, y el lenguaje de programación depende del proyecto que quieras hacer.

1
3 años

@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.

1
19095Puntos
3 años

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

1
14896Puntos

La arquitectura semi asilada, se puede implementar en MySQL? o sólo en PostgreSQL? Gracias desde ya, excelente artículo.

1
32482Puntos

Excelente post, me encantó!

1
26269Puntos

Excelente explicación y de fácil comprensión

0

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

1
4739Puntos
2 años

Hola como estas, de pronto tienes alguna solución de cómo gestionar la estructura de base de datos?