Widergy evoluciona para acompañar a las utilities en la creación de futuro. Lee la nota

¡Extra! ¡Extra! Noticias de hoy y de mañana

Utilities

El ABC de las Plataformas SaaS Multi-tenant

Construyendo una plataforma SaaS Multi-tenant

¿Qué significa SaaS y Multi-tenant y para qué pueden servirnos?

Nuestro líder de Back end, Nacho, nos cuenta cómo implementamos en Widergy la plataforma compuesta de aplicaciones SaaS multi-tenant como base para los productos que ofrecemos a nuestros clientes. Pero primero tenemos que aclarar a qué nos referimos cuando hablamos de aplicaciones SaaS multi-tenant, y más importante aún para qué nos pueden servir.

El comienzo

Luego de casi 3 años de estar involucrado en el desarrollo de aplicaciones de software concebidas como producto, comencé a notar que los patrones y soluciones técnicas de desarrollo a las que estábamos llegando comenzaban a divergir cada vez más de los típicos ejemplos, tutoriales y posts que tanto me habían servido al comenzar este “viaje”.

Creamos Widergy con la misión de pensar, diseñar y desarrollar soluciones de tecnología para la industria de las Utilities (compañías que ofrecen servicios públicos tales como electricidad, gas o agua) en un contexto cada vez más dinámico, desafiante y complejo.

El primer producto que nos propusimos desarrollar, para poder ofrecer luego a nuestros potenciales clientes, las utilities, fue UtilityGO! Una plataforma digital interactiva que facilite una nueva relación entre el consumidor y la utility, evolucionando la experiencia de usuario. En pocas palabras, el objetivo principal era que los consumidores pudieran interactuar con la utility a través de múltiples canales digitales manteniendo siempre una experiencia coherente de principio a fin, sin importar el canal. Entender sus consumos, pagar una factura, realizar un trámite o reclamo tenía que ser una experiencia simple y al alcance de cualquiera con acceso a una computadora, tablet o smartphone.

Acá fue cuando nos planteamos por primera vez construir una plataforma de marca blanca con un modelo SaaS.

SaaS: Software como servicio

El software como servicio, es un modelo de distribución de software en el cual una empresa proveedora de tecnología (nosotros) ofrece una serie de “servicios” en la nube a sus clientes (las utilities), los cuales hacen llegar a sus usuarios finales para que éstos puedan acceder a los mismos a través de un navegador web o de una aplicación móvil desarrollada para tal fin.

El proveedor se encarga de dar el servicio ocupándose de la operación diaria, el mantenimiento, la actualización y evolución del software, mientras que el cliente paga una cuota por el uso de una o más aplicaciones; a diferencia de un modelo clásico donde el cliente debería afrontar el costo total del desarrollo y la operación.

El software como servicio muchas veces viene de la mano con una característica que hace que el modelo sea especialmente eficiente: es multi-tenancy.

Aplicaciones Multi-tenancy

Imaginate que querés crear una aplicación web y comercializarla de forma tal que varias organizaciones puedan utilizarla, ¿cómo implementarías un proyecto así? Podrías simplemente tomar la base de código de tu aplicación y copiarla por completo para cada organización, no?… pero esto implica que ahora vas a tener que darle soporte a múltiples instancias de tu aplicación por separado.

Claramente esa no es la mejor solución, dado que en este caso tu equipo de desarrollo tendría que administrar la infraestructura de los servidores, las actualizaciones o incorporación de nueva funcionalidad por separado para cada instancia. Si tu aplicación la está usando, digamos una docena de organizaciones, y querés desplegar una nueva versión, para actualizar todas las aplicaciones, tu equipo de desarrollo tendría que hacer el mismo despliegue una docena de veces! Hay una solución mucho mejor.

Podés desarrollar una aplicación multi-tenant.

Multitenancy es una propiedad que puede tener una aplicación de software que toma su nombre del término “multi-tenant” (se puede interpretar como “multi-organización”). Corresponde a un principio de arquitectura de software en la cual una sola instancia de una aplicación que se ejecuta en un servidor, puede llegar a servir a múltiples clientes u organizaciones al mismo tiempo.

Las aplicaciones de software como servicio multi-tenant son extremadamente populares en 2019, pero por qué? Básicamente, porque nos permiten ofrecer la misma aplicación a muchos clientes a la vez, distribuyendo el costo de la infraestructura y del mantenimiento entre todos. Es decir, una aplicación que permite con una sola instancia y una sola base de datos, por ejemplo, dar servicio a todos los clientes al mismo tiempo.

La idea principal es sencilla: tener una sola base de código que se ejecuta para todos los clientes, con una misma estructura de datos, pero implementando un mecanismo que nos permita separar y aislar los datos pertenecientes a cada una de las organizaciones, de forma tal que para el cliente esto sea transparente. Es decir, que se vea igual que cualquier otra aplicación single-tenant.

La implementación física de este concepto tiene varios enfoques posibles: La base de código será única, pero puede haber solo una copia física corriendo en un servidor, o puede estar desplegada en varios servidores ejecutando el mismo código en paralelo. En cuanto a los datos, pueden estar almacenados en una única base de datos, o puede haber una base de datos separada para cada cliente, pero todas con una estructura análoga.

Las implicaciones de este tipo de arquitectura son significativas. Actualizar la base de código significa actualizarla para todos los clientes a la vez; esto tiene la gran ventaja de que todos son partícipes de las mejoras de inmediato, sin necesidad de un complejo plan de implementación por fases. A la vez tiene el problema de que requiere tener muy claros los efectos que los cambios generales pueden llegar a tener en las particularidades de cada cliente. En cuanto a las estructuras de datos, una gran ventaja de que las estructuras estén unificadas, tanto si se alojan en la misma base de datos física o no, es la posibilidad de hacer consultas agregadas sobre los datos de todos los clientes.

En cuanto a procesos de mantenimiento y actualizaciones, lógicamente hay que modificar las estructuras al mismo tiempo que el código que las utiliza. Esto significa que se suele admitir poco o ningún tiempo de indisponibilidad de la aplicación en producción, por lo que hay que planificar estas operaciones de manera que afecten lo menos posible al funcionamiento. En caso de ser posible, lo óptimo es implementar mecanismos de “hot-deploy” (como suelen llamarse) los cuales apuntan a tener un tiempo de indisponibilidad cero “zero-downtime”.

Si realmente querés tomarte en serio la construcción de sistemas distribuidos escalables horizontalmente, definitivamente tienen que ser multi-tenant.

Si te interesó esta nota y querés saber más sobre cómo implementamos estas tecnologías, estate atento a nuestras redes sociales y te avisaremos sobre las siguientes!

¡Nos encantan los espíritus curiosos!

¿Quieres sumarte al #TeamWidergy?