Arquitecturas Multitenant en Python

Ing. José Miguel Amaya Camacho

miguel.amaya99@gmail.com

José Miguel Amaya Camacho

  • Ing. Informático
  • Python/Django Remote Developer
  • Cofundador XPRENDE TECH - Ecuador
  • Full Stack Developer Infobibliotecas SL - España
  • Activista del Software Libre
  • Fundador de Python Piura

Consideraciones Iniciales

  • Nos vamos a centrar en los datos y su procesamiento.
  • Nos vamos a centrar en la nube.
  • SaSS: software como servicio. Alquiler.
  • ¿Qué hacemos si necesitamos un SaSS multiempresa o multiorganización?
  • ¿Qué arquitectura usamos para construir este tipo de aplicaciones?

¿Qué arquitectura usamos?

  • Seleccionamos la arquitectura según el tipo de proyecto y la manera en que se desee compartir o restringir los datos de los clientes.
  • 3 tipos de arquitecturas:
    • Arquitectura totalmente compartida.
    • Arquitectura totalmente aislada.
    • Arquitectura Multitenant.

Arquitectura Totalmente Compartida

Características

  • Datos completamente compartidos.

  • Una sola instalación de nuestro código y una sola base de datos.

  • Todos los usuarios y clientes acceden al servicio a través de una única URL.

  • Difícil gestión de los datos.

  • Generación de consultas mas complicada y lenta por los filtros.

Arquitectura Totalmente Aislada.

Características

  • Una instalación para cada cliente y una base de datos distinta.
  • Aislamiento completo de los datos.
  • Es mas costoso.
  • Se pueden tener versiones distintas en cada instalación.
  • La gestión de versiones antiguas puede ser complicada.

Puede ocurrir esto

Arquitectura Multitenant

Características

  • Multi-inquilino, término medio entre el aislamiento y la compartición de datos
  • Misma base de datos pero con diferentes espacios de nombres (schemas).
  • Los schemas segmentan la información de cada cliente como fueran diferentes BD.
  • Se accede a la información de cada cliente mediante un subdominio

Despliegue

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

  • Mayor complejidad en la gestión de la BD.

  • Requiere un diseño mas riguroso y una mejor gestión de los cambios.

Implementación Arquitectura Multitenant en Django

Paquetes de Django

Django Tenant Schemas

Django Tenant

https://django-tenant-schemas.readthedocs.io/en/latest/

Arrancamos

Instalación de Django

Creación del proyecto

Instalación y Configuración

Instalación del paquete

Configuración DB en settings.py

Middleware y Allowed Hosts

DATABASE_ROUTERS

Configuración en settings.py

Agregamos tenant_schemas.routers.TenantSyncRouter a la configuración DATABASE_ROUTERS, para que las aplicaciones se puedan sincronizar, dependiendo de si es shared o tenant.

Creación de las Aplicaciones

Shared Apps

  • Las tablas en la base de datos de estas apps son compartidos por todos los clientes. Solo se crean en el schema public.

Configuración en settings.py

Tenant Apps

  • Las tablas en la base de datos de estas apps son creadas en los schemas de cada tenant.

Configuración en settings.py

Installed Apps

  • Cumple la misma función que en un proyecto django convencional, se agrega la aplicación 'tenant_schemas'

Configuración en settings.py

El modelo Tenant

  • Puede contener los campos que desee, debe heredar de TenantMixin. Este Mixin solo tiene dos campos (domain_url y schema_name) y ambos son obligatorios.

Configuración en settings.py

Creación en la App shared

Modelos

Creamos la BD

Migraciones

Creamos el primer Tenant

Creamos un superusuario

Configuramos admin.py

App shared

App store

Corremos el servidor

Primer Tenant

Creación Segundo Tenant

segundo.localhost

Schema Segundo Tenant

Admin Segundo Tenant

Creamos superusuario segundo tenant

Código del Ejemplo

https://github.com/joseamaya/multitenant

Mi Experiencia: Xprende

Plataforma Sass de e-Learning, multicliente con gamificación.

Marathon

Expoflores

Colegio Johannes Kepler

MUCHAS GRACIAS

Preguntas

Arquitecturas Multitenant en Python

By Miguel Amaya Camacho

Arquitecturas Multitenant en Python

Charla para el DevFest 2019

  • 2,361