Aplicaciones para aprovechar la Nube con 12 Factores

Sabías que desarrollar aplicaciones on-premise es diferente de desarrollar aplicaciones para la nube?
El hecho de que tengas una aplicación instalada en la nube no quiere decir que tu aplicación esté preparada para aprovechar todas las características de la misma.
En la nube surge un nuevo concepto, elasticidad, sabes a que se refiere?

INTRODUCCION

Anteriormente los arquitectos de software solo nos preocupamos por los drivers de arquitectura de aplicación como son disponibilidad, escalabilidad, desempeño, seguridad etc. Y de aquí solo nos preocupabamos por las 3 dimensiones, capacidad, modularidad y redundancia.





Pero qué sucede hoy en día con las nuevas tendencias de la nube. Aquí es donde tenemos que ponernos a pensar en lo siguiente. “Es lo mismo desarrollar aplicaciones on-premise que en la nube”?. La verdad tú podrías asumir esto e incluso puedes hacer que tu aplicación on-premise funcione en la nube, pero realmente estás aprovechando la capacidad de la nube?. Lamento decirte que no. Hoy en día es importante que tu aplicación en la nube, aproveche las características de la misma. Esta tendencia se da debido al continuo crecimiento de datos, impredecibilidad en los patrones de tráfico y la necesidad de tiempos de respuesta más óptimos.
Este artículo está enfocado a los arquitectos de nube que quieran migrar sus aplicaciones locales o que necesiten crear una aplicación enfocada en nube.

Pero entonces, si la nube es tan diferente…como debo diseñar y desarrollar aplicaciones que aprovechen las capacidades de la nube? . De aquí es donde viene el término autenticación de 12 factores. Recuerda que una aplicación en la nube no es simplemente instalarla en la nube y ya. Para que una aplicación realmente esté preparada para la nube debe cumplir estas características. Pues bien esas características son los 12 factores que te hablo. Estos 12 factores los definió Heroku que como bien saben son pioneros en PaaS.

 

FACTOR 1 – BASE DE CÓDIGO CONTEXTO

Es importante comprender los beneficios de la informática en la nube y conocer porque se necesita enfocar los desarrollos en nube con otras estrategias diferentes a las aplicaciones on-premise.  

Ventajas empresariales de la informática en la nube

No hay inversión en infraestructura. – No es necesario preocuparse por crearte un datacenter o comprar el servidor super poderoso que se te va a quedar obsoleto en unos años. Y además de eso contratar soporte.
Reducción en Costos Operativos – Uno de los grandes problemas de los departamentos de sistemas es el presupuesto para comprar infraestructura, a veces se pueden quedar cortos o a veces pueden estar sobredimensionados. En ambos casos TI tiene la culpa

Pagas según el Uso: Una de las grandes ventajas de la nube es que solo pagas lo que consumes por lo cual tus costos son fáciles de manejar y dependerán de tu demanda
Es importante tener un único repositorio de código con algún flujo establecido ya sea estándar o personalizado. Ejemplo: si usas git puedes usar gitflow.

 

FACTOR 2 – DEPENDENCIAS

Se debe declarar y aislar las dependencias. No depender de sistemas existentes, para esto se debe declarar todas las dependencias en un manifiesto Ejemplo el pom de Maven. Tampoco hay que depender de herramientas de sistema. Ejemplo curl está instalado en la mayoría de sistemas linux pero no siempre es así. Recuerda que debes tener presente. El aislamiento (tool) y declaración(manifiesto) de dependencias para cumplir con este factor.

 

FACTOR 3 – CONFIGURACIÓN

Este factor se refiere a almacenar la configuración que es susceptible de cambio y que puede variar entre los distintos ambientes. Estas variables deben ser almacenadas en variables de ambiente y de esta forma poderlas cambiar sin necesidad de cambiar código. A diferencia de los archivos de configuración estas no van al repositorio de código y son agnósticas e independientes del SO y lenguaje de programación.

 

FACTOR 4 – SERVICIOS EXTERNOS

Se trata a los servicios externos como recursos conectables. Una aplicación consume servicios ya sean externos o internos. Ejemplo sistemas de mensajería, correo, ftp, etc. Estos servicios no deben ser diferenciados entre locales y remotos sino simplemente como recursos conectados que en cualquier momento puedo cambiar

 

FACTOR 5 – CONSTRUIR LIBERAR EJECUTA

Se refiere a separar las fases de construcción y ejecución de tal forma que los cambios se realicen en la fase adecuada. Ejemplo no se pueden hacer cambios al codigo en la fase de ejecución

 

FACTOR 6 – PROCESOS

La aplicación se ejecuta en procesos sin estado. La aplicación nunca puede asumir que algo cacheado en memoria o disco estará disponible para una petición futura, ya que no hay ninguna garantía de que una petición futura sea atendida por el mismo proceso. Incluso cuando la aplicación se ejecute en un proceso único en un solo nodo de cómputo, este puede ser reiniciado en cualquier momento.

 

FACTOR 7 – ASIGNACIÓN DE PUERTOS

Los servicios se pueden publicar mediante la asignación de puertos. Esto simplemente es que las aplicaciones sean autocontenidas y que expongas los puertos a los cuales quieran recibir sus peticiones.Por ejemplo, una aplicación puede exponer un servicio de Redis, HTTP o de XMPP, y a su vez esa aplicación puede operar como servicio externo (recurso conectable) para otra aplicación.

 

FACTOR 8 – CONCURRENCIA

Escalar usando procesos. En una aplicación twelve-factor los procesos son ciudadanos de primer nivel. Una aplicación puede definir distintos tipos de proceso. Para manejar distintos tipos de petición.

 

FACTOR 9 – DESECHABILIDAD

Hacer el sistema más robusto por medio de arranque rápido y apagado suave.En este caso se refiere a que cuando un proceso recibe una señal de finalización por parte del administrador de procesos debe: 1) dejar de escuchar el puerto de servicio, 2) finalizar las peticiones pendientes (o regresarlas a una cola de trabajo) y 3) terminar su ejecución. De esta forma facilitamos la escalabilidad y despliegue de cambios.

 

FACTOR 10 – PARIDAD ENTRE AMBIENTES

Mantener los ambientes lo mas similares posible. Una aplicación de 12 factores se enfoca mucho en la entrega continua. Para esto hay que garantizar que por ejemplo los ambientes de desarrollo y pre-producción sean lo más parecidos posible y que las entregas a producción se realicen mas seguido, disminuyendo así el tiempo entre cada instalación

 

FACTOR 11 – BITÁCORAS

Trata los logs como corrientes de eventos. Lo importante aquí es que la app no se preocupa por gestionar y almacenar estos logs. Esta tarea se le deja a un entorno de ejecución

 

FACTOR 12 – PROCESOS ADMINISTRATIVOS

las tareas administrativas de la aplicacion deberian ejecutarse como parte de la aplicación, ejemplo ejecutar scripts,limpiar datos, archiving, etc

 

CONCLUSION

Como nos podemos dar cuenta es diferente una aplicacion instalada en la nube a una aplicación que aproveche la nube. Es por eso que muchas de las empresas que tienen sistemas fuertes en el mercado hoy en día tienen que esforzarse mucho para cambiar a la nube, dado que prácticamente en la mayoría de los casos tienen que rehacer la arquitectura y la aplicacion.

Tags

Andres Bedoya
Andres Bedoya

Deja un comentario


*