Kubernetes

Applications avec état ou sans état sur Kubernetes

Applications avec état ou sans état sur Kubernetes
critère important à considérer avant d'exécuter une nouvelle application, en production, est l'architecture sous-jacente de l'application. Un terme souvent utilisé dans ce contexte est que l'application est « sans état » ou que l'application est « avec état ». Les deux types ont leurs propres avantages et inconvénients. Nous aurons un cluster Kubernetes en tête lorsque nous parlerons d'une application ou d'un service fonctionnant en production. Vous pouvez installer votre propre cluster Kubernetes sur le cloud ou le faire fonctionner en tant que nœud unique sur votre PC pour vous entraîner avec lui.

Commençons par une définition naïve de « l'apatridie », puis progressons lentement vers une vision plus rigoureuse et plus concrète du monde.

Une application sans état est une application qui ne dépend d'aucun stockage persistant. La seule chose dont votre cluster est responsable est le code et les autres contenus statiques qui y sont hébergés. C'est tout, pas de bases de données modifiées, pas d'écritures et pas de fichiers restants lorsque le pod est supprimé.

Une application avec état, en revanche, a plusieurs autres paramètres qu'elle est censée prendre en charge dans le cluster. Il existe des bases de données dynamiques qui, même lorsque l'application est hors ligne ou supprimée, persistent sur le disque. Sur un système distribué, comme Kubernetes, cela soulève plusieurs problèmes. Nous les examinerons en détail, mais clarifions d'abord quelques idées fausses.

Les services apatrides ne sont pas réellement « apatrides »

Qu'est-ce que ça veut dire quand on dit l'état d'un système? Eh bien, considérons l'exemple simple suivant d'une porte automatique.

La porte s'ouvre lorsque le capteur détecte que quelqu'un s'approche et se ferme une fois que le capteur n'obtient aucune entrée pertinente.

En pratique, votre application sans état est similaire à ce mécanisme ci-dessus. Il peut avoir beaucoup plus d'états que simplement fermé ou ouvert, et de nombreux types d'entrées différents, ce qui le rend plus complexe mais essentiellement le même.

Il peut résoudre des problèmes compliqués en recevant simplement une entrée et en effectuant des actions qui dépendent à la fois de l'entrée et de "l'état" dans lequel elle se trouve. Le nombre d'états possibles est prédéfini.

Donc l'apatridie est un terme impropre.

Les applications sans état, en pratique, peuvent également tricher un peu en sauvegardant des détails sur, par exemple, les sessions client sur le client lui-même (les cookies HTTP sont un excellent exemple) et ont toujours une belle apatride qui les ferait fonctionner parfaitement sur le cluster.

Par exemple, les détails de la session d'un client, tels que les produits enregistrés dans le panier et non vérifiés, peuvent tous être stockés sur le client et la prochaine fois qu'une session commence, ces détails pertinents sont également enregistrés.

Sur un cluster Kubernetes, une application sans état n'est associée à aucun stockage ou volume persistant. Du point de vue des opérations, c'est une excellente nouvelle. Différents pods à travers le cluster peuvent fonctionner indépendamment avec plusieurs requêtes qui leur parviennent simultanément. Si quelque chose ne va pas, vous pouvez simplement redémarrer l'application et elle reviendra à l'état initial avec peu de temps d'arrêt.

Services avec état et théorème CAP

Les services avec état, en revanche, devront s'inquiéter de beaucoup, beaucoup de cas extrêmes et de problèmes étranges. Un pod est accompagné d'au moins un volume et si les données de ce volume sont corrompues, cela persiste même si l'ensemble du cluster est redémarré.

Par exemple, si vous exécutez une base de données sur un cluster Kubernetes, tous les pods doivent avoir un volume local pour stocker la base de données. Toutes les données doivent être parfaitement synchronisées.

Donc, si quelqu'un modifie une entrée dans la base de données, et que cela a été fait sur le pod A, et qu'une demande de lecture arrive sur le pod B pour voir ces données modifiées, alors le pod B doit afficher ces dernières données ou vous donner un message d'erreur. C'est ce qu'on appelle la cohérence.

Cohérence, dans le cadre d'un cluster Kubernetes, signifie chaque lecture reçoit l'écriture la plus récente ou un message d'erreur.

Mais cela va à l'encontre disponibilité, l'une des raisons les plus importantes d'avoir un système distribué. La disponibilité implique que votre application fonctionne aussi près de la perfection que possible, 24 heures sur 24, avec le moins d'erreurs possible.

On peut affirmer que vous pouvez éviter tout cela si vous n'avez qu'une seule base de données centralisée qui est responsable de la gestion de tous les besoins de stockage persistants. Nous revenons maintenant à un point de défaillance unique, ce qui est un autre problème qu'un cluster Kubernetes est censé résoudre en premier lieu.

Vous devez disposer d'un moyen décentralisé de stocker des données persistantes dans un cluster. Communément appelé partitionnement de réseau. De plus, votre cluster doit pouvoir survivre à la défaillance des nœuds exécutant l'application avec état. Ceci est connu comme tolérance de partition.

Tout service (ou application) avec état, exécuté sur un cluster Kubernetes, doit avoir un équilibre entre ces trois paramètres. Dans l'industrie, il est connu sous le nom de théorème CAP où les compromis entre la cohérence et la disponibilité sont considérés en présence de partitionnement du réseau.

Autres références

Pour plus d'informations sur le théorème CAP, vous pouvez consulter cet excellent exposé donné par Bryan Cantrill, qui examine de plus près l'exécution de systèmes distribués en production.

Tutoriel OpenTTD
OpenTTD est l'un des jeux de simulation d'entreprise les plus populaires. Dans ce jeu, vous devez créer une merveilleuse entreprise de transport. Cepe...
SuperTuxKart pour Linux
SuperTuxKart est un excellent titre conçu pour vous apporter l'expérience Mario Kart gratuitement sur votre système Linux. C'est assez stimulant et am...
Tutoriel Bataille pour Wesnoth
The Battle for Wesnoth est l'un des jeux de stratégie open source les plus populaires auxquels vous pouvez jouer en ce moment. Non seulement ce jeu es...