La mejor explicación se puede encontrar (como siempre) en el artículo de Martin Fowler sobre Servidores Inmutables .
Un servidor, ya sea hardware o un servidor virtual en la nube, generalmente tiene un sistema operativo y una aplicación ejecutándose en él.
A menudo, la aplicación y los componentes del sistema operativo requieren configuración y requieren que se apliquen cambios. Por ejemplo, parches de seguridad, implementación de nuevas versiones de la aplicación y cambios de configuración.
Cuando considera que cualquier cambio es una mutación en el estado del servidor, el término immutable
comienza a tener más sentido. Significa que no se permiten mutaciones en dicho servidor.
A menudo es el caso, cuando las personas están involucradas en cambiar el estado del servidor, ya sea un despliegue de una versión, un cambio de configuración o una ruta de seguridad. El resultado es un servidor que ya no funciona como se esperaba. Por ejemplo, la aplicación podría no ejecutarse ahora debido a una configuración incorrecta, etc.
Es por esto que se establece una práctica para crear servidores inmutables . Con los servidores inmutables , se crea una imagen de un servidor con todas las configuraciones, parches y versiones de aplicaciones incluidas. Luego, esa imagen del servidor se puede usar para crear servidores en varios entornos.
El primer entorno en el que se utiliza dicha imagen sería un entorno en el que la imagen pueda probarse para que funcione. Se detectan anomalías, y solo entonces dicha imagen puede promoverse a un entorno de producción para reemplazar los servidores allí con la nueva versión (que se sabe que funciona bien).
Una vez que el proceso de creación de imágenes y promoción de imágenes está automatizado, obtiene un proceso muy a prueba de fallas que involucra muy poco esfuerzo humano y muy pocas posibilidades de introducir fallas en su servicio.
A menudo, los servidores inmutables ni siquiera incluyen ninguna forma de "ingresarlos", como por ejemplo, falta el servidor ssh. En este caso, también es frecuente que toda la metrología de un servidor (métricas, registros) se envíe a sistemas externos, como una base de datos de métricas o un servicio de agregación de registros.
Con los contenedores (ver: Docker ) también hay un proceso para crear imágenes y luego generarlas en contenedores en ejecución. Con frecuencia, estos se reemplazan por nuevos contenedores basados en imágenes actualizadas y nunca se mutan. Lo que significa que ningún humano entra en el contenedor para "arreglar algo" introduciendo un cambio.