Llegamos a ustedes gracias a:



Columnas de opinión

Cómo impactan las aplicaciones nativas de la nube al proceso de desarrollo

Por: Isaac Sacolick, presidente de StarCIO

[16/10/2021] Fui desarrollador práctico y director de tecnología durante los días de la programación orientada a los objetos, plataformas web de tres niveles, arquitectura orientada a servicios (SOA, por sus siglas en inglés) y alojamiento en servidores virtuales en el centro de datos.

¡Mucho ha cambiado desde entonces!

Mediante el uso de JavaScript del lado del cliente, los equipos de desarrollo de software más avanzados están desarrollando microservicios y permitiendo experiencias de usuario de front end ricas. Las opciones de alojamiento se han disparado e incluyen plataforma como servicio (PaaS, por sus siglas en inglés), contenedores como servicio (CaaS, por sus siglas en inglés), funciones sin servidor y otras arquitecturas. Las aplicaciones que crean los desarrolladores aprovechan los flujos de datos en tiempo real, se conectan con modelos de aprendizaje automático y se interactúan con SaaS y sistemas empresariales.

Las herramientas de desarrollo actuales han evolucionado significativamente. Estas permiten que los equipos de desarrollo distribuidos globalmente operen de forma independiente, publiquen cambios frecuentes y respondan a los problemas rápidamente. La integración continua y la entrega continua (CI/CD, por sus siglas en inglés), las pruebas continuas, la infraestructura como código (IaC, por sus siglas en inglés) y los AIops, permiten a los equipos automatizar la integración, la implementación, la configuración de la infraestructura y el monitoreo.

Los cambios también incluyen transformaciones culturales y prácticas, como adoptar una planificación continua de manera ágil, instrumentar las pruebas de desplazamiento a la izquierda (shift-left testing), abordar de manera proactiva los riesgos de seguridad e instituir la ingeniería de la confiabilidad del sitio.

Me comuniqué con varios expertos para profundizar en el nivel y sugerir las mejores prácticas sobre cómo cambia el proceso de desarrollo al crear e implementar aplicaciones y microservicios nativos de la nube.

La alta velocidad requiere coordinación y conciencia de las operaciones

Mi primera preocupación con los equipos de desarrollo que tienen como objetivo la construcción de muchos microservicios pequeños, atómicos o que se implementan con frecuencia, es cuando sus velocidades de implementación no tienen en cuenta las medidas de seguridad y la colaboración necesarias.

Hablé con Jason Walker, CTO de campo de BigPanda, sobre sus experiencias con equipos de desarrollo que construyen, implementan y mejoran microservicios con éxito. Él reconoce, "el impacto más significativo es la velocidad, y el tiempo del ciclo de desarrollo-prueba-implementación se reduce drásticamente. Mediante el desarrollo en la nube, para un servicio basado en la nube, y aprovechando un ecosistema de microservicios para los inputs, un equipo ágil puede moverse muy rápidamente.

Walker sugiere que el ambiente de trabajo debe ayudar a los equipos a mantenerse encaminados y ofrecer valor de negocio mientras operan a altas velocidades. Ofrece varias mejores prácticas:

  • Los líderes de todos los niveles deben comprender y alinear los objetivos estratégicos para evitar que los equipos se desvíen de los objetivos del negocio.
  • Los Scrum masters deben adoptar métricas ágiles, calificar historias con precisión y hacer un seguimiento de la velocidad del equipo a lo largo del tiempo, notando y acomodando la variabilidad para la planificación a largo plazo.
  • Los procesos de gestión del conocimiento y la entrega de documentación precisa y actualizada deben integrarse en el ciclo de vida del desarrollo de software para evitar que los equipos modulares se separen unos de otros y desarrollen incompatibilidades.
  • Es necesaria una estrategia de seguimiento accionable. La telemetría sintética y de cliente pueden ser indicadores macro útiles del desempeño general del servicio, y debe medirse la relación señal/ruido en el monitoreo.

La refactorización de código mejora los microservicios

Una de las disciplinas de codificación más importantes en la programación orientada a objetos y SOA es la refactorización de código. Las técnicas permiten a los desarrolladores reestructurar el código a medida que comprenden mejor las consideraciones de uso, los factores de rendimiento o los problemas de deuda técnica.

La refactorización es una técnica clave para transformar aplicaciones monolíticas en microservicios. Las estrategias de refactorización incluyen separar la capa de presentación, extraer los servicios de negocio y refactorizar las bases de datos.

Robin Yeman, miembro de la junta asesora estratégica de Project and Team, ha pasado la mayor parte de su carrera trabajando en sistemas gubernamentales y de defensa a gran escala. Robin admite: "las mayores barreras tecnológicas para utilizar la metodología ágil en la creación o actualización de sistemas que antes eran complejos son las muchas dependencias en la arquitectura del software, lo que obliga a realizar muchas transferencias entre equipos y retrasos en la entrega.

Robin sugiere que la refactorización debería centrarse en reducir las dependencias. Ella recomienda, "refactorizar la arquitectura de software de grandes sistemas previos, para utilizar aplicaciones nativas de la nube y microservicios, reduce las dependencias entre los sistemas y los equipos que los soportan.

La refactorización también mejora los microservicios de formas importantes, como:

Kit Merker, director de operaciones de Nobl9, ofrece este consejo a las organizaciones que realizan la transición hacia las aplicaciones y microservicios nativos de la nube. "No se puede simplemente reescribir todo, es necesario realizar la transición por fases. Una de las mejores prácticas es establecer objetivos claros a nivel de servicios, que sean independientes de la implementación y administrar la impresión que tiene el usuario de su servicio, incluso mientras realiza la transición a implementaciones nativas de la nube.

Adopte patrones de diseño de microservicios

Los patrones de diseño siempre se han utilizado como herramientas para estructurar el código en torno a conjuntos de problemas comunes. Por ejemplo, las categorías de patrones de diseño orientados a objetos son creacionales, conductuales y estructurales; se utilizan para resolver problemas comunes en el diseño de software. Los patrones de diseño SOA han existido durante más de una década y son un precursor del patrón de diseño de las API REST y API en la nube actuales.

El uso de patrones de diseño de microservicios es fundamental para el éxito a largo plazo. Las organizaciones de tecnología apuntan a servicios de autoabastecimiento independientes y resistentes, que soportan el aislamiento de fallas, la entrega continua y un modelo de gobernanza descentralizado. Eso puede ser un desafío si los equipos de desarrollo no tienen un lenguaje común, una arquitectura de microservicio y una estrategia de implementación para desarrollar con patrones de diseño.

Tyler Johnson, cofundador y CTO de PrivOps, explica que el desarrollo de microservicios es una estrategia clave para reducir la complejidad. Él afirma: "una forma de describir las aplicaciones nativas de la nube es como un conjunto de sistemas complejos, interactivos y distribuidos. Esta complejidad puede volverse inmanejable rápidamente, por lo que es necesaria una arquitectura de microservicios modular y estandarizada que incluya herramientas de desarrollo, APIs y modelos de datos estandarizados.

Michael Bachman, arquitecto global y tecnólogo principal de Boomi, sugiere que el uso del patrón de diseño de microservicios compuestos permite a los desarrolladores centrarse en la experiencia del usuario. Este patrón de diseño es particularmente importante cuando los desarrolladores crean aplicaciones conectadas a servicios de nubes múltiples y APIs de plataforma SaaS.

Bachman explica: "el compuesto es una colección de terminales presentados a través de una vista abstracta. Los desarrolladores pueden ir a un catálogo de servicios, hacer llamadas a un compuesto y no les importa lo que sucede debajo. Nos estamos acercando al usuario final y permitiendo una experiencia confiable a través de un servicio compuesto en el extremo superior del stack.

En resumen, la creación de aplicaciones y microservicios nativos de la nube requiere que los equipos de desarrollo sobresalgan en prácticas de desarrollo de software de larga data, como la colaboración, la refactorización de código y el desarrollo de servicios confiables y reutilizables. Dado que los equipos están desarrollando estos servicios a una escala significativa, es importante aprender, adaptar y madurar estas mejores prácticas.

Isaac Sacolick es el autor de Driving Digital: The Leader's Guide to Business Transformation through Technology, que cubre muchas prácticas como la metodología ágil, devops y ciencia de datos que son fundamentales para los programas exitosos de transformación digital. Sacolick es un reconocido CIO social, bloguero desde hace mucho tiempo en Social, Agile and Transformation y CIO.com, también es presidente de StarCIO.