Trois conseils pour démarrer avec le serverless et le FaaS
Pour développer une fonction serverless, un changement d’état d’esprit est nécessaire chez les développeurs. Ces trois conseils vous seront précieux pour créer une fonction avec Google Cloud Functions.
Le serverless - également connu sous le nom de function-as-a-service (FaaS) - est un modèle d’architecture applicative qui suscite de plus en plus d’intérêt chez les développeurs. Mais, comme c'est le cas de nombreuses technologies émergentes, le FaaS présente aussi une courbe d'apprentissage qu’il convient de prendre en compte.
Google Cloud Functions est un service FaaS qui permet de créer de puissantes fonctions serverless (Node.js ou Python) avec l’ambition de réduire les coûts d'infrastructure, tout en minimisant les excès de capacités. Toutefois, amorcer une transition en douceur vers le développement de FaaS n’est pas simple. Ces quelques conseils devraient vous aider à mettre le pied à l’étrier et démarrer sur Google Cloud.
Invocation directe ou événementielle
Le développeur doit d'abord décider quel type de fonction Google Cloud il souhaite invoquer : une fonction HTTP ou une fonction en background. L'exécution de chacune est finalement la même ; cependant, elles sont déclenchées différemment. Le choix dépend en fin de compte des objectifs et besoins de l’entreprise. Il est généralement admis que les fonctions HTTP sont plus polyvalentes, mais n'ont pas l'élégance ni l'intégration à la gestion d’événements de la plateforme Google Cloud Platform qu’ont en revanche les fonctions background.
- Fonctions HTTP
Une fonction HTTP est un type de fonction Google Cloud qui est invoquée via une requête HTTP classique. Avec le support des types de méthodes par exemple, invoquer une fonction HTTP est aussi simple que de faire une requête web de base. L'un des principaux avantages est l’approche à la demande ; ce qui permet une exécution immédiate.
- Fonctions en background
Alors que les plateformes FaaS traditionnelles sont généralement présentées comme des fonctions HTTP à la demande, les fonctions en background sont invoquées "en arrière-plan" en réponse à un événement. Par exemple, certains événements peuvent exécuter une fonction, comme la connexion d'un utilisateur à une application Firebase ou le chargement d'un nouveau fichier dans Google Cloud Storage. Actuellement, les services proposant des événements pouvant invoquer une telle fonction sont Google Cloud Storage, Google Cloud Pub/Sub et Firebase.
Une fonction = une action
Contrairement à une application classique, le nombre d’actions réalisées par une fonction est inversement proportionnel à son utilité. Le modèle de programmation orientée objet encourage les blocs de code minimalistes, mais pouvant être testés et retestés. Les développeurs devraient avoir à l’esprit la même approche avec Google Cloud. Pour une action, il ne devrait y avoir qu’une seule fonction correspondante.
Par exemple, plutôt que de commander à une seule fonction la création d’une entrée utilisateur dans une base de données, l’envoi d'un email et la mise à jour du CRM, il est préférable de séparer ces trois fonctions distinctes, toutes appelées selon des besoins particuliers. L’application gagne en flexibilité, devient plus intuitive, et avec un minimum d'effets secondaires.
La vitesse avant tout
L'objectif ultime est donc de créer des fonctions cloud très ciblées et qui s'exécutent rapidement. Google facture principalement une fonction selon sa durée d'exécution. Une fonction est rapide ; elle devient abordable. Une fonction peut ainsi donner la priorité à la vitesse par rapport à la durée de calcul. Une fonction à plusieurs actions de longue durée peut ainsi épuiser rapidement un budget. Une série de fonctions - avec moins d’actions certes - , mais rapides, est de son côté plus rentable.
Les développeurs doivent également prendre en compte beaucoup de paramètres (du choix du langage à l’implémentation), afin de réduire au maximum le nombre de millisecondes qui pourraient alourdir la facture. Bien que ces optimisations soient spécifiques à chaque fonction, il est généralement recommandé de limiter les tâches longues, comme la récursivité, et de privilégier l'efficacité plutôt que la lisibilité lorsque cela est possible.