Stateful et stateless

Copier l'URL

L'état d'une application (ou de tout autre élément) correspond à sa condition ou sa qualité à un moment donné. Une application ou une autre ressource est dite « stateful » ou « stateless » selon la durée pendant laquelle l'état des interactions avec celle-ci est enregistré ainsi que de la manière dont ces informations doivent être stockées. Une application stateful conserve l'état et le contexte de ses interactions avec des utilisateurs, des systèmes ou des composants. L'état est enregistré sur une solution de stockage durable afin que l'application survive à un redémarrage. Les applications stateful enregistrent les informations anciennes et actuelles, tandis que les applications stateless ne stockent aucune donnée.

Transformer les applications avec Red Hat OpenShift

Les applications et processus stateful stockent, enregistrent et réutilisent des informations et processus qui existent déjà sur Internet pour conserver leur état. Dans le cas des applications stateful, le serveur garde une trace de l'état de chaque session ou interaction et conserve des informations sur les demandes de l'utilisateur. Il est possible de réutiliser ces sessions indéfiniment, comme sur les plateformes bancaires en ligne et dans les messageries. Les transactions précédentes sont prises en compte et peuvent affecter la transaction actuelle. C'est pour cette raison que les applications stateful utilisent les mêmes serveurs chaque fois qu'elles traitent la demande d'un utilisateur.

Si une transaction stateful est interrompue, le contexte et l'historique sont stockés, permettant ainsi de la reprendre là où elle en était. Les applications stateful gardent une trace de divers éléments, comme l'adresse URL de la page, les paramètres appliqués et l'activité récente. On pourrait comparer les transactions stateful à une conversation continue et régulière avec la même personne.

Cas d'utilisation des applications stateful

  • Applications axées sur les utilisateurs : les applications centrées sur l'expérience utilisateur, comme les réseaux sociaux et les sites de commerce électronique, gardent en mémoire des informations sur la session de l'utilisateur connecté, notamment ses préférences ou les articles mis dans le panier.
  • Systèmes IoT : un système IoT (Internet des objets) fonctionne grâce à l'envoi, à la réception et à l'analyse continus de données selon une boucle de rétroaction. En exploitant les données historiques ou en temps réel, les appareils (comme les thermostats connectés) réagissent à l'évolution de l'état.
  • Entraînement de modèles d'IA/AA : le processus d'entraînement de modèles d'intelligence artificielle et d'apprentissage automatique (IA/AA) est basé sur l'analyse de données, qui sont donc mémorisées. En conservant l'état d'apprentissage et de mémoire, il est possible d'optimiser le fonctionnement de ces modèles.

Découvrir le lien entre les applications stateful et les modèles d'AA avec la RAG

Ressources Red Hat

Les processus ou applications stateless ne conservent pas d'informations sur les interactions de l'utilisateur. Aucune donnée n'est stockée et aucune référence concernant les transactions passées n'est enregistrée. Chaque transaction est effectuée comme s'il s'agissait de la première fois. Les applications stateless fournissent un service ou une fonction et utilisent un réseau de diffusion de contenus, le Web ou des serveurs d'impression pour traiter ces demandes à court terme.

Par exemple, une recherche effectuée en ligne pour répondre à une question quelconque est une transaction stateless. L'utilisateur saisit sa question dans le moteur de recherche et appuie sur Entrée. Si sa transaction est accidentellement interrompue ou fermée, il doit en commencer une nouvelle. On pourrait comparer les transactions stateless à des distributeurs automatiques, qui donnent une réponse à une seule demande.

Cas d'utilisation des applications stateless

  • API REST : une interface de programmation d'application (API) REST transfère une représentation de l'état de la ressource au demandeur ou point de terminaison. Chaque demande envoyée à l'API est distincte et le serveur ne stocke pas d'informations sur les demandes passées.
  • Microservices : les microservices permettent à chaque fonction principale d'une application d'exister indépendamment. Ils sont utiles aussi bien aux applications stateless que stateful.
  • Architectures serverless : les architectures serverless sont conçues pour réagir à des événements dans une situation isolée. Elles n'enregistrent pas le contexte des actions précédentes et, par conséquent, n'ont pas besoin de conserver leur état. Elles sont idéales pour les applications asynchrones et stateless qui peuvent être lancées instantanément.

Découvrir comment les API simplifient le fonctionnement des applications

Les applications stateful conservent des informations sur l'état actuel des interactions de l'utilisateur, tandis que les applications stateless traitent chaque demande comme une transaction isolée et indépendante. Il existe d'autres différences plus spécifiques entre les deux :

Conservation de l'état

Les applications stateful stockent des informations sur chaque interaction, la plupart du temps dans une base de données ou dans la mémoire distribuée. Les applications stateless ne stockent aucune information sur les interactions : chaque transaction repart de zéro.

Dépendance entre les sessions

Dans les applications stateful, chaque demande exploite les données ou le contexte issus d'interactions ou de transactions passées. Les applications stateless ont des sessions plus indépendantes : chaque demande est nouvelle, ce qui implique que l'application doit déjà disposer de toutes les informations nécessaires pour la traiter.

Dépendance au stockage

Les applications stateful reposent sur un système de stockage persistant (par exemple, une base de données ou un système de fichiers distribué). Elles nécessitent une solution de stockage sous-jacente et une méthode de synchronisation des données entre les différentes instances.

Utilisation des ressources

Souvent, les applications stateless utilisent moins de ressources en raison de l'absence de stockage et de gestion des données de session. De leur côté, les applications stateful ont besoin de ressources de mémoire et de traitement plus importantes pour gérer et conserver ces informations.

Évolutivité

Généralement, les applications stateless sont plus évolutives, car chaque demande est indépendante et gérable par un serveur disponible en passant par un équilibrage de charge. Les instances des applications stateful reposent sur un couplage fort, ce qui les rend plus difficiles à faire évoluer. Pour gérer les états, l'équilibrage de charge et les sessions, on peut avoir besoin d'instances plus spécifiques ou de pods dans Kubernetes.

Tolérance aux pannes

Les applications stateless peuvent davantage tolérer les pannes, car la perte d'un serveur n'a aucun effet sur les sessions utilisateur. Dans le cas des applications stateful, la perte d'un serveur peut faire disparaître les données d'une session. Des mesures supplémentaires sont donc nécessaires, telles que la réplication de session ou la mise en cluster.

Complexité du développement

Il peut être plus simple de développer et d'assurer le bon fonctionnement des applications stateless, puisqu'il n'y a pas besoin de gérer l'état entre plusieurs demandes. À l'inverse, les applications stateful impliquent une gestion minutieuse des données de session et de l'état.

La majorité des applications que nous utilisons au quotidien sont stateful. Toutefois, les technologies évoluent et les microservices ainsi que les conteneurs facilitent le développement et le déploiement d'applications dans le cloud.

À l'instar du cloud computing et des microservices, la conteneurisation des applications, stateful ou stateless, se propage. Les conteneurs sont des unités de code pour les applications empaquetées, avec leurs bibliothèques et leurs dépendances. Cette approche simplifie le déplacement des applications et leur permet de s'exécuter dans tous types d'environnements (poste de travail, infrastructure traditionnelle ou cloud).

À l'origine, les conteneurs étaient conçus pour être stateless, ce qui convenait parfaitement à leur nature portable et flexible. Cependant, avec l'usage de plus en plus répandu des conteneurs, les équipes de développement se sont mises à conteneuriser les applications stateful existantes (c'est-à-dire à les repenser et à les remettre en paquets pour les exécuter à partir de conteneurs). Ces applications ont ainsi profité de la flexibilité et de la rapidité des conteneurs, sans cesser de stocker des informations et du contexte.

Les applications stateful et stateless se ressemblent donc parfois énormément. Par exemple, certaines applications stateless, qui ne nécessitent aucun stockage à long terme, permettent quand même au serveur de garder une trace des demandes en provenance d'un même client à l'aide de cookies.

Au vu de l'usage croissant des conteneurs, plusieurs entreprises ont commencé à proposer des solutions de gestion pour les conteneurs stateful et stateless, basées sur le stockage des données, Kubernetes et des objets StatefulSet. Aujourd'hui, la majeure partie du stockage en conteneurs est stateful et la question n'est plus de savoir s'il faut utiliser des conteneurs stateful, mais dans quel cas les employer.

Chez Red Hat, nous avons tout prévu pour les applications stateful et stateless. Que ce soit pour orchestrer des conteneurs stateful sur notre plateforme d'applications de cloud hybride, Red Hat® OpenShift®, ou pour créer un environnement unifié afin de développer des applications avec la solution Red Hat Application Foundations, nous proposons un service d'assistance primé ainsi qu'un vaste écosystème de partenaires.

Red Hat OpenShift fournit une plateforme d'applications de cloud hybride unifiée et sécurisée qui permet aux entreprises d'accélérer l'innovation, en les aidant à moderniser le développement et le déploiement d'applications, ainsi que les processus d'exploitation. Cette solution propose des fonctionnalités adaptées aux applications stateful, comme les objets StatefulSet pour Kubernetes. Avec Red Hat OpenShift Data Foundation, vous pouvez gérer les données stateful avec une solution de stockage logiciel capable de provisionner des volumes persistants. Red Hat OpenShift intègre également les applications stateful dans les workflows DevOps.Red Hat OpenShift Pipelines est une solution conçue pour exécuter chaque étape d'un pipeline CI/CD. Elle prend en charge les tests et le déploiement de charges de travail stateful comme stateless.

La solution Red Hat Application Foundations permet la composition et l'orchestration des services, la connexion des applications et la transformation des données, la diffusion en temps réel des messages, la capture des modifications de données et la gestion des API, sur la base d'une plateforme et d'une chaîne d'outils cloud-native qui assurent la prise en charge de tous les processus du développement d'applications modernes.

Utilisées ensemble, Red Hat OpenShift et Red Hat Application Foundations constituent la plateforme idéale pour développer et distribuer des applications cloud-native. Quels que soient vos besoins, nos produits permettent de concevoir des solutions, d'améliorer la productivité des équipes de développement et d'encourager l'innovation, selon le modèle Open Source.

Découvrir comment Red Hat OpenShift prend en charge les applications

Hub

Le blog officiel de Red Hat

Découvrez les dernières informations concernant notre écosystème de clients, partenaires et communautés.

Tous les essais de produits Red Hat

Profitez de nos essais gratuits de produits Red Hat pour renforcer votre expérience pratique, préparer une certification ou évaluer l'adéquation d'un produit avec les besoins de votre entreprise.

En savoir plus

La migration d'applications, qu'est-ce que c'est ?

La migration d'applications est un processus capable d'améliorer les charges de travail en déplaçant une application logicielle d'un environnement à un autre.

Une architecture d'application, ou architecture applicative, qu'est-ce que c'est ?

Une architecture d'application, ou architecture applicative, décrit les modèles et les techniques utilisés pour concevoir et créer une application bien structurée.

Un kit de développement SDK, qu'est-ce que c'est ?

Un SDK est un ensemble d'outils fourni avec une plateforme matérielle, un système d'exploitation ou un langage de programmation.

Développement et distribution d'applications : ressources recommandées

Articles associés