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.
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