0Pricing
Go Academy · Lección

Comprobaciones de estado y ajustes para producción

HEALTHCHECK, tini y gestión de señales en contenedores

Comprobaciones de estado y ajustes para producción es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Endpoints de comprobación de estado

Un endpoint de comprobación de estado permite que los balanceadores de carga y los orquestadores verifiquen que el servicio está activo y listo para atender tráfico. Hay dos tipos habituales: liveness (¿está funcionando?) y readiness (¿puede atender solicitudes?).

Endpoint de liveness

Devuelve 200 OK si el proceso está activo. Un controlador sencillo que siempre tiene éxito; basta con que el proceso esté en ejecución:

mux.HandleFunc("/healthz/live", func(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK)
})

Endpoint de readiness

Devuelve 200 únicamente cuando el servicio está listo (con la base de datos conectada, la caché preparada y las migraciones completadas). Devuelve 503 durante el inicio o cuando el servicio se encuentra degradado:

mux.HandleFunc("/healthz/ready", func(w http.ResponseWriter, r *http.Request) {
    if err := db.PingContext(r.Context()); err != nil {
        w.WriteHeader(http.StatusServiceUnavailable); return
    }
    w.WriteHeader(http.StatusOK)
})

Sondas de Kubernetes

Configure las sondas de liveness y readiness en la especificación de su Deployment de Kubernetes:

livenessProbe:
  httpGet: { path: /healthz/live, port: 8080 }
  initialDelaySeconds: 5
  periodSeconds: 10
readinessProbe:
  httpGet: { path: /healthz/ready, port: 8080 }
  initialDelaySeconds: 3
  periodSeconds: 5

Ajuste de GOMAXPROCS

En los contenedores, GOMAXPROCS usa de forma predeterminada el número de CPU del host, no el límite de CPU del contenedor. Utilice go.uber.org/automaxprocs para establecerlo correctamente a partir de los límites de cgroup.

import _ "go.uber.org/automaxprocs"

Límites de memoria

Establezca GOMEMLIMIT (Go 1.19 y versiones posteriores) en el límite de memoria del contenedor para permitir que el GC utilice la memoria de forma más intensiva antes de que se active el OOM killer:

import "runtime/debug"
debug.SetMemoryLimit(512 * 1024 * 1024) // 512 MiB

Ajuste del GC

Establezca GOGC para controlar la frecuencia del GC. El valor predeterminado es 100 (el GC se ejecuta cuando el heap se duplica). Los valores más bajos reducen el uso de memoria a cambio de un GC más frecuente; los valores más altos intercambian un mayor uso de memoria por menos ejecuciones del GC.

os.Setenv("GOGC", "200") // allow heap to grow 2× before GC

Ajuste del pool de conexiones

Establezca límites del pool de conexiones de base de datos adecuados para los límites de recursos del contenedor y para max_connections de la base de datos:

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(5 * time.Minute)

Exposición de métricas

Exponga las métricas de Prometheus en un puerto independiente (no en el puerto principal de la API) para evitar filtrar datos internos a clientes externos:

go func() {
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":9090", nil)
}()

Cierre ordenado en Kubernetes

Establezca terminationGracePeriodSeconds en la especificación del pod para permitir tiempo suficiente para el tiempo de espera del cierre. Devuelva 503 inmediatamente desde la sonda de readiness cuando se reciba SIGTERM.

Profiling en producción

Habilite pprof en un puerto no público con autenticación. No lo exponga nunca públicamente: revela el estado interno y puede utilizarse para provocar una denegación de servicio.

Comprobación rápida

¿Por qué debe establecerse GOMAXPROCS según los límites de CPU del contenedor y no según las CPU del host?

Resumen: comprobaciones de estado y ajuste para producción

Puntos clave:

  • Liveness: el proceso está activo; Readiness: el servicio puede atender tráfico
  • automaxprocs establece GOMAXPROCS según los límites de CPU del contenedor
  • GOMEMLIMIT evita terminaciones por OOM; GOGC ajusta la frecuencia del GC
  • Exponga las métricas en un puerto independiente y solo interno

Preguntas frecuentes

¿La lección «Comprobaciones de estado y ajustes para producción» es gratis?

Sí — el texto completo de «Comprobaciones de estado y ajustes para producción» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Comprobaciones de estado y ajustes para producción»?

HEALTHCHECK, tini y gestión de señales en contenedores Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Comprobaciones de estado y ajustes para producción»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Compilaciones Docker de varias etapas para Go
  2. Configuración del entorno y secretos
  3. Docker Compose para desarrollo local
  4. Comprobaciones de estado y ajustes para producción
← Volver a Go Academy