Chaos Engineering para Go: rompiendo aplicaciones para salvar

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Prefacio: Por qué su servicio Go no es un puerto seguro



Escribió código perfecto en Go. Es rápido, concurrente, usa gorutinas y canales. Realizó pruebas unitarias, pruebas de integración, verificó la cobertura. Pero cuando lanzó la versión el viernes por la noche, todo se derrumbó. ¿Por qué? Porque en producción vive el Caos. La red se retrasa, los discos se llenan, las bases de datos fallan y los microservicios dependientes entran en un tiempo de espera infinito.



Bienvenido al mundo real. Aquí es donde entra en juego Chaos Engineering (ingeniería del caos), una disciplina que nos enseña a romper intencionalmente el sistema para comprender sus puntos débiles. En este artículo, analizaremos cómo aplicar Chaos Engineering para aplicaciones Go. Aprenderá a escribir experimentos simples pero efectivos, sin convertir su producción en ruinas. ¿Listo? ¡Vamos!



¿Qué es Chaos Engineering y por qué lo necesita un desarrollador Go?



Chaos Engineering no es solo "romper y huir". Es un enfoque científico para mejorar la tolerancia a fallos. La idea principal: en lugar de esperar una falla, la provoca en un entorno controlado. Formula una hipótesis ("si la base de datos falla, el servicio devolverá un error, pero no se colgará"), realiza el experimento y observa el resultado.



Para Go, este enfoque es particularmente relevante. Go fue diseñado desde el principio para crear sistemas confiables y escalables. Pero incluso el código más genial no lo salvará de problemas de red o la muerte súbita de una gorutina. Chaos Engineering ayuda a verificar cómo funcionan sus middleware, lógica de reintento y circuit breakers (interruptores automáticos) en condiciones reales.



Herramientas para Chaos Engineering en Go



En el mundo de Go, hay varias bibliotecas y enfoques potentes para introducir el caos. Analizaremos los más populares:



  • gofault — una biblioteca simple para inyectar retrasos y errores.
  • chaostoolkit — un framework para orquestar experimentos (tiene drivers para Go).
  • Middleware propio — la forma más flexible y controlable.


En este artículo, seguiremos el camino de crear nuestro propio middleware. Esto le dará una comprensión completa del proceso y la capacidad de adaptarlo a sus necesidades.



Práctica: Creando un Chaos Middleware para un servidor HTTP en Go



Imagine que tiene un servidor HTTP simple en Go. Agregaremos un middleware que simule varias fallas: retrasos, errores, pánico.



Paso 1: Estructura básica



Comencemos definiendo la estructura de configuración del caos:



package chaos

import ( "math/rand" "net/http" "time")

// Config contiene la configuración para la inyección de caos.type Config struct { // Probability - probabilidad (0.0 - 1.0) de que ocurra una falla. Probability float64 // DelayRange - rango de retraso en milisegundos [min, max]. DelayRange [2]int // ErrorCode - código de estado HTTP que se devolverá en caso de error. ErrorCode int // Panic - si es true, el middleware provocará un pánico. Panic bool}

// DefaultConfig devuelve una configuración por defecto.func DefaultConfig() Config { return Config{ Probability: 0.1, // El 10% de las solicitudes se verán afectadas DelayRange: [2]int{100, 500}, ErrorCode: http.StatusInternalServerError, Panic: false, }}


Paso 2: Escribimos el middleware



Ahora crearemos una función que devuelva el middleware. Esta decidirá aleatoriamente qué hacer con la solicitud.



// Middleware devuelve un middleware HTTP para inyectar caos.func Middleware(cfg Config) func(http.Handler) http.Handler {    rng := rand.New(rand.NewSource(time.Now().UnixNano()))

return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { /

Blogs

Book Recommendations