Configurer le nombre maximal d'instances

Vous pouvez contrôler le comportement du scaling de votre fonction en définissant un nombre maximal d'instances Cloud Functions. La définition du nombre maximal d'instances permet de contrôler les coûts et d'éviter de surcharger les ressources en aval avec le trafic.

Dans Cloud Functions, le scaling s'effectue via la création d'instances de votre fonction. Comme chacune de ces instances ne peut traiter qu'une requête à la fois, des pics de requêtes importants peuvent entraîner la création de nombreuses instances.

Le scaling automatique est bénéfique dans la plupart des cas, mais il peut s'avérer préférable dans certaines situations de limiter le nombre total d'instances pouvant exister à un moment donné. Par exemple, votre fonction peut interagir avec une base de données ne pouvant traiter qu'un certain nombre de connexions ouvertes.

Cloud Functions (2nd gen) offre une simultanéité en tant que mécanisme de scaling supplémentaire. Une fonction configurée pour la simultanéité peut exécuter plusieurs requêtes simultanément sur une seule instance. Vous pouvez configurer une fonction pour qu'elle utilise à la fois plusieurs instances et la simultanéité pour optimiser ses performances. Pour en savoir plus sur la configuration de la simultanéité, consultez la page Simultanéité Cloud Functions.

Définir et supprimer les limites maximales d'instances

Vous pouvez définir un nombre maximal d'instances pour une fonction lors du déploiement. Chaque fonction possède son propre paramètre maximal d'instances. Les fonctions évoluent indépendamment les unes des autres.

Définir les limites maximales d'instances

Vous pouvez définir une limite maximale d'instances à l'aide de Google Cloud CLI ou de la console Google Cloud. Si vous ne spécifiez pas de limite, Cloud Functions définit une valeur par défaut:

  • 3 000 pour les fonctions Cloud Functions (1st gen)
  • 100 pour les fonctions Cloud Functions (2nd gen)

Pour définir une limite maximale d'instances:

Console

  1. Accédez à la page Présentation de Cloud Functions.

  2. Cliquez sur Create function.

  3. Renseignez les champs obligatoires de votre fonction.

  4. Développez la section Environnement d'exécution, compilation… à la fin de la page, puis cliquez sur l'onglet Environnement d'exécution.

  5. Dans le champ Nombre maximal d'instances de la section Autoscaling, saisissez une valeur ou utilisez la valeur par défaut.

gcloud

Pour définir une limite maximale d'instances, exécutez la commande deploy avec l'option --max-instances :

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

Remplacez les éléments suivants :

  • FUNCTION_NAME : nom de la fonction.

  • MAX_INSTANCE_LIMIT: nombre à définir comme limite maximale d'instances, par exemple 3 000.

Supprimer les limites maximales d'instances

Vous pouvez supprimer une limite maximale d'instances pour une fonction Cloud Functions (1st gen) à l'aide de l'outil de ligne de commande gcloud ou de Google Cloud Console. Les fonctions Cloud Functions (2nd gen) nécessitent un nombre maximal d'instances défini.

Console

Pour supprimer une limite maximale d'instances pour une fonction Cloud Functions (1st gen), procédez comme suit:

  1. Accédez à la page Présentation de Cloud Functions.

  2. Cliquez sur une fonction existante pour accéder à ses détails. Vous pouvez consulter la limite maximale d'instances actuelle de la fonction dans l'onglet Détails.

  3. Cliquez sur Modifier.

  4. Développez la section Environnement d'exécution, compilation… à la fin de la page, puis cliquez sur l'onglet Environnement d'exécution.

  5. Dans le champ Nombre maximal d'instances de la section Autoscaling, saisissez 0.

gcloud

Pour supprimer une limite maximale d'instances pour une fonction Cloud Functions (1st gen), exécutez la commande deploy avec l'option --clear-max-instances :

gcloud functions deploy FUNCTION_NAME --clear-max-instances

Limites et bonnes pratiques

Cette section fournit des instructions concernant l'utilisation du nombre maximal d'instances.

Choisir une valeur maximale d'instance

La valeur optimale du paramètre de nombre maximal d'instances dépend des caractéristiques de votre fonction, y compris la durée d'exécution d'un appel, sa fréquence d'appel moyenne et maximale prévue, et la tolérance de votre application aux échecs d'appel. Une bonne règle de base est de commencer par une valeur maximale d'instances de 3, puis de surveiller les échecs d'appel et d'ajuster la valeur maximale des instances si nécessaire.

Se protéger contre les évolutions à la hausse excessives

Si aucune limite maximale d'instances n'est spécifiée, Cloud Functions (1st gen) privilégie le scaling à la hausse pour répondre à la demande plutôt que de limiter le débit. Cela signifie que le nombre d'instances simultanées dont peut disposer votre fonction de 1re génération est illimité, à moins que vous n'ayez configuré une telle limite. Cloud Functions (2nd gen) n'est pas compatible avec les fonctions sans limite maximale d'instances

Nous recommandons d'attribuer une limite --max-instances à toutes les fonctions qui envoient des requêtes à des services en aval soumis à un débit limité ou non évolutifs. Une limite maximale d'instances améliore la stabilité globale du système et permet d'éviter les niveaux de requête anormalement élevés.

Gestion des requêtes lorsque toutes les instances sont occupées

En temps normal, votre fonction évolue en créant des instances permettant de gérer la charge de trafic entrant. Néanmoins, si vous avez défini une limite maximale d'instances, il est possible que le nombre d'instances soit insuffisant pour répondre à cette charge de trafic entrant.

Dans ce scénario, Cloud Functions tente de diffuser une nouvelle requête entrante pendant 30 secondes maximum :

  • Si une instance termine le traitement de sa requête pendant cette période, elle peut commencer à traiter la nouvelle requête entrante.
  • Si aucune instance n'est disponible, la requête échoue.

Les requêtes envoyées à des fonctions HTTP surchargées échouent en renvoyant le code de réponse

  • 429 Too Many Requests si une valeur maximale d'instances est configurée ou
  • 500 Internal Server Error si aucune valeur maximale d'instances n'est configurée (fonctions de 1re génération uniquement).

Les événements destinés aux fonctions basées sur des événements sont automatiquement enregistrés jusqu'à ce que la capacité soit disponible.

Limites maximales d'instances dépassant la capacité de scaling de Cloud Functions

Lorsque vous spécifiez une limite maximale d'instances, vous définissez une limite supérieure. Si vous définissez une limite élevée, cela ne veut pas dire que votre fonction évoluera de façon à atteindre le nombre d'instances spécifié. Cela signifie simplement que le nombre d'instances qui coexistent à un moment donné ne doit pas dépasser la limite.

En outre, la définition d'une limite maximale d'instances peut affecter les stratégies de scaling utilisées par Cloud Functions pour répondre à votre demande de trafic. En règle générale, Cloud Functions accorde la priorité à la limite spécifiée plutôt que d'effectuer un scaling à la hausse qui pourrait la dépasser.

Gérer les pics de trafic

Dans certains cas (comme lors d'une augmentation soudaine du trafic), Cloud Functions peut créer, pendant une courte période, un nombre d'instances supérieur à la limite maximale spécifiée. Si votre fonction ne peut pas tolérer ce comportement temporaire, vous pouvez appliquer une marge de sécurité et définir un nombre maximal d'instances inférieur à celui que votre fonction peut accepter.

Déploiements

Lorsque vous déployez une nouvelle version de votre fonction, Cloud Functions migre progressivement le trafic de l'ancienne version vers la nouvelle. Comme le nombre maximal d'instances est défini pour chaque version de votre fonction de manière indépendante, vous pouvez dépasser temporairement la limite spécifiée pendant la période qui suit le déploiement.

Par exemple, une fonction peut avoir un nombre maximal d'instances défini sur 5. En temps normal, votre fonction évolue jusqu'à 5 instances pour gérer les requêtes. Lorsqu'une nouvelle version de la fonction est déployée, elle dispose de sa propre limite maximale d'instances de 5.

Les requêtes qui sont déjà traitées par la version précédente de la fonction ne sont pas interrompues lorsqu'une nouvelle version de la fonction est déployée. Ces requêtes poursuivent leur progression et les nouvelles requêtes entrantes sont gérées par la nouvelle version de la fonction déployée.

Ainsi, la fonction de l'exemple précédent peut comporter jusqu'à 10 instances au total (5 pour chaque version de votre fonction) pendant la période suivant le déploiement de la nouvelle version. La durée nécessaire à l'arrêt des instances de la fonction précédente dépend du temps nécessaire au traitement complet de toutes les requêtes actives. Vous devez donc également en tenir compte dans votre définition d'une limite maximale d'instances appropriée.

Supprimer les limites maximales d'instances

La définition du nombre maximal d'instances pour une fonction Cloud Functions (1re génération) sur 0 supprime la limite maximale d'instances existante de la fonction, mais ne suspend pas votre fonction.