Utiliser l'autoscaling pour des applications hautement évolutives


Ce tutoriel explique comment utiliser l'autoscaling afin d'ajuster automatiquement le nombre d'instances de VM qui hébergent votre application, permettant ainsi à cette dernière d'être adaptée à différentes quantités de trafic.

Pour utiliser l'autoscaling, hébergez votre application sur un groupe d'instances géré. Un groupe d'instances géré est composé d'une collection d'instances qui exécutent toutes la même application et peuvent être gérées en tant qu'entité unique. Lorsque l'autoscaling est activé pour un groupe d'instances géré, le nombre de VM de ce groupe augmente (scaling horizontal) ou diminue automatiquement (scaling vertical) en fonction de la valeur cible que vous spécifiez pour votre règle d'autoscaling.

Ce tutoriel inclut les étapes détaillées permettant de lancer une application Web sur un groupe d'instances géré, configurer l'autoscaling, configurer l'accès au réseau et observer l'autoscaling en simulant des pics et des baisses de trafic. En fonction de vos connaissances sur ces fonctionnalités, il vous faudra environ 20 minutes pour terminer ce tutoriel.

Objectifs

  • Lancer une application Web de démonstration sur un groupe d'instances géré.
  • Observer les effets de l'autoscaling en simulant des pics et des baisses de trafic.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

  • Compute Engine

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

Architecture de l'application

L'application inclut les composants Compute Engine ci-dessous.

Lancer l'application Web

Ce tutoriel utilise une application Web stockée sur GitHub. Si vous souhaitez en savoir plus sur la mise en œuvre de l'application, consultez le dépôt GoogleCloudPlatform/python-docs-samples sur GitHub.

Lancez l'application Web sur chaque VM d'un groupe d'instances géré en incluant un script de démarrage dans un modèle d'instance. Pour autoriser le trafic HTTP vers l'application Web, créez une règle de pare-feu.

Créer une règle de pare-feu

Créez une règle de pare-feu pour autoriser le trafic HTTP vers l'application Web. Procédez comme suit :

  1. Dans Google Cloud Console, accédez à la page Pare-feu.

    Accéder à la page Pare-feu

  2. Cliquez sur Créer une règle de pare-feu.

  3. Dans le champ Nom, saisissez default-allow-http.

  4. Définissez le paramètre Réseau sur default.

  5. Pour le paramètre Cibles, sélectionnez Specified target tags.

  6. Dans le champ Tags cibles, saisissez http-server.

  7. Définissez Filtre source sur IP ranges.

  8. Sous Plages d'adresses IP sources, saisissez 0.0.0.0/0

    pour autoriser l'accès pour toutes les adresses IP.

  9. Sous Ports et protocoles, sélectionnez Protocoles et ports spécifiés. Ensuite, sélectionnez tcp et saisissez 80 pour autoriser l'accès du trafic HTTP.

  10. Cliquez sur Créer.

Créer un modèle d'instance

Créez un modèle d'instance pour lancer l'application Web de démonstration au démarrage. Procédez comme suit :

  1. Dans Google Cloud Console, accédez à la page Modèles d'instances.

    Accéder à la page Modèles d'instances

  2. Cliquez sur Create instance template (Créer un modèle d'instance).

  3. Dans le champ Nom, saisissez autoscaling-web-app-template.

  4. Sous Configuration de la machine, définissez le type de machine sur e2-standard-2.

  5. Sous Pare-feu, cochez la case Autoriser le trafic HTTP. Cette action attribue le tag de mise en réseau http-server à chaque instance créée à partir de ce modèle.

  6. Cliquez sur Mise en réseau, disques, sécurité, gestion, location unique pour afficher les paramètres avancés.

  7. Sous l'onglet Gestion, recherchez Automatisation et saisissez le script de démarrage suivant :

    sudo apt update && sudo apt -y install git gunicorn3 python3-pip
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/compute/managed-instances/demo
    sudo pip3 install -r requirements.txt
    sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
    

    Avec ce script, chaque instance va exécuter l'application Web au démarrage.

  8. Cliquez sur Créer.

Créer un groupe d'instances géré

Pour exécuter l'application Web, créez un groupe d'instances régional. Procédez comme suit :

  1. Dans Google Cloud Console, accédez à la page Groupes d'instances.

    Accéder à la page "Groupes d'instances"

  2. Cliquez sur Créer un groupe d'instances pour définir un nouveau groupe d'instances.

  3. Sélectionnez Nouveau groupe d'instances géré (sans état).

  4. Dans le champ Nom, saisissez autoscaling-web-app-group.

  5. Pour Modèle d'instance, sélectionnez autoscaling-web-app-template.

  6. Pour Emplacement, sélectionnez Plusieurs zones.

  7. Dans le champ Region (Région), sélectionnez us-central1.

  8. Pour Zones, sélectionnez les zones suivantes dans la liste déroulante :

    • us-central1-b
    • us-central1-c
    • us-central1-f
  9. Configurez l'autoscaling pour le groupe d'instances :

    1. Dans le champ Mode autoscaling, sélectionnez Activé : ajouter et supprimer des instances dans le groupe.
    2. Définissez le nombre minimal d'instances sur 3.

    3. Définissez le nombre maximal d'instances sur 6.

    4. Définissez la Période d'initialisation sur 120 secondes.

    5. Sous Métriques d'autoscaling, sélectionnez Utilisation du processeur comme type de métrique. Pour en savoir plus sur les métriques d'autoscaling, consultez la page Règle d'autoscaling.

    6. Définissez le paramètre Objectif d'utilisation du processeur sur 60.

    7. Cliquez sur Done (OK).

  10. Sous Autoréparation, sélectionnez Aucune vérification d'état dans la liste déroulante Vérification de l'état.

  11. Cliquez sur Create (Créer). Cette action vous redirige vers la page Groupes d'instances.

  12. Pour vérifier que les instances sont en cours d'exécution, procédez comme suit :

    1. Sur la page Groupes d'instances de la console Google Cloud, cliquez sur autoscaling-web-app-group pour afficher les instances de ce groupe.
    2. Sous Adresse IP externe, cliquez sur une adresse IP pour connecter cette instance. Un nouvel onglet de navigation s'ouvre, affichant l'application Web de démonstration :

      Application Web de démonstration qui répertorie les détails de l'instance et comporte des boutons d'action.

      Lorsque vous avez terminé, fermez l'onglet de l'application Web de démonstration.

Observer l'autoscaling

Pour en savoir plus sur les comportements de l'autoscaling, consultez la documentation sur la présentation des décisions d'autoscaling.

Surveiller l'autoscaling

Le groupe d'instances que vous avez créé utilise des règles d'autoscaling basées sur l'utilisation du processeur. Cela signifie que l'autoscaler augmente ou réduit la taille du groupe au besoin, afin de maintenir le pourcentage d'utilisation du processeur cible à 60 %.

Pour contrôler la taille et l'utilisation moyenne du processeur de votre groupe d'instances, utilisez les graphiques d'évolution automatique dans la console Google Cloud :

  1. Sur la page Groupes d'instances du groupe autoscaling-web-app-group, cliquez sur l'onglet Surveillance.
  2. Vous pouvez surveiller l'autoscaling à partir du graphique Taille du groupe. Le graphique affiche Instances, ce qui correspond au nombre d'instances de VM dans le groupe au fil du temps.
  3. Facultatif : Pour surveiller la capacité avec évolutivité automatique par rapport à l'utilisation, consultez le graphique Utilisation de l'autoscaler (processeur). Le graphique affiche Utilisation, ce qui correspond à l'utilisation totale du processeur par les instances de VM du groupe, et Capacité, ce qui correspond à l'utilisation cumulée du processeur du groupe (utilisation du processeur cible multipliée par le nombre d'instances de VM).

    L'autoscaling s'efforce de faire correspondre la capacité et l'utilisation en modifiant le nombre d'instances, lorsque cela est possible.

Laissez cette fenêtre ouverte.

Simuler un scaling horizontal

On parle de "scaling horizontal" lorsque l'utilisation moyenne du processeur du groupe d'instances est considérablement plus grande que la valeur cible. Pendant cette opération, l'autoscaler augmente progressivement la taille du groupe d'instances de sorte que l'utilisation du processeur diminue jusqu'à atteindre la valeur cible d'utilisation du processeur ou jusqu'à ce que la taille du groupe d'instances soit égale au nombre maximal d'instances, qui a été défini sur 6.

Pour déclencher un scaling horizontal, augmentez l'utilisation du processeur pour vos instances :

  1. Dans Google Cloud Console, ouvrez Cloud Shell.

    Ouvrir Cloud Shell

    Cloud Shell s'ouvre au bas de la console Google Cloud. L'initialisation de la session peut prendre quelques secondes.

  2. Créez une variable bash locale pour l'ID de projet :

    export PROJECT_ID=[PROJECT_ID]
    

    PROJECT_ID correspond à l'ID du projet en cours, et est affiché sur chaque ligne dans Cloud Shell :

    user@cloudshell:~ ([PROJECT_ID])$
    
  3. Exécutez le script bash ci-dessous. Ce script entraîne une augmentation de charge de l'application Web de démonstration, ce qui entraîne l'augmentation de l'utilisation du processeur. Après quelques minutes, l'utilisation du processeur dépasse la valeur cible ce qui déclenche l'augmentation de la taille du groupe d'instances par l'autoscaling.

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating high load for instance $NAME"
      curl -q -s "http://$IP/startLoad" >/dev/null --retry 2
    done
    
  4. Ouvrez l'onglet Surveillance dans la console Google Cloud.

    Après quelques minutes, l'onglet Surveillance indique que l' Utilisation du processeur a augmenté. L'autoscaling augmente alors la Capacité en augmentant le nombre d'Instances.

    Notez également que six instances sont désormais répertoriées sous l'onglet Aperçu.

Gardez les deux fenêtres ouvertes.

Simuler un scaling vertical

On parle de "scaling vertical" lorsque l'utilisation moyenne du processeur du groupe d'instances est considérablement plus faible que la valeur cible. Pendant cette opération, l'autoscaler diminue progressivement la taille du groupe d'instances de sorte que l'utilisation du processeur augmente jusqu'à atteindre l'utilisation cible du processeur ou jusqu'à ce que la taille du groupe d'instances soit égale au nombre minimal d'instances, qui a été défini sur 3.

Pour déclencher un scaling vertical, réduisez l'utilisation du processeur pour vos instances :

  1. Exécutez le script bash ci-dessous. Ce script entraîne une diminution de charge de l'application Web de démonstration, ce qui entraîne une diminution de l'utilisation du processeur. Après quelques minutes, l'utilisation du processeur devient inférieure à la valeur cible, entraînant la diminution de la taille du groupe d'instances par l'autoscaler.

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating low load for instance $NAME"
      curl -q -s "http://$IP/stopLoad" >/dev/null --retry 2
    done
    
  2. Ouvrez l'onglet Surveillance dans la console Google Cloud.

    Après quelques minutes, l'onglet Surveillance affiche la diminution de l'utilisation du processeur. Après la période de stabilisation, qui permet de vérifier que la charge est considérablement moins importante, l'autoscaling diminue la capacité en réduisant le nombre d'Instances :

    Notez également que seulement trois instances sont répertoriées sous l'onglet Aperçu.

Fermez les deux fenêtres lorsque vous avez terminé.

Nettoyer

Une fois le tutoriel terminé, vous pouvez procéder au nettoyage des ressources que vous avez créées afin qu'elles ne soient plus comptabilisées dans votre quota et qu'elles ne vous soient plus facturées. Dans les sections suivantes, nous allons voir comment supprimer ou désactiver ces ressources.

Si vous avez créé un projet distinct pour ce tutoriel, supprimez-le entièrement. Ou bien, si le projet contient des ressources que vous souhaitez conserver, ne supprimez que les ressources créées spécifiquement pour ce tutoriel.

Supprimer le projet

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer des ressources spécifiques

Supprimer le groupe d'instances

  1. Dans Google Cloud Console, accédez à la page Groupes d'instances.

    Accéder à la page "Groupes d'instances"

  2. Cochez la case correspondant à votre groupe d'instances autoscaling-web-app-group.
  3. Pour supprimer le groupe d'instances, cliquez sur  Supprimer.

Supprimer le modèle d'instance

  1. Dans Google Cloud Console, accédez à la page Modèles d'instances.

    Accéder à la page Modèles d'instances

  2. Cochez la case en regard de autoscaling-web-app-template.

  3. Cliquez sur  Supprimer en haut de la page. Dans la nouvelle fenêtre, cliquez sur Supprimer pour confirmer la suppression.

Supprimer la règle de pare-feu

  1. Dans Google Cloud Console, accédez à la page Règles de pare-feu.

    Accéder aux règles de pare-feu

  2. Cochez la case située en regard de la règle de pare-feu intitulée default-allow-http.

  3. Cliquez sur  Supprimer en haut de la page. Dans la nouvelle fenêtre, cliquez sur Supprimer pour confirmer la suppression.

Étapes suivantes