Scaling basé sur la capacité de diffusion de l'équilibrage de charge

Ce document explique comment faire évoluer un groupe d'instances géré (MIG) en fonction de la capacité de diffusion d'un équilibreur de charge HTTP(S) externe. Cela signifie que l'autoscaling ajoute ou supprime des instances de VM dans le groupe lorsque l'équilibreur de charge indique que le groupe a atteint une fraction configurable de son utilisation maximale, où l'utilisation maximale est définie par la capacité cible du mode d'équilibrage sélectionné pour le groupe d'instances backend.

Vous pouvez également faire évoluer un groupe d'instances géré en fonction de son utilisation du processeur ou des métriques Cloud Monitoring.

Avant de commencer

Scaling basé sur la capacité de diffusion de l'équilibrage de charge HTTP(S)

Compute Engine est compatible avec l'équilibrage de charge au sein de vos groupes d'instances. Vous pouvez utiliser l'autoscaling en conjonction avec l'équilibrage de charge en configurant un autoscaler dont le fonctionnement est basé sur la charge de vos instances.

Un équilibreur de charge HTTP(S) externe distribue les requêtes aux services de backend en fonction de son mappage d'URL. L'équilibreur de charge peut avoir un ou plusieurs services de backend, chacun acceptant des backends de groupes d'instances ou de groupes de points de terminaison du réseau. Lorsque les backends sont des groupes d'instances, l'équilibreur de charge HTTP(S) externe propose deux modes d'équilibrage : UTILIZATION et RATE. Avec UTILIZATION, vous pouvez spécifier une cible maximale pour l'utilisation moyenne du backend d'instances de ce groupe d'instances. Avec RATE, vous devez spécifier un nombre cible de requêtes par seconde, par instance ou par groupe. Notez que seuls les groupes d'instances zonaux permettent de spécifier un débit maximal pour l'ensemble du groupe. Les groupes d'instances gérés régionaux ne sont pas compatibles avec la définition d'un débit maximal par groupe.

Le mode d'équilibrage et la capacité cible que vous spécifiez définissent les conditions dans lesquelles Google Cloud détermine le moment auquel une VM de backend est à pleine capacité. Google Cloud tente d'envoyer le trafic vers des VM saines qui n'ont pas atteint leur capacité maximale. Si toutes les VM sont déjà saturées, la cible maximale d'utilisation ou de débit est dépassée.

Lorsque vous associez un autoscaler à un backend de groupe d'instances d'un équilibreur de charge HTTP(S) externe, l'autoscaler fait évoluer le groupe d'instances géré pour maintenir une fraction de la capacité de diffusion de l'équilibrage de charge.

Supposons par exemple que la capacité de diffusion de l'équilibrage de charge d'un groupe d'instances géré soit définie sur 100 RPS par instance. Si vous créez un autoscaler avec la règle d'équilibrage HTTP(S) et que vous définissez un niveau d'utilisation cible de 0,8 ou 80 %, l'autoscaler ajoute ou supprime des instances du groupe d'instances géré afin de maintenir la capacité de diffusion à 80 % de sa capacité totale, soit 80 RPS par instance.

Le schéma suivant illustre l'interaction de l'autoscaler avec un groupe d'instances géré et un service backend :

Relations entre l'autoscaler, les groupes d'instances gérés et les services backend d'équilibrage de charge.
L'autoscaler surveille la capacité de diffusion du groupe d'instances géré défini dans le service de backend et effectue un scaling en fonction de l'objectif d'utilisation. Dans cet exemple, la capacité de traitement est mesurée dans la valeur maxRatePerInstance.

Configurations d'équilibrage de charge applicables

Vous pouvez définir l'une des trois options suivantes pour la capacité de diffusion de votre équilibrage de charge. Lorsque vous créez le backend, vous avez le choix de l'utilisation maximale du backend, du nombre maximal de requêtes par seconde et du nombre maximal de requêtes par seconde pour l'ensemble du groupe. L'autoscaling fonctionne uniquement avec l'utilisation maximale du backend et le nombre maximal de requêtes par seconde et par instance, car la valeur de ces paramètres peut être contrôlée en ajoutant ou en supprimant des instances. Par exemple, si vous définissez un backend pour gérer 10 requêtes par seconde et par instance alors que l'autoscaler est configuré pour conserver 80 % de ce débit, l'autoscaler peut ajouter ou supprimer des instances lorsque le nombre de requêtes par seconde et par instance change.

L'autoscaling ne fonctionne pas avec le nombre maximal de requêtes par groupe, car ce paramètre est indépendant du nombre d'instances présentes dans le groupe d'instances. L'équilibreur de charge envoie en continu le nombre maximal de requêtes par groupe au groupe d'instances, quel que soit le nombre d'instances présentes dans le groupe.

Par exemple, si vous définissez le backend pour gérer 100 requêtes maximum par groupe et par seconde, l'équilibreur de charge envoie 100 requêtes par seconde au groupe, que le groupe ait deux ou 100 instances. Cette valeur ne peut pas être ajustée. L'autoscaling ne fonctionne donc pas avec une configuration d'équilibrage de charge qui utilise le nombre maximal de requêtes par seconde et par groupe.

Activer l'autoscaling basé sur la capacité de diffusion de l'équilibrage de charge

Console


  1. Accédez à la page Groupes d'instances de Google Cloud Console.

    Accéder à la page Groupes d'instances

  2. Si vous disposez d'un groupe d'instances, sélectionnez-le, puis cliquez sur Modifier le groupe. Si vous n'en avez pas, cliquez sur Créer un groupe d'instances.
  3. Dans Autoscaling, sélectionnez Activé.
  4. Dans Autoscaling basé sur, sélectionnez Utilisation de l'équilibrage de charge HTTP.
  5. Saisissez le taux d'utilisation cible de l'équilibrage de charge. Cette valeur est traitée comme un pourcentage. Par exemple, pour 60 % d'utilisation de l'équilibrage de la charge HTTP, saisissez 60.
  6. Indiquez une valeur correspondant au nombre maximal d'instances souhaité dans ce groupe d'instances. Vous pouvez également définir le nombre minimal d'instances et l'intervalle entre chaque période d'autoscaling. L'intervalle entre chaque période d'autoscaling correspond au nombre de secondes que l'autoscaler doit laisser passer, après le démarrage d'une machine virtuelle, avant qu'il ne commence à collecter des informations. Cela tient compte du temps nécessaire à l'initialisation de l'instance, au cours duquel les données collectées ne sont pas fiables pour l'autoscaling. Par défaut, l'intervalle entre chaque période d'autoscaling est de 60 secondes.
  7. Enregistrez les modifications.

gcloud


Pour activer un autoscaler qui évolue en fonction de la capacité de traitement, utilisez la sous-commande set-autoscaling. Par exemple, la commande suivante crée un autoscaler qui effectue un scaling du groupe d'instances géré cible afin de maintenir 60 % de la capacité de diffusion. Outre le paramètre --target-load-balancing-utilization, le paramètre --max-num-replicas est également obligatoire lors de la création d'un autoscaler :

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --max-num-replicas 20 \
    --target-load-balancing-utilization 0.6 \
    --cool-down-period 90

Vous pouvez également utiliser l'indicateur --cool-down-period, qui indique à l'autoscaler combien de secondes il doit attendre après le démarrage d'une nouvelle instance avant de prendre en compte les données de cette nouvelle instance. Cette période d'attente tient compte du temps nécessaire à l'initialisation de l'instance, pendant lequel les données d'utilisation collectées ne sont pas fiables pour l'autoscaling. Une fois la période d'attente écoulée, l'autoscaler commence à inclure les données d'utilisation de l'instance pour déterminer si le groupe doit évoluer. Par défaut, l'intervalle entre chaque période d'autoscaling est de 60 secondes.

Vous pouvez vérifier que l'autoscaler a bien été créé à l'aide de la sous-commande describe :

gcloud compute instance-groups managed describe example-managed-instance-group

Pour obtenir la liste des commandes et indicateurs gcloud disponibles, consultez la référence gcloud.

API


Remarque : Même si l'autoscaling est une fonctionnalité des groupes d'instances gérés, il s'agit d'une ressource d'API distincte. Gardez cela à l'esprit lorsque vous créez des requêtes API pour l'autoscaling.

Dans l'API, envoyez une requête POST à la méthode autoscalers.insert :

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers/

Le corps de votre requête doit contenir les champs name, target et autoscalingPolicy. autoscalingPolicy doit définir loadBalancingUtilization.

Vous pouvez également utiliser le champ coolDownPeriodSec, qui indique à l'autoscaler combien de secondes il devra attendre après le démarrage d'une nouvelle instance avant de prendre en compte les données de cette nouvelle instance. Cette période d'attente tient compte du temps nécessaire à l'initialisation de l'instance, pendant lequel les données d'utilisation collectées ne sont pas fiables pour l'autoscaling. Une fois la période d'attente écoulée, l'autoscaler commence à inclure les données d'utilisation de l'instance pour déterminer si le groupe doit évoluer. Par défaut, l'intervalle entre chaque période d'autoscaling est de 60 secondes.

{

 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
    "maxNumReplicas": 20,
    "loadBalancingUtilization": {
       "utilizationTarget": 0.8
     },
    "coolDownPeriodSec": 90
  }
}

Pour plus d'informations sur l'activation de l'autoscaling basé sur la capacité de diffusion de l'équilibrage de charge, suivez le tutoriel Procéder à l'autoscaling d'un service Web à l'échelle mondiale sur Compute Engine.

Scaling pour d'autres types d'équilibreurs de charge

Pour faire évoluer automatiquement un groupe d'instances géré utilisé comme backend pour d'autres types d'équilibreurs de charge Google Cloud, utilisez une autre règle d'autoscaling.