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 Run Functions. Définir le nombre maximal d'instances permet de contrôler les coûts et d'éviter que les ressources en aval ne soient submergées par le trafic.

Dans Cloud Run 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 Run Functions offre la simultanéité comme 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 utiliser à la fois la simultanéité et plusieurs instances afin d'optimiser ses performances. Pour en savoir plus sur la configuration de la simultanéité, consultez Simultanéité des fonctions Cloud Run.

Définir 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. Cloud Run Functions nécessite une limite maximale d'instances définie.

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 Run Functions définit une valeur par défaut de 100.

Pour définir une limite maximale d'instances :

Console

  1. Accéder à la page de présentation de Cloud Run Functions

  2. Cliquez sur Créer une fonction.

  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).

Limites et bonnes pratiques

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

Choisir une valeur d'instance maximale

La valeur optimale pour le paramètre "Nombre maximal d'instances" dépend des caractéristiques de votre fonction, y compris la durée d'exécution d'une invocation, la fréquence d'invocation moyenne et maximale attendue, ainsi que la tolérance de votre application aux échecs d'appel. En règle générale, commencez avec une valeur d'instances maximale de 3, puis surveillez les échecs d'appel et ajustez la valeur d'instances maximale si nécessaire.

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 Run 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.

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 Run 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 Run Functions pour répondre à votre demande de trafic. En règle générale, Cloud Run 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 Run 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 Run Functions migre 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.