Une comparaison de l'idempotence et de l'immuabilité

8

Beaucoup dans les DevOps appliquent la mentalité du bétail et non des animaux de compagnie en mettant en œuvre une infrastructure immuable et en se redéployant lorsque des changements sont nécessaires (au lieu de les modifier).

La gestion de la configuration a un principe similaire d' idempotence . Quels sont les avantages comparatifs, les similitudes et les inconvénients de l'immuabilité par rapport à l'impuissance et lequel est plus efficace? Peut-on les utiliser de manière synergique (par exemple, suppression et redéploiement périodiques de machines virtuelles ou de conteneurs Docker à l'aide de la gestion de la configuration?)

James Shewey
la source

Réponses:

9

Les deux termes sont très différents.

Commençons par immutability, ce qui signifie littéralement «pas de mutations» ou «pas de changements». Dans le sens DevOps, cela signifie qu'une fois que vous avez créé un artefact, qu'il s'agisse d'une image de conteneur, ou d'une image de machine virtuelle, ou peut-être d'un package à partir du code compilé - vous déclarez que vous ne le modifierez jamais. Souvent, si des modifications sont nécessaires, vous déclarez qu'une nouvelle version de "chose" sera créée à la place.

Le terme idempotencesignifie que lorsque les modifications sont appliquées plusieurs fois, l'état est muté (modifié) une seule fois . Premièrement, il suppose déjà que des changements vont être appliqués, ce qui signifie que vous ne pouvez pas avoir quelque chose à la fois immuable et que des actions idempotentes lui sont faites (aucune action ne lui est faite par contrat).

Dans l'utilisation des outils de gestion de configuration, idempotenceest utilisé dans certains cas lors de l'application du même changement plusieurs fois. Comme pour ajouter la ligne qui dit localhostau /etc/hostsfichier, vous n'avez pas vraiment besoin de plusieurs lignes de ce type et si une existe déjà, il est sûr de ne pas essayer d'ajouter à nouveau.

Est également idempotentun terme utilisé pour décrire les actions qui tentent de changer les choses, tandis que immutableest utilisé pour décrire les noms (objets) qui sont définis par rapport aux modifications qui leur sont apportées.


Pourquoi un immutableobjet est-il utile? Parce que lorsque vous le copiez, par exemple d'un environnement de développement vers qa vers la production. Vous en savez déjà beaucoup (mais pas tout) sur la manière dont il va se comporter. Dans de nombreux cas, les pièces qui fonctionnent seront cohérentes et les pièces cassées seront également cohérentes.

Pourquoi les idempotentactions sont-elles utiles? Parce que lorsque vous souhaitez modifier l'état d'un objet, dans de nombreux cas, il est utile de vérifier uniquement que la modification a été appliquée et d'appliquer les modifications au cas où cela serait nécessaire. Par exemple, lorsqu'un élément de configuration dans un fichier est manquant ou a la mauvaise valeur, il est utile de l'ajouter une seule fois ou de le modifier une seule fois tout en appliquant l'action plusieurs fois. Dans de nombreux autres cas, comme les fichiers journaux , vous ne voulez pas avoir d'actions idempotentes car vous voulez souvent ajouter une autre ligne chaque fois qu'un événement se produit.

Evgeny
la source
1
l'idempotence implique également la pesudo-toute-puissance en raison de sa nature répétitive. Si un utilisateur modifie quelque chose en dehors du système de gestion de la configuration, il sera probablement modifié en arrière (si le système de gestion de la configuration s'exécute en tant que root). Cela ne signifie donc pas seulement the state is not changed.que l'État reste tel que le système de gestion de la configuration le prévoit . Par conséquent, les systèmes idempotents à sens unique et les systèmes immuables sont similaires
James Shewey
Vous décrivez une propriété des systèmes de gestion de configuration, peut-être une «théorie des promesses». Mais ce n'est pas ce que l'idempotence signifie, l'idempotence n'est qu'un outil dans l'arsenal du système de gestion de configuration. Une fois que vous commencez à changer d'état, à muter des choses dans un sens ou dans l'autre, cela ne peut en aucun cas être similaire à l'immuabilité. C'est une contradiction.
Evgeny
@JamesShewey la toute-puissance signifie un pouvoir illimité, je doute que l'idempotence signifie tout ce qui y est lié.
Evgeny
onmi = plusieurs | idem = répété | puissance = puissance. Ils partagent tous les deux la même racine indiquant quelque chose (une configuration) effectuée. Ainsi, en faisant la même chose encore et encore, si un changement est tenté, il est annulé par le système de gestion de la configuration, ce qui en fait sa puissance omni. (et je suis sûr que cela pourrait être piraté en désactivant, par exemple, le service de gestion de la configuration, donc pas vraiment onmi). Cette propriété peut être utilisée pour définir un état immuable.
James Shewey
1
Once you start changing state- si vous changez l'état avec le système de gestion de configuration, oui, alors cela devient contradictoire. La présence et l'utilisation d'un système de gestion de configuration ne sont pas mutuellement exclusives avec l'immuabilité - tout dépend de la façon dont vous choisissez de l'utiliser.
James Shewey
2

L'infrastructure immuable est, à mon avis, un modèle différent de la gestion de la configuration. Bien qu'ils puissent être utilisés ensemble, ils abordent les problèmes par nature de deux manières différentes.

Le concept des objets immuables a une longue histoire, les systèmes Unix les utilisent depuis des décennies pour déployer des progiciels. Mais une fois qu'ils ont été déployés, les fichiers de configuration ont été modifiés afin que les choses deviennent mutables. Idempotency fournit de belles garanties avec les fichiers mutables, nous pouvons savoir quand les choses ont changé et ne mettre à jour que les choses qui ont besoin d'être mises à jour. Cependant, cela ne résout pas tous les problèmes des objets mutables, nous devons encore répondre à un nombre apparemment infini de cas de bord. Parce que les choses sont mutables et que nous sommes idempotents, nous devons d'abord déterminer quels changements doivent être apportés, puis les exécuter généralement dans un ordre très spécifique. Lors du déploiement de packages logiciels, en particulier avec des déploiements sans interruption de service, nous devons soigneusement orchestrer les modifications pour empêcher toute demande d'être abandonnée.

Cette complexité peut finalement être évitée en déployant des artefacts immuables au lieu de les muter en place, car nous remplaçons simplement un objet par un autre (que ce soit un binaire, ou un conteneur ou une machine virtuelle), le mettons en service et retirons l'ancien. . Ceci n'est qu'un exemple de déploiement sans temps d'arrêt.

Avec les progrès de l'outillage pour nous permettre de déployer des artefacts immuables sur des milliers de systèmes en très peu de temps, nous constatons que l'utilisation d'outils immuables pour gérer les systèmes est beaucoup plus réalisable que la gestion de configuration. Cependant, l'outillage n'est pas encore là et il existe encore un cas d'utilisation pour les deux. J'ai fait un exposé sur ce sujet qui explique la progression linéaire de entièrement mutable à entièrement immuable, c'est un spectre et chaque entreprise choisira où elle lui convient le mieux.

Robo
la source
Avez-vous une vidéo de la conversation à laquelle vous pourriez vous lier?
James Shewey
1
Il est lié dans le message youtube.com/watch?v=I3DuUzGC-SU
Robo