0Pricing
Go Academy · Leçon

Contrôles d’état et réglages de production

HEALTHCHECK, tini et gestion des signaux dans les conteneurs

Contrôles d’état et réglages de production est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.

Points de terminaison de contrôle de santé

Un point de terminaison de contrôle de santé permet aux répartiteurs de charge et aux orchestrateurs de vérifier que le service est actif et prêt à recevoir du trafic. Deux types sont courants : la vivacité (fonctionne-t-il ?) et la disponibilité (peut-il traiter des requêtes ?).

Point de terminaison de vivacité

Renvoie 200 OK si le processus est actif. Il s’agit d’un gestionnaire simple qui réussit toujours : le fait que le processus soit en cours d’exécution suffit :

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

Point de terminaison de disponibilité

Renvoie 200 uniquement lorsque le service est prêt (base de données connectée, cache préchauffé, migrations terminées). Renvoie 503 pendant le démarrage ou lorsque le service est dans un état dégradé :

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

Sondes Kubernetes

Configurez les sondes de vivacité et de disponibilité dans la spécification de votre déploiement Kubernetes :

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

Réglage de GOMAXPROCS

Dans les conteneurs, GOMAXPROCS utilise par défaut le nombre de CPU de l’hôte, et non la limite de CPU du conteneur. Utilisez go.uber.org/automaxprocs pour le définir correctement à partir des limites cgroup.

import _ "go.uber.org/automaxprocs"

Limites de mémoire

Définissez GOMEMLIMIT (Go 1.19 et versions ultérieures) sur la limite de mémoire du conteneur afin de permettre au ramasse-miettes d’utiliser la mémoire plus efficacement avant le déclenchement du tueur OOM :

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

Réglage du ramasse-miettes

Définissez GOGC pour contrôler la fréquence du ramasse-miettes. La valeur par défaut est 100 (le ramasse-miettes s’exécute lorsque le tas double de taille). Des valeurs plus faibles réduisent la mémoire utilisée au prix d’un ramasse-miettes plus fréquent ; des valeurs plus élevées consomment davantage de mémoire pour réduire la fréquence du ramasse-miettes.

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

Réglage du pool de connexions

Définissez les limites du pool de connexions à la base de données en fonction des ressources du conteneur et de la valeur max_connections de la base de données :

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

Exposition des métriques

Exposez les métriques Prometheus sur un port distinct (et non sur le port principal de l’API) afin d’éviter de divulguer des données internes aux clients externes :

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

Arrêt progressif dans Kubernetes

Définissez terminationGracePeriodSeconds dans la spécification du pod afin de laisser suffisamment de temps au délai d’expiration de l’arrêt. Renvoyez immédiatement 503 depuis la sonde de disponibilité lors de la réception de SIGTERM.

Profilage en production

Activez pprof sur un port non public avec authentification. Ne l’exposez jamais publiquement : il révèle l’état interne du service et peut être utilisé pour provoquer un déni de service.

Vérification rapide

Pourquoi GOMAXPROCS doit-il être défini en fonction des limites de CPU du conteneur plutôt que du nombre de CPU de l’hôte ?

Récapitulatif : contrôles de santé et réglages de production

Points clés :

  • Vivacité : processus actif ; disponibilité : service capable de recevoir du trafic
  • automaxprocs définit GOMAXPROCS à partir des limites de CPU du conteneur
  • GOMEMLIMIT évite les arrêts dus à OOM ; GOGC règle la fréquence du ramasse-miettes
  • Exposez les métriques sur un port distinct réservé au réseau interne

Questions Fréquemment Posées

La leçon « Contrôles d’état et réglages de production » est-elle gratuite ?

Oui — le texte complet de « Contrôles d’état et réglages de production » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Contrôles d’état et réglages de production » ?

HEALTHCHECK, tini et gestion des signaux dans les conteneurs Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Go Academy ?

Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Contrôles d’état et réglages de production » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?

Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Builds Docker en plusieurs étapes pour Go
  2. Configuration de l’environnement et secrets
  3. Docker Compose pour le développement local
  4. Contrôles d’état et réglages de production
← Retour à Go Academy