Multi tenant applications - Aplicaciones multi empresa.


Esto sería algo que me gustaría que tuvieran las próximas aplicaciones GeneXus y creo que es mas fácil plantearlo con un ejemplo.

Supongamos que tengo una aplicacion GeneXus (por ejemplo, GXWiki). Es una aplicacion web muy buena, donde permito definir un wiki personalizado para cada persona que lo desee. Al principio la instalación se hace en forma manual, creando una base de datos independiente y un directorio virtual con una copia de los programas para cada persona que lo solicita.

Viendo un potencial negocio, una empresa decide ofrecer el servicio de Wiki y lo instala en un servidor web, bajo un esquema de software como servicio. En dicho servidor cualquier persona puede definir un wiki y a traves de scripts se copian los programas y se genera la base de datos con  la inicializacion necesaria para poner en funcionamiento un wiki. 

El tiempo pasa, y cada vez mas personas quieren wikis. Siguendo con las suposiciones, desde el plan Ceibal, deciden tener un wiki para cada una de las escuelas del pais (un poco mas de 2000).

Llegado este punto, se nota que manejar miles de bases de datos/directorios virtuales independientes es impracticable porque consume muchisimos recursos, en disco, memoria y procesador.

Además al tener que hacer una instalación de un cambio o de una versión nueva de la aplicación, tengo que instalarla en cada uno de los directorios virtuales y si tengo que hacer una reorganización, hay que hacerla en todos las bases de datos que existen. 

Cual seria la solución?
Si tengo espectativas de poder escalar mucho en la cantidad de usuarios que van a necesitar tener mi aplicación, es necesario diseñar la aplicación de forma "multi-empresa" de forma de poder hacer funcionar muchas empresas con la misma instalación y la misma base de datos. 
Para esto, la aplicación debería asegurar que un usuario de una empresa, no pueda ver los datos de otra empresa. En el ejemplo de los wiki, los usuarios de un wiki no deberían poder ver/modificar las paginas de otros wikis. 

Por lo tanto, seria bueno tener aplicaciones Multi-tenant (se traducirá como " de varios inquilinos"?) con Genexus. La gracia sería poder definir una aplicación como si fuera a trabajar solamente con un cliente o para una sola empresa y un determinando momento poder decirle que voy a trabajar en forma multi-tenant. En ese momento GeneXus se puede encargar de agregar los atributos en las tablas para el manejo de diferentes sesiones y también de las vistas separadas de forma que un cliente solo pueda ver los datos que le corresponde a el.  

Si pudieramos contar con esto, tendríamos lo mejor de los dos mundos, pues nuestra aplicación podria escalar correctamente y tendríamos la simplicidad de poder diseñar la aplicacion como si fuera de una sola empresa.  

Algunos links interesantes (sacado de wikipedia): 

Comentarios

  1. Si, es algo en lo que estamos pensando en como hacerlo. Basicamente primero necesitamos tener los DataSelectors implicitos.

    Coincido contigo en que seria una feature muy intereante...

    Nicolas Jodal

    ResponderBorrar
  2. Nicolas:

    Es muy bueno que tengan esta feature en el radar. Creo que es un área donde GeneXus se puede separar del pelotón de herramientas de desarrollo mas tradicional.

    Gracias por el comentario!

    ResponderBorrar
  3. Hay un caso particular de este problema, que es cuando dentro de un sistema se tiene sucursales, y se quiere que los usuarios de la sucursal, solo puedan ver los datos de dicha sucursal y no los movimientos de las otras sucursales.

    Algunos usuarios supervisores podran ver todos los movimientos.

    Es un lindo problema, que podra resolverse con metodologias similares a las de hacer aplicaciones multi-tenant.


    PD: Es medio patetica la practica de comentar en el blog propio, pero es mejor que hacer un UPDATE sobre el texto del mismo..

    ResponderBorrar
  4. De repente el caso de las sucursales alcanza con los Data Selectors. (Habria que evaluar si los implicitos o no).

    Pienso que esto es asi porque en este caso se mezclan las situaciones en donde solo quiero ver una parte y ver todo. En el caso del multi-tennat estaba pensando en que solo se puede ver una parte, no hay manera de verlo todo (se fuerza esto por un tema de seguridad).

    Nicolas Jodal

    ResponderBorrar
  5. Estoy de acuerdo que hay que estudiarlo y que todos terminan siendo un tema de seguridad, y que es lo que se puede ver o no ver.

    En el caso de las empresas diferentes, van a existir personas que van a tener que ver mas de una empresa (los dueños o directivos de grupos de empresas) y otras personas que van a tener que ver solo una empresa.

    Puede ser un caso bastante similiar a la de las sucursales, dependiendo del esquema de seguridad que se use, por ejemplo si el mismo usuario/contraseña puede ver mas de una empresa.

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.