Os dois termos são muito diferentes.
Vamos começar com o immutability
que literalmente significa "sem mutações" ou "sem alterações". No sentido do DevOps, significa que depois de criar um artefato, seja uma imagem de contêiner, uma imagem de VM ou talvez um pacote a partir de código compilado - você declara que nunca o mudará. Frequentemente, se alguma alteração for necessária, você declara que uma nova versão de "coisa" será criada.
O termo idempotence
significa que, quando as alterações são aplicadas várias vezes, o estado é alterado (alterado) apenas uma vez . Primeiro, ele já pressupõe que haverá mudanças aplicadas, o que significa que você não pode ter algo imutável e ações idempotentes feitas a ele (nenhuma ação é feita por contrato).
No uso de ferramentas de gerenciamento de configuração, idempotence
é usado em alguns casos ao aplicar a mesma alteração várias vezes. Como adicionar a linha que diz localhost
ao /etc/hosts
arquivo, você realmente não precisa de várias linhas, e se uma já existir, é seguro não tentar anexar novamente.
Também idempotent
é um termo usado para descrever ações que tentam mudar as coisas, enquanto immutable
é usado para descrever substantivos (objetos) que são definidos com relação às alterações feitas a elas.
Por que um immutable
objeto é útil? Porque quando você copia, por exemplo, de um ambiente de desenvolvimento para qa para produção. Você já sabe bastante (mas não tudo) sobre como vai se comportar. Em muitos casos, as peças que estão funcionando serão consistentes e as que estão quebradas também serão consistentes.
Por que as idempotent
ações são úteis? Como quando você deseja alterar o estado de algum objeto, em muitos casos, é útil verificar apenas se a alteração foi aplicada e aplicar alterações apenas no caso de ser necessário. Por exemplo, quando um item de configuração em um arquivo está ausente ou possui o valor errado, é útil adicioná-lo apenas uma vez ou alterá-lo apenas uma vez ao aplicar a ação várias vezes. Em muitos outros casos, como arquivos de log , você não deseja ter ações idempotentes porque geralmente deseja acrescentar outra linha sempre que algum evento ocorrer.
the state is not changed.
mas que o estado permanece da maneira que o sistema de gerenciamento de configuração determina. Por isso, os sistemas de idempotentes de sentido único e sistemas imutáveis são semelhantes