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.
- Accédez à votre application dans le tableau de bord.
- Ouvrez Paramètres → Mise à l'échelle.
- Définissez le Nombre de réplicas au nombre souhaité.
- Cliquez sur Appliquer. sh0 créera ou supprimera des conteneurs pour correspondre.
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.
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ètre | Par défaut | Description |
|---|---|---|
cpu_threshold | 70% | Pourcentage d'utilisation CPU qui déclenche l'augmentation |
scale_up_cooldown | 60s | Temps minimum entre les événements d'augmentation |
scale_down_cooldown | 300s | Temps 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.
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.
{
"min_replicas": 2,
"max_replicas": 10,
"cpu_threshold": 70,
"memory_threshold": 80,
"scale_up_cooldown_seconds": 60,
"scale_down_cooldown_seconds": 300
}É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.
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 :
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 :
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 :
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.