De aplicaciones GeneXus mono-kb a aplicaciones multi-kb

 Acompañando la tendencia de la industria, en la comunidad GeneXus estamos pasando de tener aplicaciones monolíticas de una sola KB, a aplicaciones de multiplex KB.  No hablo solo de microservicios, que pueden ser uno de los casos aca contemplados (*), sino de algo un poco mas general de tener varias KB que conforme una solución. 


Como todo en esta vida, cada cambio trae ventajas y también tiene algunos inconvenientes que es bueno tener en cuenta. 

Las ventajas de tener todo en una KB monolítica:

  • Todo en una misma base de datos con integridad transaccional. 
  • Los cambios se reflejan en todos los programas 
  • Es mas facil de instalar
  • La comunicación entre objetos es mas rapida

Que cambia cuando se tiene multiples KB? 


El deploy es bastante mas complejo y tambien es mas complicada la comunicación entre las diversas KB. 

Como GeneXus hoy esta enfocado a aplicaciones mono-kb, se necesitan algunas herramientas que aun no están disponibles entre las standard de GeneXus.  Por ejemplo:

Cambiar propiedades en varias KB en forma simultánea.

Por ejemplo, si se comparte GAM, es posible que se quiera compartir repositorio, usuario administrador, etc entre todas las KB de la aplicación. 
Es importante tener script para poder hacer estos cambios en varias KB de forma automatizada. 

Compartir un conjunto básico de objetos. 

Es posible también que se necesite compartir objetos (con y sin UI) entre diferentes KB, como pueden ser los pantallas de Login, No autorizado, etc. 
Para esto se necesitan mecanismos que cuando un conjunto de objetos cambie en una KB origen, ese cambio se replique en las demás. 

Compartir Design System. 

Es deseable que todas las KB tengan una misma presentación y esquema de colores. Esto se logra compartiendo el Design System entre todas las KB y contando con DSO derivados en cada KB para la personalización en caso que se necesite algo especifico para una KB en particular. 

Empaquetar Módulos y distribuir modules entre KB. 

Aquellos objetos que son posibles de empaquetar y de ser distribuidos como binarios, es bueno poder hacerlo. Para ello, es bueno automatizar el proceso de empaquetar y distribuir los módulos entre las KB que lo necesiten. 

Log y Auditoría

Es necesario tener centralizado el manejo de los logs para el manejo de errores. La administración de la aplicación se hace muy difícil si esto. Para mantener los logs centralizados y manejables, hay que hacer herramientas que permitan cambiar la configuración del log en forma centralizada y que se replique entre los diferentes sitios de la aplicación. 

Single Sign On

No tiene sentido que se vuelva a pedir la contraseña cuando entro en un sitio diferente. Por eso es indispensable contar con SSO entre todas las aplicaciones generadas por las diversas KB. 
A pesar de ser diferentes aplicaciones, todo debe verse como una sola aplicación, solo que instalada en diversos directorios virtuales o webapps. 

Recomendaciones

Como esta tendencia parece ser algo que va a ser cada vez mas comun en el desarrollo de grandes aplicaciones con Genexus, van algunas recomendaciones para el manejo de estos proyectos.

Pensar todo como UNA aplicación

A pesar de que se tenga KB lo mas independientes posibles (para que su desarrollo sea ágil), hay que  tener una visión unificada que todo forma una sola aplicación. Para esto, hay que tener un grupo de personas que trabajen para lograr este objetivo. 
En que areas hay que trabajar en forma unificada:
  • Seguridad
  • Experiencia de Usuario
  • Diseño grafico
  • Interfaz entre KB
  • Proceso de desarrollo / Normas de desarrollo
  • Arquitectura de la aplicación. 
  • Versiones de programas usados en ejecucion (.NET, Java, etc)
  • Si la solución usa servicios en la nube, hay que unificar y racionalizar el uso de servicios entre los diferentes grupos (para control de gastos)
  • Monitoreo y detección de errores
  • Log y Auditoria
  • Traducción (si la aplicación es multi idioma, la traducción debe ser coherente en todas las KB)

Automatizar Update, Build, Pack, Test, Deploy. 

El proceso de desarrollo, debe ser automatizado para que sea repetible y manejable. Ahorra muchísimo tiempo en una sola KB, pero en un ambiente de multi-KB es algo indispensable. 

Manejo de Ambientes

Es indispensable el manejo de varios ambientes donde la aplicacion pueda funcionar.  Me refiero al manejo de ambiente donde se tengan diferentes frecuencia de cambio, por ejemplo, desarrollo, test automatizado, test manual, produccion. 

Esto hace que se necesiten herramientas para el manejo de dichos ambientes, que son medios escasas. 

Aca tenemos un dilema, por un  necesitamos archivos de configuración con el contenido y el formato que se genera en GeneXus y por otro lado se necesitan hacer los cambios para los diferentes ambientes. 
No hay buenas herramientas para manejar esto de una forma organizada aun y cada empresa crea algo personalizado.  Se ha avanzado bastante por el lado de usar variables de ambiente y la contenerizacion del la solucion, pero aun falta. 

Manejo del ambiente de desarrollo

Es importante que todo el grupo de trabajo comparta un ambiente de desarrollo unificado y compatible. Es conveniente crearse un repositorio centralizado de extensiones, user controls, patterns, external objects, etc que se usan en el ambiente de desarrollo y que sea facilmente bajado y actualizado por todo el grupo de desarrollo. 
Si esto no se automatiza, se puede perder un tiempo increíble en grupo de trabajo numeroso.  

Infraestructura como código. 

Conviene trabajar en armar todo lo necesario para la ejecucion a traves de codigo. 
Por ejemplo, crear  Sitios, Application Pools, Directorios Virtuales, instalar certificados SSL, crear directorios de trabajo, seteos de seguridad, configuracion del storage, colas, configuracion de logs, etc,etc, etc.  Con eso se ahorra tiempo y luego se puede recrear en forma facil si algo se rompe. 
Conviene tenerlo como una tarea dentro del proceso, para regenerar todo la infraestructura al menos una vez por semana, de forma de asegurars que todo funciona correctamente. 

Con estas tareas, se hace manejable proyectos complejos

UPDATE: Hay una charla interesante que cuenta como lo resolvieron en la empresa xiku en este webinar. 

Comentarios

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.