"Immutable infrastructure is comprised of immutable components that are replaced for every deployment, rather than being updated in-place." - Link
Infrastructure as Code
Immutable infrastructures allow you define your components (the software they run, their bootstrapping logic etc.) in code that you can check into and track in version control.
Company uses MySQL version 5.5 to store its transactional data
Developer would like to use new feature that was introduced in MySQL 5.7
Developer opens ticket with SysOps
Developer waits
Developer waits
SysOps picks up ticket and evaluates the risks of the update, devises complex recovery strategies should things blow up
Developer waits
SysOps logs onto server that runs MySQL 5.5 and tries to manually update to the new version
A practical example - The past
Problems:
Speed (the lack thereof)
Touching running systems is high risk - could result in data loss, extensive down times
Obscure, potentially undocumented changes
All the changes are platform-dependent - the code that the developer was thinking about using after the update might not work with the specific MySQL installation
A practical example - Immutable infrastructure
In the Immutable Infrastructure vocabulary, MySQL is a component.
Actually, MySQL 5.5 and MySQL 5.7 are both totally separate, independent components.
The concept of Immutable Infrastructure was popularised by Docker, which allows you to package your components as platform-independent executable binaries.