En el artículo previo publicado por AutelsInsights Desarrollo de software en la nube planteábamos cómo las empresas están revisando sus modelos operativos para adoptar la computación sin servidores y dejar que sean los proveedores de la nube los que tomen responsabilidad sobre ellos, lo que trae como consecuencia enormes cambios en la forma de operar, proporcionar seguridad, desarrollar, probar e implementar.

En este sentido DXC está innovando al utilizar servicios en la nube como AWS Lambda, que permiten implementar patrones arquitectónicos sin servidor que reducen la complejidad operativa de la ejecución y administración de aplicaciones.

En este proceso de innovación, nuestros equipos de gestión de producto están ejecutando una agenda bimodal que les permite construir la visión mientras continúan entregando software de calidad a los clientes. Esto verdaderamente supone moverse en un entorno lleno de retos e incertidumbres, similar al que presentan otras compañías con desarrollo de productos en diferentes estados de madurez.

Como proveedores SaaS, los costes de propiedad del software recaen sobre nosotros. Esto significa que los requerimientos y nuevos retos para competir en una economía de servicios nos empujan de manera natural a construir software en la nube bajo los preceptos de las arquitecturas serverless.

¿Cómo enfocar este reto? Una de las posibles soluciones es diseñar los sistemas según los principios de las arquitecturas evolutivas.

Implementando software con arquitecturas evolutivas

Detrás de este título tan pomposo y filosófico, se esconde un patrón que ya es muy familiar para la comunidad de ingeniería del software. Las arquitecturas evolutivas (o arquitecturas hexagonales) nos proporcionan un patrón para construir componentes de software débilmente acoplados. Esto facilita la integrabilidad de dichos componentes, que en términos de arquitecturas hexagonales sucede a través de unos constructos denominados puertos y adaptadores.

 

innovación en la ingenieria de software

 

Modelo de Arquitectura hexagonal

 

Lo que esta técnica propone es básicamente potenciar los principios de la programación orientada a interfaces para la construcción de componentes de software. De esta forma los desarrolladores tendrían que diseñar estos componentes según los siguientes principios:

  • Aislar la lógica de negocio en módulos que se comunican a través de interfaces funcionales que tienen una semántica específica para el dominio de negocio.
  • Implementar el código que accede a los servicios en la nube detrás de esos interfaces usando las APIs y SDKs del proveedor de servicios en la nube.
  • En el improbable caso de que la aplicación tenga que ser movida a otra plataforma de servicios en la nube, reprogramar el interfaz para acceder a los nuevos servicios en la nueva plataforma.

Con este patrón, los ingenieros de software pueden aislar la lógica de negocio de los detalles de implementación de la plataforma de una forma mucho más eficaz, independientemente de si se trata de una plataforma de servicios en la nube o no. De esta forma, si la aplicación tiene que ser movida entre plataformas, los cambios en el código estarían muy localizados:

  • Cambios en los adaptadores de entrada para procesar y transformar los eventos o datos de entrada para cada componente.
  • Los puertos de salida de cada componente para acceder a los servicios gestionados de la plataforma a través de las APIs o SDKs del proveedor.

Conclusiones

Como proveedores SaaS, nos enfrentamos a una serie de retos apasionantes que abarcan tanto la innovación en la construcción de software como su propia distribución a clientes a escala global. Estos retos son comunes a todas aquellas empresas que necesitan reinventarse para mantener una posición competitiva en el mercado a la vez que entregan servicios de calidad a sus clientes.

Existen numerosos enfoques tecnológicos para sortear estos retos satisfactoriamente, como por ejemplo la gestión de cargas de trabajo en multi-cloud o sistemas de orquestación de contenedores como Kubernetes. Soluciones totalmente válidas por otra parte, pero que no dejan de estar basadas en el mínimo común múltiplo entre plataformas y suelen pisar el freno en la innovación.

Aquí es donde entra en juego serverless, que nos permite atacar la deuda técnica en el corazón del software y adoptar las plataformas de servicios en la nube como un sistema distribuido que está listo para ser programado. De esta forma, los usuarios de proveedores de nube pública como AWS pueden beneficiarse de sus frecuentes e incrementales innovaciones de una forma transparente y sin coste.

Finalmente, patrones como las arquitecturas evolutivas nos ayudan a implementar estas estrategias con eficacia para que los desarrolladores puedan diseñar e implementar componentes débilmente acoplados. Es así como los desarrolladores pueden centrarse en construir sistemas funcionales sin tener que preocuparse por tareas transversales y trabajos indiferenciados que solo les hacen alejarse de su misión: construir software de calidad para sus clientes.

Pablo Bermejo, distinguished Technologist, DXC Technology, Iberia