En un reciente post de Werner Vogels (CTO de Amazon.com) hace un pequeño repaso de lo que han sido 20 años desde la transformación radical del site de Amazon, desde una aplicación monolítica a un sistema distribuido.

Además de establecer los equipos de trabajo autónomos, los famosos «two pizza teams», hace una recopilación de los 5 elementos que  a su juicio tienen que aplicarse en el desarrollo de aplicaciones para incrementar la agilidad y la velocidad de innovación. Son estos:

Arquitectura de Microservicios

Las apliaciones tipo monolito son las más fáciles de desarrollar y, según que caso, pueden ser una buena solución a un caso de uso específico. Sin embargo, como comenta Werner, empieza a ser un problema serio cuando se combinan una gran cantidad de módulos altamente acoplados ejecutándose como un sólo servicio. En el caso de que la aplicación tenga un pico de demanda, la arquitectura entera tiene que escalarse para soportar esta carga de un sólo proceso de aplicación.

Con microservicios, la aplicación está formda por componente independientes que se ejecutan en su propio proceso y cada uno de ellos lo gestiona un equipo de desarrollo por lo que puede ser actualizado, desplegado y escalado de manera autónoma al resto.

Por otra parte, además de las APIs que facilitan el consumo de la funcionalidad de cada servicio, también es conveniente el uso de procesado en streaming en tiempo real, eventos que reaccionan a los cambios de los datos y también el service mesh para la comunicación entre los microservicios y su observabilidad (logging y monitorización).

Bases de datos específicas para un propósito determinado

También las bases de datos están desacopladas en este modelo arquitectónico, teniendo un mapeo uno a uno entre el microservicio y su base de datos. Es decir, cada microservicio gestiona sus propios datos sin compartirlos con otros. De esta manera, cada microservicio es libre de utilizarel tipo de base de datos que mejor se adapte a los requisitos de negocio que tiene que cumplir.

Modelo operacional: tan serverless como sea posible

A diferencia de las aplicacione «tradicionales», tipo monolito, en el que típicamente se tenía un servidor de apliaciones y una base de datos, una aplicación moderna puede estar formada por decenas o cientos de servicios. Cada uno de ellos con su propio middleware y bases de datos. Por lo tanto, la necesidad de gestión de infraestructura se puede multiplicar por varios factores.

Es por eso que se recomienda más que nunca que la infraestructura sea lo más serverless posible, elevando el nivel de abstracción en el que se mueve el equipo de desarrollo. 

Por supuesto, con Serverless no sólo se está refiriendo a las funciones Lambda. Hay todo un conjunto de servicios totalmente gestionados que podemos usar en la nube como pueden ser incluso bases de datos relacionales.

Seguridad: responsabilidad de todo el mundo

La seguridad ya no es algo que se añade al final de los proyectos como si fueran «polvos mágicos». En las aplicaciones modernas, las características de seguridad forman parte de componente y son automáticamente testadas y desplegadas en cada release del software.

Un sitio donde se integra esta seguridad es el repositorio de código fuente y en el repositorio de las imágenes de los contenedores que vamos a desplegar. De esta manera nos aseguramos que el código sigue las normas del desarrollo seguro y que las imágenes no contienen malware.

Como conclusión personal creo que Amazon es un referente indiscutible para el desarrollo de nuevas arquitecturas. Realmente van muchos años por delante en el desarrollo de software. Una buena forma de aprender y absorver los conocimientos necesarios para poner en práctica en nuestra empresa. Gracias Werner por compartir 😉