Contrôler le comportement du scaling

Le nombre maximal d'instances de Cloud Functions est une fonctionnalité qui vous permet de limiter le niveau de scaling de votre fonction en réponse aux requêtes entrantes.

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.

Cette caractéristique est généralement souhaitable, mais, dans certains cas, vous souhaiterez limiter le nombre total d'instances pouvant coexister à un moment donné. Par exemple, vous pouvez faire en sorte que votre fonction interagisse avec une base de données ne pouvant traiter qu'un certain nombre de connexions ouvertes simultanées.

Exploiter le nombre maximal d'instances

Vous pouvez définir le nombre maximal d'instances pour une fonction précise lors du déploiement. Chaque fonction peut posséder sa propre limite maximale d'instances. Les fonctions évoluent indépendamment les unes des autres.

Définir la limite maximale d'instances

Pour définir une limite maximale d'instances à l'aide de l'outil de ligne de commande gcloud, utilisez l'option --max-instances au moment du déploiement :

gcloud functions deploy FUNCTION_NAME --max-instances 10 FLAGS...

Dans l'exemple ci-dessus, FLAGS... fait référence aux autres options que vous transmettez lors du déploiement de votre fonction. Pour en savoir plus sur la commande deploy, reportez-vous à la documentation de référence sur gcloud functions deploy.

Vous pouvez également définir des instances maximales lors de la création de la fonction dans Cloud Console. Pour ce faire :

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

  2. Cliquez sur Créer une fonction.

  3. Renseignez les champs obligatoires de votre fonction.

  4. Développez les paramètres avancés en cliquant sur Plus.

  5. Dans la section Nombre maximum d'instances de fonction, saisissez la valeur souhaitée.

Supprimer la limite maximale d'instances

Si vous souhaitez supprimer la limite définie pour votre fonction, vous pouvez utiliser l'option --clear-max-instances au moment du déploiement :

gcloud functions deploy FUNCTION_NAME --clear-max-instances

Vous pouvez également supprimer la limite maximale d'instances dans Cloud Console :

  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. Développez les paramètres avancés en cliquant sur Plus.

  5. Dans la section Nombre maximum d'instances de fonction, saisissez la valeur "0" ou laissez le champ vide.

Limites et bonnes pratiques

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

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 un tel scénario, Cloud Functions tente de traiter une nouvelle requête entrante pendant une courte période :

  • Si une instance termine le traitement de sa requête pendant cette période, elle peut commencer à traiter la nouvelle requête entrante.
  • Dans le cas contraire, la requête échoue et un code d'état de la réponse 429 Too Many Requests est renvoyé à l'appelant.

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, pendant la période suivant le déploiement de la nouvelle version, votre fonction peut comporter jusqu'à 10 instances au total (5 pour chaque version de la fonction). 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 la limite maximale d'instances

Vous pouvez définir le nombre maximal d'instances sur "0" pour supprimer les limites existantes. La définition de la valeur "0" ne suspend pas votre fonction.