Stateful et stateless

Copier l'URL

Les applications stateful enregistrent les informations anciennes et actuelles, tandis que les applications stateless ne stockent aucune donnée. 

cloud-native 8 conseils pour l'adoption d'applications cloud-native

Les applications et processus stateful permettent de stocker, d'enregistrer et de réutiliser des informations et processus qui existent déjà sur Internet. Dans le cas des applications stateful, le serveur garde une trace de l'état de chaque session utilisateur et conserve des informations sur les interactions et demandes de l'utilisateur. Il est possible de les réutiliser 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 reprendre la transaction où elle en était. Les applications stateful gardent une trace de divers éléments, comme l'adresse URL de la page, les paramètres de préférences et l'activité récente. On pourrait comparer les transactions stateful à une conversation continue et régulière avec la même personne.

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.

Découvrir le rôle des API dans les applications stateless

Ressources Red Hat

Les processus ou applications stateless ne conservent pas d'informations sur les interactions de l'utilisateur. Il n'existe aucune donnée stockée ni aucune référence concernant les transactions passées. 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. 

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 aussi d'autres différences plus spécifiques entre les deux :

  • Évolutivité : généralement, les applications stateless sont plus évolutives, car chaque demande est indépendante et gérable par un serveur disponible. De leur côté, les applications stateful nécessitent parfois des mécanismes plus complexes pour l'équilibrage de charge et la gestion des sessions.
  • 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. Par contre, 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.
  • 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.
  • Complexité du développement : il peut être plus simple de développer et d'assurer le bon fonctionnement d'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.

À 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 une application qui sont mises en paquets, avec leurs bibliothèques et leurs dépendances, afin de faciliter leur déplacement et leur exécution dans tous types d'environnements (poste de travail, infrastructure traditionnelle ou dans le 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 pour les conteneurs est stateful et la question n'est plus de savoir s'il faut utiliser des conteneurs stateful, mais dans quel cas les employer. 

Le choix de l'utilisation de conteneurs stateful ou stateless dépend du type d'application développée et de sa fonction. Pour obtenir des informations rapidement et temporairement, il vaut mieux opter pour des conteneurs stateless. En revanche, si l'application doit se baser sur les données issues de sessions précédentes, il faut privilégier les conteneurs stateful.

Chez Red Hat, nous avons tout prévu pour les conteneurs stateful et stateless. Que ce soit pour orchestrer des conteneurs stateful sur notre plateforme Kubernetes d'entreprise, Red Hat OpenShift, ou pour créer un environnement unifié afin de développer des applications avec la solution Red Hat Integration, 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. Elle offre également aux entreprises la possibilité de choisir où et comment exécuter leur plateforme d'applications.

La solution Red Hat Integration 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.

Découvrez comment l'ensemble de 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.

Lire l'article sur la conteneurisation des applications stateful dans le cloud

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

Red Hat OpenShift pour les ingénieurs de plateforme

Red Hat OpenShift offre aux ingénieurs de plateforme les outils nécessaires pour créer et gérer efficacement les plateformes de développement internes.

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.

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

Articles associés