All three are patterns of sorts, it isn't is a case of picking and choosing which to use in any specific circumstance but a case of knowing when to recognise the patterns that can help or hurt you.
Snowflake Server
A Snowflake Server is very much an anti-pattern representing the case when a server evolves in an uncontrolled manner to the point when it cannot be easily reproduced.
I have had numerous run-ins with this kind of server in production, they are fairly easy to spot as there is usually a large number of failed changes and comments such as "it [the change] worked in Development/Test/UAT/Staging".
Phoenix Servier
A Phoenix Server is more of a principal than a pattern as Martin Fowler puts it:
A server should be like a phoenix, regularly rising from the ashes.[a]
If you were to apply IT Service Management (ITSM) or ITIL language to the same situation you would likely call it an IT Service Continuity Plan or Recovery Plan:
A separate plan for each service should provide detailed procedures and step-by-step guidelines for each stage of an incident so that the Recovery Teams are able to restore the services and thereby to meet the agreed process and component RTOs.
Immutable Server
An Immutable Server or Immutable Infrastructure is the process by which we treat all deployed infrastructure, configuration and code as utterly immutable, i.e. unchanging. When we deploy anything new we spin up new infrastructure and deploy the code to this. Interestingly this mostly satisfies the needs traditionally fulfilled by Evergreening.
Notes
- a: Martin's colleague Kornelis Sietsma came up with the term "Phoenix Server" on an internal discussion list.