Les limites du serverless : quand ne faut-il pas l’utiliser ?

Le serverless computing représente une évolution majeure dans le monde du développement et du déploiement d’applications. Cette approche, qui permet de s’affranchir de la gestion de l’infrastructure sous-jacente, offre des avantages indéniables en termes de flexibilité et de scalabilité. Toutefois, comme toute technologie, elle n’est pas universellement adaptée à tous les scénarios. Malgré l’enthousiasme généré par cette architecture, il existe des situations où le serverless peut se révéler contre-productif, voire problématique. Il est essentiel de comprendre ses limites intrinsèques pour faire des choix éclairés concernant l’architecture de vos applications.

La promesse du serverless – déployer du code sans se soucier de l’infrastructure – séduit naturellement les équipes de développement et les directions informatiques. Cependant, cette abstraction s’accompagne de contraintes techniques, économiques et organisationnelles qui peuvent transformer un avantage apparent en inconvénient majeur dans certains contextes. Déterminer si le serverless convient à votre projet nécessite une analyse approfondie des caractéristiques de votre application, de vos besoins en performance, et de vos contraintes budgétaires.

Les contraintes techniques du serverless qui limitent son adoption

Malgré ses nombreux avantages, le serverless présente plusieurs limitations techniques qui peuvent freiner son adoption dans certains contextes. Ces contraintes, souvent inhérentes au modèle même du serverless, constituent des points de vigilance importants lors de la conception d’architectures applicatives.

Serverless

Les limites de performances avec le démarrage à froid

Le démarrage à froid (cold start) représente l’un des défis majeurs du serverless. Ce phénomène se produit lorsqu’une fonction est invoquée après une période d’inactivité, nécessitant alors l’initialisation d’un nouvel environnement d’exécution. Selon une étude de New Relic, les démarrages à froid peuvent ajouter entre 100 millisecondes et plusieurs secondes au temps de réponse d’une fonction, en fonction du langage utilisé et de la complexité du code.

Les fonctions JavaScript sur AWS Lambda subissent généralement des délais de démarrage à froid entre 300 et 500 millisecondes, tandis que des fonctions équivalentes écrites en Java ou .NET peuvent nécessiter jusqu’à 10 secondes pour démarrer. Ce délai peut être particulièrement problématique pour les applications nécessitant des réponses rapides et prévisibles, comme les API synchrones ou les services interactifs.

Les développeurs ont mis en place diverses stratégies pour atténuer ce problème, comme les « fonctions de préchauffage » qui maintiennent un environnement d’exécution actif. Cependant, ces solutions contournent le principe fondamental du serverless – ne payer que pour ce qu’on utilise – et introduisent une complexité supplémentaire dans l’architecture.

Le démarrage à froid reste le talon d’Achille du serverless pour les applications sensibles à la latence. Cette contrainte technique peut compromettre l’expérience utilisateur malgré tous les avantages offerts par ailleurs par cette architecture.

Les restrictions de durée d’exécution des fonctions

La plupart des plateformes serverless imposent des limites strictes quant à la durée d’exécution des fonctions. Par exemple, AWS Lambda restreint l’exécution à un maximum de 15 minutes, Google Cloud Functions à 9 minutes, et Azure Functions à 10 minutes en mode de consommation. Ces contraintes, bien que suffisantes pour de nombreux cas d’usage, deviennent problématiques pour les traitements de longue durée.

Les tâches comme le traitement vidéo à grande échelle, l’analyse de données volumineuses ou certaines simulations scientifiques se heurtent rapidement à ces limitations temporelles. La décomposition de ces processus en sous-tâches plus petites constitue une solution possible, mais elle augmente considérablement la complexité du système et introduit des points de défaillance supplémentaires.

Cette contrainte oblige les architectes à concevoir des systèmes de coordination plus élaborés, avec des mécanismes de reprise sur erreur et de suivi d’état entre les différentes exécutions. Ces mécanismes supplémentaires peuvent annuler les bénéfices initiaux de simplicité apportés par le modèle serverless.

Les difficultés de débogage et de monitoring

Le débogage d’applications serverless présente des défis particuliers en raison de la nature éphémère et distribuée de l’environnement d’exécution. L’absence d’accès direct au serveur complique l’identification des problèmes de performance ou des erreurs d’exécution. Selon une enquête de l’Université de Berkeley, 80% des développeurs serverless citent les difficultés de débogage comme l’un des principaux obstacles à l’adoption.

Les outils traditionnels de monitoring et de profilage peuvent s’avérer inadaptés ou insuffisants dans un contexte serverless. La visibilité limitée sur l’infrastructure sous-jacente rend difficile la détection de goulots d’étranglement ou l’analyse des causes racines de dysfonctionnements. Cette opacité peut devenir particulièrement problématique lors du déploiement d’applications critiques.

Les fournisseurs cloud proposent des services de journalisation et de monitoring spécifiques aux environnements serverless, comme AWS CloudWatch ou Google Cloud Monitoring. Cependant, ces outils présentent souvent des limitations en termes de granularité des données collectées et de facilité d’utilisation par rapport aux solutions de monitoring traditionnelles. De plus, ils peuvent engendrer des coûts supplémentaires non négligeables, particulièrement pour les applications générant un volume important de logs.

Les problèmes de vendor lock-in avec les solutions cloud

L’adoption d’une architecture serverless implique généralement une forte dépendance vis-à-vis du fournisseur cloud choisi. Chaque plateforme propose sa propre implémentation du modèle serverless, avec des spécificités techniques, des limitations différentes et des services annexes propriétaires. Cette diversité complique considérablement la migration d’un fournisseur à un autre.

Les différences subtiles dans la façon dont les environnements d’exécution sont configurés, dont les événements sont traités ou dont les ressources externes sont accessibles peuvent nécessiter une réécriture significative du code lors d’un changement de fournisseur. Cette situation crée un risque de vendor lock-in où le coût de migration devient prohibitif, limitant la liberté stratégique de l’entreprise.

Bien que des initiatives comme le Serverless Framework tentent d’offrir une couche d’abstraction pour faciliter la portabilité entre fournisseurs, elles ne peuvent éliminer complètement les spécificités de chaque plateforme. Les fonctionnalités avancées, souvent les plus intéressantes, restent généralement spécifiques à chaque fournisseur et difficiles à reproduire ailleurs.

Les cas d’usage inadaptés au serverless

Certains types d’applications et de charges de travail se prêtent mal à l’architecture serverless, soit en raison des contraintes techniques évoquées précédemment, soit parce que leurs caractéristiques intrinsèques limitent les bénéfices potentiels de cette approche.

Les applications nécessitant des temps de réponse garantis

Les applications exigeant des performances prévisibles et constantes peuvent souffrir de la variabilité inhérente aux environnements serverless. Les secteurs comme la finance algorithmique, les jeux en ligne multijoueurs ou certaines applications industrielles nécessitent des temps de réponse garantis que le serverless ne peut assurer de manière fiable.

Prenons l’exemple des systèmes de trading haute fréquence, où chaque milliseconde compte : la variabilité introduite par les démarrages à froid peut entraîner des pertes financières significatives. De même, dans les jeux en temps réel, une latence imprévisible dégrade l’expérience utilisateur et peut rendre le jeu injouable.

Les applications critiques dans des domaines comme la santé ou les systèmes industriels de contrôle nécessitent également des garanties de performance que le modèle serverless actuel ne peut offrir de manière satisfaisante. Dans ces contextes, des architectures plus traditionnelles, avec des ressources dédiées et optimisées, restent souvent préférables.

Les systèmes avec un état (stateful) complexe à maintenir

Par conception, les fonctions serverless sont généralement sans état (stateless), ce qui signifie qu’elles ne conservent pas d’informations entre les exécutions. Cette caractéristique, bien qu’avantageuse pour la scalabilité, pose des défis considérables pour les applications nécessitant le maintien d’un état complexe.

Les applications comme les systèmes de réservation, les jeux persistants ou les outils de collaboration en temps réel reposent sur un état partagé et constamment mis à jour. Dans un environnement serverless, cet état doit être externalisé vers des services de stockage comme des bases de données ou des caches distribués, ce qui peut introduire de la latence et des coûts supplémentaires.

La gestion de la concurrence devient également plus complexe dans les systèmes stateful déployés en serverless. Les problèmes de verrouillage, de cohérence des données et de gestion des transactions distribuées nécessitent des mécanismes sophistiqués qui peuvent annuler les avantages de simplicité initialement recherchés avec le serverless.

Les applications à charge constante et prévisible

L’un des principaux arguments en faveur du serverless est sa capacité à s’adapter automatiquement aux variations de charge, permettant de ne payer que pour les ressources effectivement utilisées. Cependant, ce modèle perd de son intérêt pour les applications dont la charge est constante et prévisible.

Pour une application fonctionnant en continu avec un trafic stable, comme un système de surveillance ou une application de back-office utilisée pendant les heures de bureau, le modèle économique du serverless peut s’avérer moins avantageux que des instances réservées ou des services dédiés. Une analyse de Corey Quinn, expert en optimisation des coûts AWS, montre que pour des charges constantes dépassant 15-20% d’utilisation, les instances EC2 réservées deviennent généralement plus économiques que Lambda.

De plus, les applications à charge constante bénéficient rarement de l’autoscaling proposé par le serverless, ce qui réduit l’un de ses avantages majeurs. Dans ces cas, des architectures plus traditionnelles, potentiellement avec de l’auto-scaling planifié, peuvent offrir un meilleur rapport coût-performance.

Les workloads de calcul intensif et de longue durée

Les fonctions serverless sont conçues pour des exécutions relativement courtes et légères. Elles ne conviennent généralement pas aux workloads nécessitant d’importantes ressources de calcul sur des périodes prolongées, comme le rendu 3D, l’entraînement de modèles d’apprentissage automatique ou l’analyse génomique.

Ces types de traitements se heurtent à plusieurs limitations du modèle serverless :

  • Les contraintes de durée d’exécution mentionnées précédemment (généralement 15 minutes maximum)
  • Les limites de mémoire et de puissance de calcul allouées à chaque instance de fonction
  • L’absence de support natif pour les accélérateurs matériels comme les GPU dans de nombreuses plateformes serverless
  • Un coût potentiellement élevé pour des exécutions longues et intensives

Pour ces cas d’usage, des services spécialisés comme AWS Batch, Google Cloud Dataflow ou des clusters Kubernetes dédiés offrent généralement une meilleure adéquation aux besoins, tant en termes de performances que de coût.

Les défis économiques du serverless

Si le modèle serverless promet des économies grâce à sa facturation à l’usage, cette promesse peut s’avérer trompeuse dans certains scénarios. Les implications financières du serverless doivent être soigneusement évaluées pour éviter les mauvaises surprises.

Quand le modèle de facturation à l’usage devient désavantageux

Le modèle de facturation à l’usage, bien qu’attrayant pour les charges de travail sporadiques, peut devenir coûteux pour les applications à forte utilisation. Une analyse de Datadog sur plus de 1,5 million de fonctions Lambda en production montre que près de 30% d’entre elles génèrent des coûts supérieurs à ce qu’aurait coûté une infrastructure traditionnelle équivalente.

Le point de bascule dépend de nombreux facteurs, mais généralement, lorsque l’utilisation dépasse 60-70% de capacité en continu, les architectures traditionnelles deviennent économiquement plus avantageuses. Cette situation est particulièrement vraie pour les applications ayant des besoins constants en ressources computationnelles.

Un autre facteur à considérer est le surprovisionnement inhérent au modèle serverless. Pour répondre efficacement aux pics de demande, les plateformes serverless allouent généralement plus de ressources que nécessaire, et ces ressources sont facturées à l’utilisateur. Bien que ce surprovisionnement soit transparent, il peut significativement impacter les coûts finaux.

Le coût caché des appels entre services multiples

Les architectures serverless encouragent la décomposition des applications en fonctions hautement spécialisées et granulaires. Cette approche, bien que favorisant la modularité et la maintenance, peut engendrer une multiplication des appels entre services, chacun pouvant être facturé.

Dans les environnements cloud, les communications entre services génèrent souvent des coûts à plusieurs niveaux :

  • Le coût d’invocation de chaque fonction
  • Les frais liés au volume de données échangées
  • Le temps d’exécution supplémentaire dû aux latences de communication
  • Les coûts des services intermédiaires comme les files d’attente ou les bus d’événements

Une application monolithique exécutant toutes ses opérations dans un même processus évite ces coûts de communication. En comparaison, une architecture serverless très décomposée peut voir ses coûts opérationnels augmenter significativement à mesure que le trafic s’intensifie, simplement en raison de cette communication inter-services.

Les implications financières du transfert de données (data egress)

Les coûts de transfert de données sortantes (data egress) constituent souvent une source de dépenses sous-estimée dans les architectures serverless. Les fournisseurs cloud facturent généralement le transfert de données sortant de leur réseau, avec des tarifs pouvant varier significativement selon les zones géographiques et les volumes.

Pour une application serverless typique qui traite et transfère des données entre différentes régions ou vers des clients externes, ces coûts peuvent rapidement s’accumuler. Par exemple, AWS facture entre 0,09$ et 0,15$ par gigaoctet de données sortantes, selon la région. Pour une application traitant plusieurs téraoctets de données par mois, cette facturation peut représenter une part importante du budget opérationnel.

La situation devient particulièrement critique dans les architectures multi-cloud ou hybrides, où les données doivent régulièrement traverser les frontières des différents fournisseurs cloud. Les stratégies de mise en cache et d’optimisation du transfert de données deviennent alors cruciales pour maîtriser les coûts.

La difficulté à prévoir et budgétiser les dépenses

La nature élastique du serverless, bien qu’avantageuse pour la scalabilité, complique considérablement la prévision budgétaire. L’utilisation des ressources peut varier de manière imprévisible en fonction du comportement des utilisateurs, des pics de trafic saisonniers, ou des modifications de fonctionnalités.

Les entreprises se retrouvent souvent confrontées à des factures inattendues suite à des pics d’utilisation non anticipés ou à des boucles infinies dans le code qui déclenchent des milliers d’exécutions. Selon une étude de CloudZero, plus de 60% des organisations utilisant le serverless ont déjà fait face à des dépassements budgétaires significatifs non planifiés.

La granularité de la facturation, bien que précise, génère une complexité accrue dans l’analyse et la prévision des coûts. Chaque composant (temps d’exécution, mémoire, stockage, transfert de données) étant facturé séparément, il devient difficile d’établir un modèle de coût précis, particulièrement pour les applications complexes.

Les enjeux de sécurité et de conformité

L’adoption du serverless soulève des préoccupations spécifiques en matière de sécurité et de conformité, nécessitant une approche différente de celle des architectures traditionnelles.

La surface d’attaque élargie avec l’architecture distribuée

La nature distribuée des applications serverless multiplie les points d’entrée potentiels pour les attaquants. Chaque fonction représente une surface d’attaque potentielle, et la multiplication des microservices augmente mécaniquement le nombre de vulnérabilités possibles.

La sécurisation de ces architectures nécessite une vigilance accrue sur plusieurs aspects :

  • La validation des entrées pour chaque fonction individuelle
  • La gestion des droits d’accès granulaires entre services
  • La protection contre les attaques par déni de service distribué (DDoS)
  • La sécurisation des communications entre les différents composants

Les défis de conformité réglementaire (RGPD, secteur financier)

Le respect des réglementations comme le RGPD ou les normes sectorielles spécifiques peut s’avérer complexe dans un environnement serverless. La localisation précise des données, leur durée de conservation et leur traçabilité deviennent plus difficiles à garantir lorsque l’infrastructure est entièrement gérée par un tiers.

Les entreprises du secteur financier, soumises à des réglementations strictes comme PSD2 ou Bâle III, doivent porter une attention particulière à la conformité de leurs architectures serverless. La démonstration de la conformité nécessite souvent des mécanismes d’audit et de traçabilité sophistiqués, plus complexes à mettre en œuvre dans un environnement serverless.

La gestion complexifiée des secrets et des accès

La gestion des secrets (clés API, certificats, mots de passe) dans un environnement serverless présente des défis spécifiques. L’absence d’infrastructure dédiée complique le stockage sécurisé et la rotation des secrets, nécessitant l’utilisation de services spécialisés comme AWS Secrets Manager ou HashiCorp Vault.

La multiplication des fonctions et des services augmente également la complexité de la gestion des accès. Chaque fonction nécessite des permissions précises, et le principe du moindre privilège devient plus difficile à mettre en œuvre efficacement.

Les risques liés à la dépendance aux services tiers

La dépendance accrue aux services tiers dans les architectures serverless introduit des risques supplémentaires. Une interruption de service chez le fournisseur cloud peut avoir des répercussions immédiates sur l’ensemble de l’application, sans possibilité de repli sur une infrastructure propre.

De plus, l’utilisation de services managés multiples augmente la complexité de la gestion des incidents et de la récupération après sinistre. La capacité à diagnostiquer et résoudre les problèmes dépend fortement de la transparence et de la réactivité du fournisseur cloud.

Les alternatives au serverless selon les contextes

Face aux limitations du serverless, plusieurs alternatives peuvent être envisagées selon les besoins spécifiques du projet.

Les conteneurs pour plus de contrôle et de portabilité

Les conteneurs offrent un compromis intéressant entre la flexibilité du serverless et le contrôle des infrastructures traditionnelles. Avec des technologies comme Docker et Kubernetes, les équipes peuvent maintenir une plus grande maîtrise de leur environnement d’exécution tout en bénéficiant d’une certaine portabilité.

Les conteneurs permettent notamment de s’affranchir des limitations de durée d’exécution du serverless et offrent une meilleure prévisibilité des performances. Ils facilitent également la migration entre différents environnements et fournisseurs cloud.

Les architectures hybrides combinant serverless et traditionnel

Une approche hybride, combinant judicieusement serverless et infrastructures traditionnelles, permet souvent d’obtenir le meilleur des deux mondes. Les fonctions serverless peuvent être utilisées pour les traitements événementiels et les pics de charge, tandis que les workloads stables ou critiques sont hébergés sur des serveurs dédiés.

Cette approche permet de maximiser les avantages du serverless tout en minimisant ses inconvénients, mais nécessite une expertise approfondie pour définir la bonne répartition des charges.

Les solutions PaaS modernes comme compromis

Les plateformes PaaS modernes comme Heroku, Platform.sh ou Google App Engine proposent un niveau d’abstraction intermédiaire. Elles offrent une expérience développeur similaire au serverless tout en garantissant une meilleure prévisibilité des performances et des coûts.

Ces solutions facilitent le déploiement et la gestion des applications tout en évitant certains écueils du serverless comme les démarrages à froid ou les limitations de durée d’exécution.

L’auto-scaling sur des architectures classiques

L’implémentation de mécanismes d’auto-scaling sur des infrastructures traditionnelles peut offrir une alternative viable au serverless. Les orchestrateurs modernes comme Kubernetes permettent une gestion fine de l’élasticité, avec des règles de scaling personnalisées selon les besoins spécifiques de l’application.

Cette approche nécessite plus d’expertise technique et d’effort de maintenance, mais offre un contrôle total sur l’infrastructure et les performances, tout en permettant une optimisation fine des coûts basée sur des métriques personnalisées.