0Pricing
Go Academy · Lezione

Health check e ottimizzazione per la produzione

HEALTHCHECK, tini e gestione dei segnali nei container

Health check e ottimizzazione per la produzione è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Endpoint per il controllo dello stato

Un endpoint per il controllo dello stato consente ai bilanciatori di carico e agli orchestrator di verificare che il servizio sia attivo e pronto a gestire il traffico. Esistono due tipi comuni: liveness (il servizio è in esecuzione?) e readiness (può gestire le richieste?).

Endpoint di liveness

Restituisce 200 OK se il processo è attivo. Un semplice handler che restituisce sempre esito positivo: è sufficiente che il processo sia in esecuzione:

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

Endpoint di readiness

Restituisce 200 solo quando il servizio è pronto (DB connesso, cache inizializzata, migrazioni completate). Restituisce 503 durante l'avvio o in uno stato degradato:

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)
})

Probe Kubernetes

Configuri le probe di liveness e readiness nella specifica Deployment di Kubernetes:

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

Ottimizzazione di GOMAXPROCS

Nei container, GOMAXPROCS per impostazione predefinita usa il numero di CPU dell'host, non il limite di CPU del container. Utilizzi go.uber.org/automaxprocs per impostarlo correttamente in base ai limiti cgroup.

import _ "go.uber.org/automaxprocs"

Limiti di memoria

Imposti GOMEMLIMIT (Go 1.19+) sul limite di memoria del container, così il GC può utilizzare la memoria in modo più aggressivo prima che intervenga l'OOM killer:

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

Ottimizzazione del GC

Imposti GOGC per controllare la frequenza del GC. Il valore predefinito è 100 (il GC viene eseguito quando l'heap raddoppia). Valori più bassi riducono la memoria al costo di eseguire il GC più spesso; valori più alti usano più memoria per ridurre la frequenza del GC.

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

Ottimizzazione del pool di connessioni

Imposti i limiti del pool di connessioni al database in modo adeguato ai limiti delle risorse del container e al valore max_connections del database:

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

Esposizione delle metriche

Esponga le metriche Prometheus su una porta separata (non sulla porta dell'API principale) per evitare di divulgare dati interni ai client esterni:

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

Arresto controllato in Kubernetes

Imposti terminationGracePeriodSeconds nella specifica del pod per concedere tempo sufficiente al timeout di arresto. Restituisca immediatamente 503 dalla probe di readiness quando viene ricevuto SIGTERM.

Profilazione in produzione

Abiliti pprof su una porta non pubblica con autenticazione. Non lo esponga mai pubblicamente: rivela lo stato interno e può essere utilizzato per causare un DoS al servizio.

Verifica rapida

Perché GOMAXPROCS dovrebbe essere impostato in base ai limiti di CPU del container anziché alle CPU dell'host?

Riepilogo: controlli dello stato e ottimizzazione in produzione

Punti chiave:

  • Liveness: processo attivo; readiness: servizio in grado di gestire il traffico
  • automaxprocs imposta GOMAXPROCS in base ai limiti di CPU del container
  • GOMEMLIMIT evita gli arresti causati dall'OOM; GOGC regola la frequenza del GC
  • Esponga le metriche su una porta separata, accessibile solo internamente

Domande Frequenti

La lezione «Health check e ottimizzazione per la produzione» è gratuita?

Sì — il testo completo di «Health check e ottimizzazione per la produzione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Health check e ottimizzazione per la produzione»?

HEALTHCHECK, tini e gestione dei segnali nei container Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Health check e ottimizzazione per la produzione»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Build Docker multi-stage per Go
  2. Configurazione dell'ambiente e segreti
  3. Docker Compose per lo sviluppo locale
  4. Health check e ottimizzazione per la produzione
← Torna a Go Academy