¿Qué es la Tenencia múltiple?

arrow_back Blog

La tenencia múltiple es un principio de arquitectura de software que nos permite que una sóla instancia de servidor sea capaz de alojar a múltiples clientes.

Realmente es muy simple, desarrollas un único proyecto, lo subes a tu servidor, y para cada nuevo cliente de tu aplicación se genera de forma automática una nueva base de datos con su usuario y sus permisos, su propio sistema de almacenamiento y su propio subdominio.

Debe quedar claro que el tener una base de datos por inquilino es la configuración avanzada y más compleja, pero no la única, también es posible gestionar un proyecto multi tenancy con una única base de datos haciendo uso de una foreign key en todas aquellas tablas que pertenezcan al inquililo, p. ej.: tenant_id, aunque realmente esta configuración tiene el problema bajo mi punto de vista de mezclar información y hacer que un proyecto de estas características sea rígido a la par que difícil de mantener.

Para entender mejor qué es la tenencia múltiple, en lugar de mostrar el caso práctico y así entender por qué necesitamos conocer esta forma de desarrollar aplicaciones, veamos el caso opuesto.

¿Qué no hacer?

Lo que no debes hacer cuando necesites desarrollar un sistema CRM o similar que tienes pensado alquilar/vender a tus clientes es desarrollar una aplicación tradicional, es decir, una base de datos para todos, mismo sistema de archivos etcétera, ¿por qué? Porque sencillamente estás mezclando la lógica de negocio de todos tus clientes y de la aplicación en sí en una misma base de datos, con todo lo que ello puede conllevar.

En lugar de hacer eso, desarrolla una aplicación que tenga la capacidad de soportar tenencia múltiple y podrás aislar a todos tus clientes, pero no sólo eso, también aislaras la lógica de negocio de tu propio sistema de ventas.

Ventajas de un proyecto multi tenancy

Existen muchas ventajas al momento de realizar un proyecto multi tenancy:

  • Deploy de un único proyecto.

  • Más fácil de mantener y de añadir nuevas funcionalides.

  • Menores costes de servidor, no necesitamos uno para cada cliente.

  • Tenemos un sistema que tiene la capacidad de gestionarse desde el mismo proyecto, tanto al sistema como a los inquilinos.

Caso real

Imagina que necesitas desarrollar un CRM que después desees vender a través de suscripciones con Stripe, podrías desarrollar una aplicación web con tenencia múltiple que se encargue de toda la lógica con lo cual podrías ofrecer los siguientes servicios a tus clientes.

  • Su propio subdominio, p. ej. cursosdesarrolloweb.crm.com, alternativamente el primer segmento de la url.

  • Su propia base de datos, los usuarios de una instancia no pueden acceder a los datos de otra instancia, alternativamente una foreign_key en cada tabla que pertenezca a los tenants.

  • Su propio sistema de almacenamiento, p. ej. AWS S3.

  • Rutas personalizadas para cada tenant, web, api, guards, middlewares.

  • Su propio sistema de logs.

  • Su propia configuración a nivel de proyecto.

  • Su propio sistema de migraciones, seeds y factories.

Si te fijas, realmente lo que estás ofreciendo es un sitio web completo para tu cliente que va a trabajar de forma aislada, y todo eso sin tener que hacer ninguna configuración especial para cada nuevo proyecto, una vez aprendes a desarrollar este tipo de aplicaciones el proceso es completamente automático, base de datos, sistema de archivos, autenticación etcétera.

Si quieres seguir aprendiendo más acerca de la tenencia múltiple a través de ejemplos reales con Laravel, no te pierdas los siguientes cursos, tratamos estos temas a fondo para que no quede ninguna duda a través de ejemplos de uso real:

Cursosdesarrolloweb Cursosdesarrolloweb

Cursosdesarrolloweb es una plataforma educativa con cursos y tutoriales en texto y vídeo.

Términos y condiciones Política de privacidad Formulario de contacto

Copyright 2024 © Todos los derechos reservados.

Contacto