Qu'est-ce que l'architecture serverless ?
L'architecture sans serveur est un modèle de cloud computing où les développeurs créent et exécutent des applications sans gérer de serveurs traditionnels. Les serveurs existent toujours, mais ils sont dans le cloud, où les fournisseurs de cloud gèrent automatiquement l'infrastructure, la mise à l'échelle et l'allocation des ressources.
Pour les applications sans serveur, les développeurs écrivent généralement du code sous forme de fonctions isolées qui s'exécutent en réponse à des événements ou des déclencheurs, et les fournisseurs de cloud ne facturent que les ressources de calcul réellement utilisées. Cette approche simplifie le développement d'applications, réduit les frais d'exploitation et permet une évolutivité rapide, ce qui la rend idéale pour les microservices et les applications pilotées par les événements.
Cette page couvre :
- Comment fonctionne l'architecture sans serveur
- Concepts clés de l'architecture sans serveur
- Quand utiliser l'architecture serverless
- Avantages de l'architecture serverless
- Limitations de l'architecture serverless
- Outils d'informatique sans serveur
- Conclusion
Comment fonctionne l'architecture sans serveur
L'architecture sans serveur abstrait la gestion des serveurs des développeurs et s'appuie sur les fournisseurs de cloud pour gérer l'infrastructure sous-jacente. Voici comment cela fonctionne généralement :
1. Création de fonction : Les développeurs écrivent du code sous forme de fonctions individuelles, chaque fonction étant conçue pour effectuer une tâche ou un service spécifique. L'architecture serverless est parfois appelée Function-as-a-Service ou Fonction-comme-un-service.
2. Déploiement de fonction : Les fonctions sont empaquetées et déployées sur une plateforme serverless fournie par un fournisseur de services cloud. Les plateformes serverless les plus courantes sont AWS Lambda, Azure Functions et Google Cloud Functions.
3. Déclencheurs d'événements : Les fonctions sont configurées pour s'exécuter en réponse à des événements ou déclencheurs spécifiques. Les événements peuvent inclure des requêtes HTTP (par exemple, API Gateway), des modifications de données (par exemple, mises à jour de base de données), des minuteurs, des téléchargements de fichiers ou autre chose. Le fournisseur cloud gère les sources d'événements et invoque automatiquement les fonctions associées.
4. Mise à l'échelle automatique : Au fur et à mesure que les événements se produisent, la plateforme « serverless » adapte automatiquement les ressources sous-jacentes pour répondre à la charge de travail. Si votre fonction subit un pic soudain de requêtes, le fournisseur de services cloud mettra à disposition davantage de ressources.
5. Exécution : Lorsqu'un événement déclenche une fonction, la plateforme serverless initialise un conteneur ou un environnement d'exécution pour cette fonction. Le code de la fonction est exécuté et peut accéder aux ressources ou aux données nécessaires. Une fois que la fonction a terminé sa tâche, le conteneur peut rester "chaud" pendant une courte période, permettant aux requêtes ultérieures de s'exécuter plus rapidement.
6. Facturation : La facturation est basée sur le temps d'exécution réel et les ressources utilisées par les fonctions. Vous êtes facturé par exécution et pour les ressources de calcul, telles que le processeur et la mémoire, qui sont allouées pendant l'exécution.
7. Apatridie : Les fonctions serverless sont généralement sans état, ce qui signifie qu'elles ne conservent pas d'informations entre les invocations. Tout état ou donnée requis doit être stocké en externe, souvent dans une base de données ou un service de stockage.
8. Journaux et surveillance : Les plateformes serverless fournissent généralement des outils intégrés de journalisation et de surveillance, permettant aux développeurs de suivre les performances et de résoudre les problèmes de leurs fonctions.
Concepts clés de l'architecture sans serveur
Parce que le développement serverless est une alternative au développement traditionnel, vous devez vous familiariser avec les termes et concepts suivants pour bien comprendre comment concevoir, déployer et gérer des applications serverless :
Invocation : Un événement qui déclenche l'exécution d'une fonction serverless. Des exemples incluent une requête HTTP, une mise à jour de base de données ou un minuteur programmé.
Durée : La durée d'exécution d'une fonction serverless, qui est un facteur dans le calcul du coût d'exécution.
Démarrage à froid : L'exécution initiale d'une fonction serverless, où le fournisseur de cloud provisionne les ressources et configure l'environnement d'exécution. Les démarrages à froid introduisent une latence supplémentaire par rapport aux démarrages à chaud.
Démarrage à chaud : Exécutions ultérieures d'une fonction sans serveur lorsque l'environnement d'exécution est déjà préparé, ce qui entraîne des temps de réponse plus rapides par rapport aux démarrages à froid.
Limite de concurrence : Le nombre maximum d'exécutions simultanées de fonctions autorisées par la plateforme serverless. Cette limite peut avoir un impact sur la capacité à gérer les requêtes ou événements concurrents.
Délai d'attente : La durée maximale d'exécution autorisée pour une fonction sans serveur. Si une fonction dépasse cette limite, elle est terminée de force et son résultat peut ne pas être renvoyé.
Source de l'événement : L'origine d'un événement qui déclenche une fonction serverless. Les sources d'événements incluent les buckets Amazon S3, les passerelles API, les files d'attente de messages et les mises à jour de bases de données.
Apatridie : Les fonctions serverless sont généralement sans état, ce qui signifie qu'elles ne conservent pas de données entre les invocations. Tout état nécessaire doit être stocké extérieurement dans des bases de données ou des services de stockage.
Allocation des ressources La spécification des ressources de calcul telles que le CPU ou la mémoire pour une fonction serverless. Ces ressources sont souvent choisies par les développeurs lors de la définition de la fonction.
Mise à l'échelle automatique : L'ajustement automatique des ressources sans serveur par le fournisseur de cloud pour s'adapter aux charges de travail variables et garantir des performances optimales.
Base de données sans serveur: Les bases de données serverless sont des bases de données à mise à l'échelle élastique qui n'exposent pas l'infrastructure sur laquelle elles fonctionnent Couchbase Capella™ DBaaS est un exemple de base de données entièrement gérée et sans serveur.
Quand utiliser l'architecture serverless
Bien que l'architecture sans serveur soit polyvalente, ce n'est pas le meilleur choix pour tous les cas d'utilisation – les applications avec des tâches de longue durée, des exigences de calcul élevées ou des charges de travail constantes bénéficient souvent davantage des architectures traditionnelles basées sur des serveurs. Assurez-vous de prendre en compte les exigences spécifiques et les forces uniques du sans serveur lorsque vous décidez si c'est le bon choix pour votre application.
Cas d'utilisation de l'architecture sans serveur
Parmi les cas d'utilisation les plus courants et les mieux adaptés à l'architecture serverless, on trouve :
Applications web et mobiles : Gérer les backends d'applications web et mobiles, servir du contenu, traiter les requêtes des utilisateurs et gérer l'authentification des utilisateurs.
API : Mettez à l'échelle automatiquement vos API RESTful et GraphQL et intégrez-les facilement à d'autres services.
IdO Gérez efficacement le traitement et l'analyse des données provenant des appareils IoT qui déclenchent des événements avec des données de capteurs.
Traitements de données en temps réel Traitez les flux de données en temps réel tels que l'analyse de flux de clics, le traitement des journaux et l'analyse pilotée par les événements.
Traitement par lots : Exécutez des tâches par lots périodiques ou à la demande comme l'ETL (extraction, transformation, chargement) de données, la génération de rapports et le nettoyage de données.
Tâches de fichiers et de stockage de données : Interagir avec les services de stockage cloud pour gérer les téléversements, les téléchargements et la manipulation de données de fichiers.
Authentification et autorisation de l'utilisateur Les services de gestion des identités et des accès (IAM) pour l'authentification et l'autorisation des utilisateurs conviennent parfaitement aux fonctions sans serveur.
Services de notification : Envoyer des notifications et des alertes comme des courriels, des SMS ou des notifications push en réponse à des événements ou déclencheurs spécifiques.
Chatbots et assistants virtuels : Créez des interfaces conversationnelles où les fonctions traitent les requêtes en langage naturel et génèrent des réponses.
Traitement de données et d'images : Effectuez des tâches telles que le redimensionnement d'images, la conversion de formats et la transformation de données qui nécessitent une interaction minimale de l'utilisateur.
Tâches planifiées : Automatiser les tâches périodiques telles que les sauvegardes de données, la génération de rapports et la maintenance de bases de données.
Microservices : Créer et gérer des microservices individuels au sein d'une application plus large, permettant une mise à l'échelle facile et un déploiement indépendant.
Services de sécurité et de conformité : Implémentez des fonctions liées à la sécurité telles que la détection d'intrusion, la surveillance et l'audit de conformité.
Sans serveur contre conteneurs
À première vue, l'architecture serverless est parfois confondue avec l'architecture de conteneurs ou avec l'architecture de microservices, car elle partage certaines similitudes avec chacune d'entre elles. En fait, serverless est très distinct des deux, et nous expliquerons ce qui les différencie.
Ce qu'il faut faire conteneurs Ce qu'ils ont en commun, c'est que tous deux permettent aux développeurs de déployer du code d'application en abstraiant l'environnement hôte. Cependant, l'une des principales différences est que le serverless abstrait entièrement la gestion des serveurs, tandis que les conteneurs permettent aux développeurs de gérer leurs propres environnements de serveur avec plus de contrôle sur l'infrastructure.
En tant que forme légère de virtualisation, les conteneurs regroupent les applications et leurs dépendances dans des environnements isolés et cohérents qui s'exécutent comme des instances indépendantes sur un système d'exploitation partagé. Les conteneurs offrent un moyen de garantir que les applications fonctionnent de manière cohérente dans différents environnements, du développement à la production, et ils proposent une méthode standardisée pour empaqueter et distribuer des logiciels. Les conteneurs sont généralement persistants et peuvent inclure plusieurs processus au sein d'un même conteneur.
En bref, le calcul sans serveur abstrait la gestion des serveurs et est idéal pour les tâches pilotées par des événements et de courte durée, tandis que les conteneurs offrent plus de contrôle sur l'environnement du serveur et conviennent mieux aux processus de longue durée et aux charges de travail cohérentes. Le choix entre les deux dépend des exigences spécifiques de votre application et de votre niveau de contrôle sur l'infrastructure sous-jacente. Dans certains cas, une combinaison des deux technologies est utilisée au sein d'une même application pour différents composants.
Serverless vs. microservices
Microservices sont un modèle d'architecture logicielle qui structure une application comme une collection de petits services déployables indépendamment qui communiquent via des API et collaborent pour fournir une fonctionnalité complexe et modulaire. La confusion entre les microservices et l'architecture serverless naît souvent de leur emphase commune sur la modularité et la scalabilité. La frontière est encore plus floue car ils sont souvent utilisés ensemble, les fonctions serverless agissant comme des microservices au sein d'une application plus large basée sur les microservices.
Malgré leurs similitudes, le serverless et les microservices possèdent des caractéristiques uniques dans les domaines suivants qui les distinguent :
Gestion d'infrastructure
- Microservices – les développeurs conservent le contrôle de l'orchestration des serveurs et des conteneurs.
- Sans serveur – la gestion des serveurs est entièrement abstraite, et les développeurs ne traitent pas de l'infrastructure sous-jacente.
Modèle d'exécution
- Microservices – s'exécutent en continu sur des instances de serveur dédiées.
- Sans serveur – les fonctions s'exécutent en réponse à des événements ou des déclencheurs. Cette distinction peut entraîner une différence dans les temps de réponse, car les applications serverless peuvent connaître des démarrages à froid.
Modèle de coûts
- Microservices – vous oblige à provisionner et à maintenir des ressources serveur. Cela peut entraîner des coûts continus même pendant les périodes de faible utilisation.
- Sans serveur – suit un modèle de paiement à l'utilisation basé sur l'exécution réelle des fonctions. Cela peut être plus rentable pour les charges de travail sporadiques.
Modularité
- Microservices – an application is divided into small independent services.
- Sans serveur – developers write code as individual units of functionality.
Évolutivité
- Microservices – allow for independent scaling of each service.
- Sans serveur – automatically scales individual functions.
Avantages de l'architecture serverless
Serverless architecture offers a wide range of benefits that make it an attractive choice for many applications and use cases. The most compelling advantages are:
Automatic scaling: Serverless architecture platforms automatically scale resources up or down based on the incoming workload. This ensures that your application can handle varying levels of traffic, providing high availability and performance without manual intervention.
Le rapport coût-efficacité : With serverless, you only pay for the actual compute resources used during function execution. There are no costs associated with idle time, making it cost-effective, particularly for workloads with unpredictable or sporadic traffic.
Reduced operational overhead: Serverless abstracts server management tasks, allowing developers to focus on code rather than infrastructure maintenance. This reduces the need for DevOps efforts and simplifies deployment and scaling.
Faster development: Serverless accelerates the development process by eliminating the need to manage servers and infrastructure. Developers can quickly iterate and deploy code, resulting in faster time-to-market for applications.
Resilience: Serverless functions are typically stateless, promoting a design that relies on external storage services or databases for data persistence. This can lead to more resilient and fault-tolerant applications.
Built-in logging and monitoring: Serverless platforms often provide built-in tools for monitoring and logging, enabling developers to track performance, troubleshoot issues, and gain insights into application behavior.
Reduced vendor lock-in: Many functions can be designed to be relatively vendor-agnostic, making it easier to migrate them or to integrate services from different cloud providers. This is not always the case, as you’ll see in the next section on serverless limitations.
Haute disponibilité : Serverless platforms are designed to be highly available, with redundancy and failover mechanisms built in. This helps ensure that your application remains accessible and responsive even in the face of failures.
Energy and resource efficiency: The automatic scaling and resource management of serverless platforms can lead to improved energy efficiency and resource utilization, reducing environmental impact.
Limitations de l'architecture serverless
While serverless architecture offers many advantages, it also has its limitations. Certain characteristics of serverless may manifest as benefits or challenges. When evaluating serverless for a specific application, consider your requirements or constraints related to the following:
Cold starts: Serverless functions may experience a delay when the function is first invoked because the cloud provider needs to initialize a new execution environment. This latency can be problematic for applications that require consistently fast response times.
Resource constraints: Serverless platforms impose resource constraints, such as memory and execution time limits. These constraints can be limiting for compute-intensive tasks or applications that require long-running processes.
Apatridie : Serverless functions are typically stateless, meaning they don’t retain data between invocations. While this can help improve resilience (as explained above), using external databases or storage services for data persistence can add complexity to some applications.
Verrouillage des fournisseurs : While many functions can be designed to be relatively vendor-agnostic, your application may have some platform-specific configurations and integrations that make it challenging to move to a different cloud provider.
Complex debugging: Debugging and troubleshooting serverless applications can be more challenging in a serverless architecture because the distributed nature of functions and the lack of direct server access can make it difficult to identify and resolve issues.
Limited local testing: Developing and testing serverless functions locally can be challenging because local testing may not fully replicate the execution environment in the cloud. Developers often need to deploy functions to the serverless platform for thorough testing.
Outils d'informatique sans serveur
There are numerous serverless computing platforms and tools that enable developers to build, deploy, and manage serverless applications using their favorite coding languages and cloud service providers. Here are some of the most popular ones:
Platforms
Amazon’s AWS Lambda supports various programming languages and integrates seamlessly with other AWS services. AWS also provides an API gateway for creating RESTful APIs and triggering Lambda functions.
Microsoft’s Azure Functions is a serverless offering within the Azure cloud ecosystem. It supports multiple languages and offers integration with Azure services, making it a strong choice for Windows-based applications.
Google’s Cloud Functions supports multiple programming languages and integrates well with other Google Cloud services, making it suitable for building applications within the Google Cloud ecosystem.
IBM Cloud Functions is based on the Apache OpenWhisk framework and allows you to integrate with IBM Cloud services using various languages.
Alibaba Cloud Function Compute allows developers to build applications in the Alibaba Cloud ecosystem and integrate with other Alibaba Cloud services using multiple languages.
Tools
Netlify is a platform best known for hosting static websites, but it also offers serverless functions for building backend services, APIs, and workflows.
OpenFaaS is an open source serverless framework for container-based functions. It allows you to build and run serverless functions using Docker containers.
Fission is another open source Kubernetes-native serverless framework that supports multiple languages and is designed for easy deployment on Kubernetes clusters.
Conclusion
Serverless architecture is popular for web and mobile applications, IoT, real-time data processing, and other common use cases because it allows developers to focus on writing code rather than managing servers. The management responsibility is offloaded to cloud providers like AWS Lambda, Azure Functions, or Google Cloud Functions so they can handle the underlying infrastructure and scale resources automatically to accommodate changes in workload. Serverless is not ideal for all use cases, however, and certain workloads or long-running tasks may be better suited for traditional server-based approaches.
To learn more about serverless architecture and related technologies, check out these resources:
Serverless Architecture With Cloud Computing
Couchbase 2023 Predictions – Edge Computing, Serverless, and More
Capella App Services (BaaS)
Visitez notre Hub de Concepts to learn about other topics related to databases.