Docs/ Infrastructure/ Mise à l'échelle

Mise à l'échelle

Mettez vos applications à l'échelle horizontalement avec des nombres de réplicas manuels ou des règles de mise à l'échelle automatique basées sur l'utilisation des ressources.

Mise à l'échelle manuelle

La façon la plus simple de mettre à l'échelle est de définir un nombre fixe de réplicas. Chaque réplica est un conteneur identique exécutant votre application. sh0 distribue les requêtes entrantes entre tous les réplicas sains.

  1. Accédez à votre application dans le tableau de bord.
  2. Ouvrez Paramètres → Mise à l'échelle.
  3. Définissez le Nombre de réplicas au nombre souhaité.
  4. Cliquez sur Appliquer. sh0 créera ou supprimera des conteneurs pour correspondre.
Manual scaling panel with replica count slider
Note
L'augmentation est quasi instantanée -- les nouveaux conteneurs démarrent en quelques secondes. La réduction draine gracieusement les connexions avant d'arrêter les conteneurs (délai de grâce de 30 secondes par défaut).

Règles de mise à l'échelle automatique

La mise à l'échelle automatique ajuste dynamiquement le nombre de réplicas en fonction de l'utilisation des ressources en temps réel. Lorsque l'utilisation dépasse un seuil, sh0 ajoute des réplicas. Lorsqu'elle diminue, les réplicas sont supprimés.

Auto-scaling configuration with CPU and memory thresholds

Seuil CPU

Définissez un pourcentage d'utilisation CPU cible. Lorsque l'utilisation moyenne du CPU sur tous les réplicas dépasse ce seuil pendant une période soutenue (par défaut : 60 secondes), sh0 ajoute un nouveau réplica.

ParamètrePar défautDescription
cpu_threshold70%Pourcentage d'utilisation CPU qui déclenche l'augmentation
scale_up_cooldown60sTemps minimum entre les événements d'augmentation
scale_down_cooldown300sTemps minimum entre les événements de réduction

Seuil mémoire

Similaire au CPU, vous pouvez définir un seuil d'utilisation mémoire. Lorsque l'utilisation moyenne de la mémoire dépasse le seuil, sh0 augmente le nombre de réplicas. C'est particulièrement utile pour les applications gourmandes en mémoire comme les services Node.js ou Java.

Tip
Commencez par la mise à l'échelle basée sur le CPU pour la plupart des charges de travail. Ajoutez la mise à l'échelle basée sur la mémoire uniquement si votre application est limitée par la mémoire. L'utilisation simultanée des deux fonctionne -- sh0 augmente lorsque l'un ou l'autre seuil est dépassé.

Réplicas min et max

La mise à l'échelle automatique fonctionne dans des limites que vous définissez :

  • Réplicas min : Le nombre minimum de conteneurs toujours en cours d'exécution. Définissez-le à au moins 1 pour la haute disponibilité, ou 2 pour les déploiements sans interruption.
  • Réplicas max : La limite supérieure de la mise à l'échelle. Cela empêche une mise à l'échelle incontrôlée de consommer toutes les ressources du serveur.
Scaling Configuration
{
  "min_replicas": 2,
  "max_replicas": 10,
  "cpu_threshold": 70,
  "memory_threshold": 80,
  "scale_up_cooldown_seconds": 60,
  "scale_down_cooldown_seconds": 300
}
Min and max replica settings in the scaling panel
Warning
Définir un nombre max de réplicas trop élevé sur un seul serveur peut épuiser la mémoire et le CPU disponibles, causant une dégradation de tous les réplicas. Surveillez les ressources de votre serveur et définissez les limites en conséquence.

Équilibrage de charge entre les réplicas

sh0 utilise Caddy comme reverse proxy pour distribuer le trafic entre les réplicas. La stratégie d'équilibrage de charge est le round-robin par défaut, assurant une distribution uniforme des requêtes.

Comportements clés :

  • Bilans de santé : Les réplicas défaillants sont automatiquement retirés du pool de l'équilibreur de charge.
  • Drainage gracieux : Lors de la réduction, les connexions existantes sont drainées avant l'arrêt du conteneur.
  • Affinité de session : Non activée par défaut. Si votre application nécessite des sessions persistantes, configurez-la dans les paramètres de l'application.
  • Support WebSocket : Les connexions WebSocket sont correctement proxifiées et maintenues entre les réplicas.
Load balancer dashboard showing traffic distribution across replicas

Mise à l'échelle via l'API

Vous pouvez gérer la mise à l'échelle de manière programmatique via l'API REST. C'est utile pour les pipelines CI/CD ou l'automatisation personnalisée.

Définir le nombre de réplicas :

Terminal
curl -X PUT https://your-server:9000/api/apps/my-app/scaling \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"replicas": 4}'

Configurer la mise à l'échelle automatique :

Terminal
curl -X PUT https://your-server:9000/api/apps/my-app/scaling \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "auto_scaling": true,
    "min_replicas": 2,
    "max_replicas": 8,
    "cpu_threshold": 75,
    "memory_threshold": 85
  }'

Obtenir le statut actuel de la mise à l'échelle :

Terminal
curl https://your-server:9000/api/apps/my-app/scaling \
  -H "Authorization: Bearer YOUR_TOKEN"

Bonnes pratiques

  • Rendez votre application sans état : Stockez les sessions dans Redis ou une base de données, pas en mémoire. Les applications sans état se mettent à l'échelle sans effort.
  • Définissez des limites de ressources : Définissez des limites de CPU et de mémoire par conteneur pour qu'un réplica ne puisse pas priver les autres.
  • Utilisez les bilans de santé : Configurez un point de terminaison de bilan de santé pour que sh0 puisse détecter et remplacer automatiquement les réplicas défaillants.
  • Commencez avec min réplicas = 2 : Cela garantit zéro interruption pendant les déploiements (modèle blue-green).
  • Surveillez avant de mettre à l'échelle : Utilisez le tableau de bord des métriques pour comprendre l'utilisation de base de vos ressources avant de définir les seuils de mise à l'échelle automatique.
  • Testez le comportement de réduction : Assurez-vous que votre application gère correctement l'arrêt gracieux (SIGTERM) pour éviter les requêtes perdues.
Tip
Pour les configurations multi-serveur, les réplicas sont distribués automatiquement entre les nœuds. Consultez le guide Multi-serveur pour les détails sur la mise à l'échelle par nœud.