¿Qué rayos es DevOps y por qué debe importarte?

Te presento a DORA (Google Cloud’s DevOps Research and Assessment)

David Regalado
10 min readSep 27, 2022

English version here!

En este artículo/glosario de términos, voy a dar a conocer, para los que todavía no conocen, el término DevOps. Y es que sucede que durante nuestro camino hacia el mundo de los datos, a veces escuchamos términos y herramientas que nunca habíamos visto antes. Esto nos hace sentir nuestro síndrome del impostor hasta el tope. La idea es conocer en líneas generales alguito de cada cosa como para decidir si hacemos transición hacia el mundo DevOps — muy lucrativo y demandado por cierto — o si continuamos adentrándonos hacia el mundo de los datos.

Trataremos los siguientes tópicos:

  • ¿Qué es DevOps?
  • ¿Cuáles son los beneficios de DevOps?
  • 7 Prácticas Esenciales DevOps
  • ¿Qué tal las herramientas DevOps?
  • El equipo de Investigación y Evaluación de DevOps (DORA)
  • ¿Eres un DevOps de élite?

¿Estás cómodo? Bueno, ¡comencemos!

DevOps = Development + Operations | @thecodemancer_ | David Regalado
Imagen adaptada por el autor basado en los personajes de Padre de Familia.

¿Qué es DevOps?

DevOps es un cambio de paradigma que cierra la brecha entre los silos que hay entre los equipos de desarrollo y operaciones. La palabra “DevOps” es una combinación de “desarrollo” y “operaciones”. DevOps describe enfoques para acelerar los procesos mediante los cuales una idea (como una nueva funcionalidad de software, una mejora o una corrección de errores) pasa del desarrollo a implementación en un entorno de producción donde puede proporcionar valor al usuario.

¿Cuáles son los beneficios de DevOps?

DevOps ofrece un entorno productivo que fomenta la colaboración mutua, la comunicación fructífera y la integración entre los equipos de una organización.

Veamos algunos beneficios de implementar DevOps en una organización:

Incrementa la velocidad de tus despliegues

Puedes aumentar la velocidad y la frecuencia de los despliegues, adaptar ciclos cortos de despliegues y reducir el time to market con la ayuda de DevOps. Cuando lanzas el producto y sus funciones rápidamente, puedes realizar rápidamente correcciones de errores, responder a las necesidades de los clientes más rápido y obtener una ventaja competitiva en el mercado con productos de calidad mejorada.

Mejora la estabilidad del software

Prácticas como CI/CD y monitoreo en tiempo real son útiles para mantener la estabilidad del sistema.

Incorpora seguridad desde el principio

Te ayuda a realizar un seguimiento de los problemas de seguridad, detectarlos y resolverlos antes de que puedan causar algún daño.

7 Prácticas Esenciales DevOps

1. Desarrollo ágil de software

Agile es uno de los enfoques de desarrollo de software que se centra en la colaboración en equipo, una mayor adaptabilidad a las demandas cambiantes, comentarios de los usuarios y ciclos de lanzamiento más cortos.

2. Abrazar los fracasos

Para adoptar completamente la computación en la nube a través de DevOps, una organización debe cambiar su actitud hacia el fracaso. Al aceptar el fracaso, las empresas fomentan un “clima para el aprendizaje” que tendrá un impacto positivo en la cultura organizacional.

3. Control de versiones

El control de versiones implica la gestión de códigos en múltiples versiones con revisiones e historial de modificaciones, por lo que es fácil revisar los códigos y recuperarlos.

Es una práctica esencial de DevOps que ayuda a los equipos de desarrollo a colaborar de manera más efectiva, almacenar códigos de manera segura, dividir tareas entre los miembros de su equipo, fusionar cambios, manejar conflictos fácilmente y revertir cambios de código si es necesario.

4. Integración Continua (CI) & Despliegue Continuo (CD)

La integración continua (CI) es una práctica recomendada de DevOps para integrar cambios de código de varios colaboradores en un solo repositorio. CI ayuda a los desarrolladores a integrar los cambios de código con regularidad y evaluar la corrección del código con herramientas automatizadas.

Se utiliza un sistema de gestión de versiones de código fuente para lograr una integración continua. La integración continua tiene como objetivo detectar y corregir errores antes en el ciclo de desarrollo, aumentar la calidad general del código y acelerar la implementación.

La frecuencia aumentará naturalmente a medida que los equipos mejoren el proceso general trabajando juntos. Los errores descubiertos al principio del ciclo de desarrollo ayudan a los equipos a evitar problemas mayores después de que el código se envía a producción. Con el tiempo, esto reduce la deuda técnica.

El despliegue continuo (CD) es una técnica de DevOps para pasar el código de la integración continua (CI) a producción.

Además de las pruebas automatizadas, CD ofrece un procedimiento para release automático, que puede implementar fácilmente con solo unos pocos clics.

5. Infraestructura como Código (IaC)

IaC define las topologías y los recursos del sistema para permitir que el equipo administre los recursos durante la fase de desarrollo de manera confiable y controlada. Puedes almacenar y crear versiones de esas definiciones en un sistema de control de versiones, para que el equipo pueda revisarlas y revertirlas rápidamente. También ayuda a reducir los errores humanos en entornos de producción complejos.

6. Microservicios

Una aplicación distribuida con una arquitectura de microservicios combina numerosos servicios, cada uno de los cuales ejecuta una característica o función específica. Cada servicio se puede implementar de forma independiente, realizar sus acciones y comunicarse con otros servicios a través de una interfaz web en el patrón arquitectónico de microservicios. Se pueden usar diferentes lenguajes o marcos para escribir los diferentes servicios en una arquitectura de microservicios, y se pueden implementar individualmente o como grupo.

Es más fácil evitar un único punto de falla en un diseño de microservicios al garantizar que cualquier problema con un servicio no afecte a otro. Los microservicios también son fáciles de expandir porque el equipo de DevOps puede simplemente agregar un nuevo microservicio para ampliar la funcionalidad sin afectar el resto de la aplicación.

7. Observabilidad

El monitoreo se ha vuelto significativamente más complejo a medida que la industria ha evolucionado desde sistemas y aplicaciones monolíticos en las instalaciones (on-premises) hacia soluciones basadas en microservicios nativas de la nube. Como resultado, la observabilidad se está volviendo cada vez más popular. Los tres pilares de la observabilidad son logs, traces y métricas.

La mayoría de los componentes del sistema y las aplicaciones producen logs, que contienen datos de series temporales sobre el funcionamiento del sistema o de la aplicación. Los traces se utilizan para rastrear el flujo lógico dentro de la aplicación. La reserva o utilización de CPU/RAM, el almacenamiento en disco, la conectividad de red y otras métricas se encuentran entre las métricas disponibles.

¿Qué hay de las herramientas DevOps?

Si bien adoptar una herramienta o tecnología específica no es lo mismo que adoptar DevOps, cuando la cultura DevOps está presente y los procesos están definidos, las personas pueden implementar y optimizar las prácticas de DevOps si eligen las herramientas adecuadas. Repasemos algunos de ellos.

Contenedores

Los contenedores facilitan el traslado de aplicaciones entre entornos de desarrollo, pruebas y producción. El uso de contenedores permite a los desarrolladores empaquetar y aislar sus aplicaciones con todo lo que necesitan para ejecutarse, incluidos archivos de aplicaciones, entornos de tiempo de ejecución, bibliotecas dependientes y configuraciones.

En esencia, DevOps se basa en la automatización de tareas operativas rutinarias y la estandarización de entornos a lo largo del ciclo de vida de una aplicación. Los contenedores pueden ofrecer entornos estandarizados.

Docker

Docker es una plataforma de código abierto que permite a los desarrolladores crear, implementar, ejecutar, actualizar y administrar contenedores.

Kubernetes

El software moderno se ejecuta cada vez más como flotas de contenedores, a veces llamados microservicios. Pero necesitas una plataforma para gestionarlos. Ahí es donde entra Kubernetes.

Kubernetes es un software de código abierto que administra, escala y mantiene automáticamente las cargas de trabajo de varios contenedores en los estados deseados.

También conocido como K8, Kubernetes fue desarrollado originalmente por Google y lanzado en 2014, pero ahora la Cloud Native Computing Foundation se encarga de su mantenimiento.

Kubernetes se está convirtiendo en el estándar de facto para ejecutar infraestructuras de microservicios en la nube. La mayoría de los proveedores de nube más grandes ofrecen clústeres de Kubernetes administrados:

  • Kubernetes en Google Cloud: Google Kubernetes Engine (GKE para abreviar) es el primer servicio de Kubernetes completamente administrado de la industria que implementa la API completa de Kubernetes, el escalado automático de 4 vías, los canales de lanzamiento y la compatibilidad con múltiples clústeres.
  • Kubernetes en AWS: Amazon Elastic Kubernetes Service (EKS), un servicio de Kubernetes administrado certificado que administra clústeres de instancias de cómputo de Amazon Elastic Compute Cloud (EC2) y ejecuta contenedores en esas instancias.
  • Kubernetes en Azure: Microsoft Azure Kubernetes Service (AKS) implementa y escala contenedores en un Kubernetes administrado por Microsoft.

Helm

Helm ayuda a administrar las aplicaciones de Kubernetes. Helm Charts ayuda a definir, instalar y actualizar incluso la aplicación de Kubernetes más compleja. Algunos gráficos Helm populares son mysql, trino, presto, clickhouse, mariadb, postgresql, pgadmin, ibm db2, apache ignite, sql server, zeppelin, entre otros.

Git

Git es un sistema de control de versiones distribuido gratuito y de código abierto diseñado para manejar todo, desde proyectos pequeños hasta proyectos muy grandes, con rapidez y eficiencia.

GitHub

GitHub es un servicio de alojamiento en Internet para el desarrollo de software y el control de versiones mediante Git. Proporciona el control de versiones distribuidas de Git más control de acceso, seguimiento de errores, solicitudes de funciones de software, gestión de tareas, integración continua y wikis para cada proyecto.

GitLab

GitLab es un repositorio de Git basado en la web que proporciona repositorios abiertos y privados gratuitos, capacidades de seguimiento de problemas y wikis.

Jenkins

Jenkins se usa para el build y testing de tu producto continuamente, de modo que los desarrolladores puedan integrar cambios continuamente en el build. Jenkins es la herramienta CI/CD de código abierto más popular del mercado actual.

Terraform

Terraform es una herramienta de infraestructura como código que te permite definir recursos locales y en la nube en archivos de configuración legibles para humanos que tú puedes versionar, reutilizar y compartir. Terraform puede administrar componentes de bajo nivel como recursos informáticos, de almacenamiento y de red, así como componentes de alto nivel como entradas de DNS y funciones de SaaS.

ELK Stack

El stack ELK es una poderosa combinación de tres herramientas populares de código abierto: Elasticsearch, Logstash, & Kibana.

  • Elasticsearch es una herramienta RESTful, de código abierto, de análisis distribuido y de búsqueda basada en la licencia de Apache. Admite varios idiomas, ofrece un alto rendimiento, incluye archivos JSON sin esquemas, etc. que hacen de esta herramienta una excelente alternativa para la búsqueda y el análisis de registros.
  • Logstash también es una herramienta de código abierto para la ingesta de datos que puedes utilizar para recopilar datos de diferentes fuentes, modificarlos y enviarlos a donde desees. Admite más de 200 complementos y filtros prediseñados.
  • Kibana es una herramienta de visualización y exploración de datos de código abierto para revisar registros y eventos. Tiene filtros y agregaciones interactivas, prediseñadas y sin esfuerzo, y viene con soporte geoespacial para la visualización de datos.

Hay muchas, muchas herramientas, pero estas son suficientes. ¿Dónde queda la nube? Bueno, según DORA:

La infraestructura en la nube ayuda… pero solo si lo haces bien.

El equipo de Investigación y Evaluación de DevOps (DORA) de Google Cloud

Google Cloud’s DevOps Research and Assessment (DORA) | @thecodemancer_ | David Regalado
No ella, sino el equipo de DevOps Research and Assessment (DORA) de Google Cloud. Imagen creada por el autor basándose en el personaje de Nickelodeon.

El equipo de investigación y evaluación de DevOps (DORA) de Google Cloud ha llevado a cabo un programa de investigación de siete años. Esta investigación ha validado varias capacidades técnicas, de procesos, de medición y culturales que impulsan una mayor entrega de software y un mayor rendimiento organizacional. Para permitir que los equipos se comparen con la industria, DORA usó el análisis de clusters para formar categorías de desempeño significativas (tales como desempeño bajo, medio, alto o de élite).

El equipo DORA ha identificado cuatro métricas clave que indican el performance de un equipo de desarrollo:

  • Frecuencia de Despliegues— Qué tan a menudo una organización lanza a producción de forma exitosa.
  • Tiempo de Espera de los Cambios— La cantidad de tiempo que le toma a un commit llegar a producción.
  • Ratio de fallos en los Cambios— El porcentaje de despliegues causando un fallo en producción.
  • Tiempo para Restaurar el Servicio— Cuánto le toma a una organizatión recuperarse del fallo en producción.

A un alto nivel, la Frecuencia de Despliegues y el Tiempo de Espera de los Cambios miden velocidad, mientras que el Ratio de Fallos en los Cambios y el Tiempo para Restaurar el Servicio miden estabilidad. Y al medir estos valores, y continuamente iterando para mejorar en ellos, un equipo puede alcanzar significativamente mejores resultados para el negocio.

Esto es lo que encontraron:

Google Cloud’s DevOps Research and Assessment (DORA) | @thecodemancer_ | David Regalado
Explora el programa de investigación de DORA y descubre estas capacidades, cómo implementarlas y cómo superar obstáculos comunes.

Al comparar el grupo de élite con los de bajo rendimiento, DORA descubrió que los de élite tienen…

  • 973x despligues de código más frecuentes.
  • 6570x tiempos de espera más cortos desde commit hasta el despliegue.
  • 3x más bajo el ratio de fallo en los cambios (los cambios son 1/3 menos posible que fallen)
  • 6570x más corto el tiempo para recuperarse de los incidentes.

¿Eres un DevOps de élite?

Puedes medir el rendimiento de tu equipo de entrega de software en menos de un minuto yendo a este enlace.

¡Gracias por leer! ¿Qué tal otra lectura?

Google Cloud’s DevOps Research and Assessment (DORA) | @thecodemancer_ | David Regalado
Enlace al artículo: https://davidregalado255.medium.com/el-lado-oscuro-de-scrum-95a773fe7b88

¿Quieres más?

Si presionas 50 veces el botón de 👏 algo maravilloso sucederá.

--

--

David Regalado
David Regalado

Written by David Regalado

I think therefore I write (and code!) | VP of Engineering @Stealth Startup | Founder @Data Engineering Latam community | More stuff: beacons.ai/davidregalado

No responses yet