Pilares y principios de las aplicaciones modernas

DevOpsProyectos

Pedro Haoa, Ingeniero de Soluciones Senior de F5, nos resume en esta interesante tribuna todos los elementos que deberían tenerse en cuenta a la hora de construir aplicaciones modernas.

Los desarrolladores, arquitectos e ingenieros de DevOps/DevSecOps se ven sometidos a una gran presión cuando tienen que poner en marcha una nueva infraestructura de TI con rapidez para poder satisfacer una demanda inesperada. En un entorno como el actual, en el que seguramente va a ser necesario trasladar las aplicaciones de un centro de datos local al Cloud y/o de un proveedor Cloud a otro, diseñar, construir y soportar estas aplicaciones de forma tradicional ya no resulta una vía fácil y eficiente.
En estos momentos, la mayoría de las organizaciones quieren crear “aplicaciones modernas”. El problema es que en la definición de este mantra no siempre aparecen todos los elementos que deberían tenerse en cuenta y que, a mi juicio, son los que se exponen a continuación.

Los cuatro pilares de las aplicaciones modernas

Escalabilidad, portabilidad, resiliencia y agilidad, son los cuatro atributos fundamentales de cualquier aplicación moderna:

Pilar 1: Escalabilidad

En este factor se incluye tanto la facultad de ampliar la capacidad de computación como la velocidad de esa expansión. Esto da lugar a conceptos como “escalado rápido” y “escalado largo”.

  • Escalado rápido. Es la facultad de aumentar el 100% de la capacidad de una aplicación en tan solo cinco minutos, lo que garantiza poder satisfacer incrementos imprevistos en la demanda.
  • Escalado largo. La habilidad de multiplicar por diez la capacidad de una aplicación durante un año o más sin requerir una refactorización importante del código o grandes cambios en los requisitos de infraestructura. Una aplicación moderna que puede escalar a largo plazo es el resultado de un diseño limpio con dependencias y acoplamientos al margen de los componentes de la infraestructura.

Pilar 2: Portabilidad

A pesar de que el uso de contenedores es algo cada vez más común, las diferentes dependencias, herramientas y configuraciones de los clouds hacen que para las organizaciones resulte poco realista esperar una portabilidad instantánea al intentar moverse a una arquitectura híbrida de múltiples nubes. Así, el factor portabilidad en las aplicaciones modernas tendría que abarcar:

  • Portabilidad funcional. Los elementos funcionales centrales, el código y la lógica de una aplicación deben seguir siendo los mismos con independencia del entorno en el que se ejecuten. Esto significa que el código se ejecuta limpiamente dentro de un contenedor sin dependencias externas estrechamente acopladas a un único entorno.
  • Portabilidad de la gestión. Es necesario poder monitorizar, proteger y observar la aplicación de la misma manera, con las mismas herramientas y los mismos conjuntos de capacidades de generación de informes, sin importar el entorno.

Pilar 3: Resiliencia

La resiliencia puede implicar una alta disponibilidad definida a través de SLAs precisos con respecto al tiempo de inactividad, pero también una fiabilidad más general, que deje espacio para períodos de inactividad más prolongados, con tiempos en los que no se requiera que una aplicación esté en línea y acepte la consistencia final y la entrega de servicios como suficiente.

  • Resiliencia frente al usuario. Los usuarios de las aplicaciones, ya sean máquinas o humanos, nunca deben notar un problema de rendimiento o problemas causados por fallos de la aplicación o de cualquier servicio o infraestructura de los que dependa. Los fallos se producen, inevitablemente, en cascada, lo que afecta, incluso, a los servicios automatizados y a los microservicios altamente dependientes.
  • Resiliencia a la conmutación por error. Una aplicación moderna es capaz de restaurar al 100% en cinco minutos cualquier servicio crítico. Los diseñadores deberían pensar en la conmutación por error a los recursos informáticos no afectados como una parte clave del diseño de la aplicación que está implícita en la recuperación automática y es consciente del entorno.

Pilar 4: Agilidad

Es un factor fundamental para que los equipos de desarrollo de aplicaciones puedan acceder rápida y fácilmente a los recursos que necesitan para probar e impulsar nuevas funciones. La verificación e implementación simplificada y automatizada del código y la infraestructura resulta clave para que los equipos DevOps puedan obtener beneficios de esta agilidad.

  • Agilidad del código. La aplicación en sí debe estar diseñada para poder absorber constantemente código nuevo. En la mayoría de los casos, esto significa que una aplicación se compone de microservicios y está vinculada a través de API para reforzar el acoplamiento flexible y reducir las dependencias y la rigidez del código dentro de la aplicación.
  • Agilidad de la infraestructura. La capacidad de aumentar o reducir la infraestructura para satisfacer las necesidades de todos los equipos, incluidos los de desarrollo de aplicaciones, seguridad y DevOps.

Los seis principios de las aplicaciones modernas

Para poder cumplir con los cuatro pilares, la mayoría de las aplicaciones modernas emplean arquitecturas que siguen estos seis principios:

  • Ser independiente de la plataforma. La aplicación está diseñada para ejecutarse sin tener en cuenta las plataformas o los entornos donde es probable que se ejecuten los contenedores, que ya se han convertido en un estándar de facto para los tiempos de ejecución independientes de la plataforma.
  • Dar prioridad al software de código abierto. Debido a que las aplicaciones modernas requieren que los equipos puedan mirar bajo el capó del código para diseñar portabilidad y escalabilidad, usar OSS siempre que sea posible resulta crucial.
  • Definir todo (lo posible) por código. Las aplicaciones modernas deben moverse a una velocidad superior a la humana. La automatización y la definición programática de todos los aspectos de los requisitos y atributos de las aplicaciones modernas es algo que está ahora sobre la mesa.
  • Diseñar con CI/CD automatizados como estado nativo/predeterminado. Las aplicaciones modernas están diseñadas para tener en cuenta el eventual requisito de automatización de CI/CD, para cambios de código, implementación de infraestructura e, incluso, requisitos de seguridad.
  • Practicar el desarrollo seguro. Esto significa probar todo el código lo antes posible en el proceso de desarrollo utilizando análisis de composición de software (SCA), pruebas estáticas de seguridad de aplicaciones (SAST), análisis de código dinámico (DCA), y verificadores de formato. Para los equipos de DevOps, esto también significa seguir las mejores prácticas de seguridad.
  • Distribuir ampliamente el almacenamiento y la infraestructura. La replicación del almacenamiento y la computación en múltiples zonas, nubes o implementaciones híbridas puede garantizar una mayor capacidad de recuperación y escalabilidad.

Las aplicaciones modernas son tanto un checklist como un estado mental

Al igual que el gato de Schrödinger, apostar por las aplicaciones modernas significa existir simultáneamente en dos estados. Existe el mundo real, con entornos híbridos, nubes y limitaciones de tiempo y presupuesto que condicionan el desarrollo y entrega de las aplicaciones, y existe el mundo ideal, con aplicaciones modernas perfectas, completamente automatizadas, seguras, agnósticas y estables.

La realidad nunca es perfecta. Es posible tener que afrontar la ejecución de una aplicación monolítica que no está en contenedores, sin poder duplicar su capacidad en cinco minutos y sin poder cambiar fácilmente a otros entornos sin refactorizar el código. Pero eso no significa que los pilares y principios de las aplicaciones modernas no supongan una guía hacia un estado mejor. Además, siempre será positivo anticiparse a los cambios de la tecnología.

Ya existen modelos de software basados en tendencias como la computación sin servidor, plataformas de aplicaciones lowcode/nocode cada vez más sofisticadas y aplicaciones de seguridad impulsadas por IA o CDNs con capacidad de cómputo en nodos en el Edge. Es por ello que la actual definición de las aplicaciones modernas debe ser capaz de ampliarse de acuerdo a la evolución de la tecnología, siempre buscando que los usuarios, desarrolladores y todos los demás equipos involucrados puedan acceder a las mejores aplicaciones en cada momento.

Autor
Saber más 
Saber más 

Últimos Whitepapers