web-dev-qa-db-fra.com

Comment puis-je garder Google Cloud Functions au chaud?

Je sais que cela manque le point d'utiliser les fonctions cloud en premier lieu, mais dans mon cas spécifique, j'utilise les fonctions cloud parce que c'est la seule façon de connecter Next.js avec Firebase Hosting. Je n'ai pas besoin de le rendre rentable, etc.

Cela dit, les temps de démarrage à froid pour les fonctions cloud sont tout simplement insupportables et ne sont pas prêts pour la production, avec une moyenne d'environ 10 à 15 SECONDES pour mon passe-partout.

J'ai certainement regardé cette vidéo de Google ( https://www.youtube.com/watch?v=IOXrwFqR6kY ) qui explique comment réduire le temps de démarrage à froid. En un mot: 1) Couper les dépendances, 2) Essai et erreur pour les versions des dépendances pour le cache sur le réseau de Google, 3) Chargement paresseux.

Mais bon, 1) il n'y a que tant de dépendances que je peux couper. 2) Comment puis-je savoir quelle version est la plus mise en cache? 3) Il n'y a que tant de dépendances que je peux charger paresseusement.

Une autre façon est d'éviter le démarrage à froid tous ensemble. Quelle est la bonne façon ou le piratage que je peux essentiellement garder ma (seule et unique) fonction cloud au chaud?

13
harrisonlo

Avec tous les fournisseurs de calcul "sans serveur", il y aura toujours une forme de coût de démarrage à froid que vous ne pourrez pas éliminer. Même si vous êtes en mesure de conserver une seule instance en vie en la testant, le système peut faire tourner un certain nombre d'autres instances pour gérer la charge actuelle. Ces nouvelles instances auront un coût de démarrage à froid. Ensuite, lorsque la charge diminue, les instances inutiles sont arrêtées.

Il existe des moyens de minimiser vos coûts de démarrage à froid, comme vous l'avez découvert, mais ces coûts ne peuvent pas être éliminés.

Si vous avez absolument besoin de serveurs chauds pour gérer les demandes 24/7, vous devez gérer vos propres serveurs qui fonctionnent 24/7 (et payer le coût de ces serveurs fonctionnant 24/7). Comme vous pouvez le voir, l'avantage du sans serveur est que vous ne gérez pas ou ne faites pas évoluer vos propres serveurs, et vous ne payez que pour ce que vous utilisez, mais vous avez des coûts de démarrage à froid imprévisibles associés à votre projet. Voilà le compromis.

12
Doug Stevenson

Vous n'êtes pas le premier à demander ;-)

La réponse consiste à configurer un service distant pour appeler périodiquement votre fonction afin que l'instance unique | unique reste active.

Cela ne ressort pas clairement de votre question, mais je suppose que votre fonction fournit un point de terminaison HTTP. Dans ce cas, recherchez un service de contrôle de santé ou cron qui peut être configuré pour effectuer un appel HTTP toutes les x secondes | minutes et pointez-le sur votre fonction.

Vous devrez peut-être jongler avec les horaires pour trouver la période des Boucle d'or - pas trop souvent que vous gaspillez vos efforts, pas trop souvent qu'elle meurt - mais c'est ce que d'autres ont fait.

2
DazWilkin

Vous pouvez le déclencher via un travail cron comme expliqué ici: https://cloud.google.com/scheduler/docs/creating

1
afuggini