Utiliser un 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.

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 simultanées.

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 l'outil de ligne de commande gcloud ou de Google Cloud Console.

Console

Pour définir une limite maximale d'instances pour une nouvelle fonction, procédez comme suit :

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

  2. Cliquez sur Create function.

  3. Renseignez les champs obligatoires de votre fonction.

  4. Cliquez sur Paramètres d'exécution, de compilation et de connexion.

  5. Dans le champ Nombre maximal d'instances de la section Autoscaling, saisissez la valeur souhaitée. La valeur par défaut suggérée est de 3000.

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 de l'instance. Par exemple, 3000.

La limite maximale d'instances est définie.

Supprimer les limites maximales d'instances

Vous pouvez supprimer une limite maximale d'instances à l'aide de l'outil de ligne de commande gcloud ou de Google Cloud Console.

Console

Pour supprimer une limite maximale d'instances, 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.

  3. Cliquez sur Modifier.

  4. Cliquez sur Paramètres d'exécution, de compilation et de connexion.

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

gcloud

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

gcloud functions deploy FUNCTION_NAME --clear-max-instances

La limite maximale d'instances est supprimée.

Limites et bonnes pratiques

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

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

Si aucune limite --max-instances n'est spécifiée, Cloud Functions est conçu pour favoriser 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 est illimité, à moins que vous n'ayez configuré une telle limite.

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.

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.

Instances inactives et minimisation des démarrages à froid

Pour minimiser l'impact des démarrages à froid, Cloud Functions conserve souvent une réserve d'instances inactives pour votre fonction. Ces instances sont prêtes à traiter les requêtes en cas d'augmentation soudaine du trafic.

Par exemple, lorsqu'une instance a fini de traiter une requête, elle peut rester inactive pendant un certain temps au cas où une autre requête entrante devrait être traitée. Une instance inactive peut également conserver des ressources, telles que des connexions de base de données ouvertes, pour faire face à ce genre de situation. Ces instances inactives sont comptabilisées dans la limite globale d'instances maximales pour une version donnée de votre fonction. Ces instances inactives ne vous sont pas facturées.

Supprimer les limites maximales d'instances

La définition du nombre maximal d'instances sur 0 entraîne la suppression des limites maximales d'instances existantes. La définition d'une valeur 0 ne suspend pas votre fonction.