A melhor explicação pode ser encontrada (como sempre) no artigo bliki de Martin Fowler sobre Servidores Imutáveis .
Um servidor, seja um hardware ou um servidor virtual na nuvem, geralmente possui um sistema operacional e um aplicativo em execução.
Freqüentemente, o aplicativo e os componentes do sistema operacional exigem configuração e alterações a serem aplicadas. Por exemplo, patches de segurança, a implantação de novas versões do aplicativo e a configuração são alteradas.
Quando você considera que qualquer alteração é uma mutação no estado do servidor, o termo immutable
começa a fazer mais sentido. Isso significa que nenhuma mutação é permitida nesse servidor.
Geralmente, quando as pessoas estão envolvidas na alteração do estado do servidor - seja a implantação de uma versão, alteração de configuração ou caminho de segurança. O resultado é um servidor que não está mais funcionando conforme o esperado. Por exemplo, o aplicativo pode não ser executado agora devido a configurações incorretas etc.
É por isso que é estabelecida uma prática para a criação de servidores imutáveis . Com servidores imutáveis , uma imagem de um servidor é criada com todas as configurações, patches e versões de aplicativos agrupadas. Em seguida, essa imagem de servidor pode ser usada para criar servidores em vários ambientes.
O primeiro ambiente em que essa imagem é usada seria um ambiente em que a imagem possa ser testada para funcionar. Qualquer anormalidade é detectada e somente então essa imagem pode ser promovida para um ambiente de produção para substituir os servidores por uma nova versão (que é conhecida por funcionar bem).
Depois que o processo de criação e promoção das imagens é automatizado, você obtém um processo à prova de falhas que envolve muito pouco esforço humano e muito poucas chances de apresentar falhas em seu serviço.
Servidores frequentemente imutáveis nem sequer incluem uma maneira de "entrar" neles, como por exemplo, o servidor ssh está ausente. Nesse caso, também é comum que toda a metrologia de um servidor (métricas, logs) seja enviada para sistemas externos, como um banco de dados de métricas ou um serviço de agregação de logs.
Com os contêineres (consulte: Docker ), também existe um processo para criar imagens e depois gerá-las nos contêineres em execução. Geralmente, eles são substituídos por novos contêineres baseados em imagens atualizadas e nunca são alterados. Significando que nenhum ser humano entra no contêiner para "consertar algo" introduzindo uma alteração.