Infraestructuras evolutivas: Cloud, contenedores y funciones Serverless

Con la adopción de tecnología de infraestructuras dinámicas, como puede ser el Cloud Computing, los contenedores o el Serverless Computing, cada vez es más factible acometer cambios en las arquitecturas. Hablaremos hoy de un concepto muy interesante, como es el de las arquitecturas evolutivas.

Tradicionalmente, la arquitectura software no se puede cambiar sobre la marcha, pero con la adopción generalizada de microservicios demuestra que cuando los arquitectos integran la capacidad de evolución en la arquitectura, el cambio se vuelve más fácil.

Para poder cambiar, ampliar y mejorar la infraestructura de manera rutinaria, los equipos de desarrollo deben tener confianza en que los cambios que emprendan funcionarán correctamente, que el impacto de los errores será bajo y estos se pueden corregir fácilmente. Esto permite una mejora continua de la calidad de los sistemas.

Hace relativamente poco tiempo, Neal Ford, de ThoughtWorks, publicaba junto a otros autores un libro titulado «Building Evolutionary Architectures». El concepto no era nuevo, pero es una de las obras de referencia sobre el tema. En una de sus charlas (se puede ver íntegra en este vídeo), Ford afirmaba lo siguiente: «Los cambios en el software tienen dos orígenes. Por un lado, están los cambios relacionados con el modelo de negocio y existen muchísimas herramientas para abordarlos y gestionarlos dentro de un proyecto. Pero, además, hay otro tipo de cambios que son, generalmente, ignorados: los cambios en el ecosistema donde funciona el software».

En realidad, el entorno en el que se despliega el software no es estático, sino que va evolucionando y de manera independiente.

¿Qué cambios pueden suceder en este entorno? Pueden ir desde una actualización de los sistemas operativos, o de cualquier otro software que pueda tener influencia en la aplicación, hasta caídas no planificadas en los servidores, que provoquen algún perjuicio, hasta cambios en el marco legal del negocio o en los objetivos empresariales.

Las claves de la infraestructura evolutiva

Como ya explicamos en anteriores artículos, la arquitectura Serverless es inherentemente escalable. Las aplicaciones creadas con este tipo de infraestructura escalarán automáticamente a medida que la base de usuarios crezca, o que aumente el uso.  Si es necesario ejecutar una función en varias instancias, los servidores del proveedor se iniciarán, ejecutarán y finalizarán según sea necesario, a menudo utilizando contenedores (evitando así las «cold starts» o arranque en frío).

De esta manera, una aplicación Serverless podrá manejar un número elevado de solicitudes de la misma manera que podría procesar una única solicitud de un solo usuario. Al contrario, una aplicación tradicional, estructurada de manera que dispone de una cantidad fija de espacio de almacenamiento y recursos en el servidor puede verse sobrepasada en el caso de un aumento inusual de las solicitudes.

Por supuesto, el Cloud tiene un protagonismo central dentro de este concepto. Sin la Nube, no es posible sacar el máximo rendimiento a la infraestructura Serverless, sobre todo en cuanto a capacidad de escala y asignación dinámica de recursos.

La fusión de los tres conceptos: arquitecturas Serverless, Contenedores y Cloud, hace posible que hablemos de infraestructuras evolutivas.