A term we hear a lot is systems are either Cattle or Pets. But what does this really mean? What makes a system a “pet“ and what makes a system “cattle” and why is everyone trying to have cattle? Aren’t we all supposed to be eating less meat?
Okay so it has nothing to do with meat, and I am sure, as I explain it many farmers would disagree with the analogy, however like it or not, it does seem to have become a term that is ingrained in IT today.
What are “Cattle” Systems?
For a system to be considered “Cattle” it must be deployable and rebuildable, so, for example, it is created using something like Terraform, it is configured by something like Puppet and it contains no specific data. To use another buzzword, it should be ephemeral.
This means it is replaceable/deployable automatically. And ideally, it is part of a group, even better a load-balanced or auto-scaling group so an instance can disappear and be replaced with no interruption of service. It can appear to increase resources when the load is high and then disappear again.
There is no need to back it up, it can be recreated automatically and holds no data so why would you?
There is a need for anyone to log in by hand and do anything, so you won’t need to be able to log in to the operating system.
There is no need to patch the system, you can just deploy a new version of the system with a later operating system. Perhaps even using the “blue green” deployment methodology to run a rolling update.
A system can disappear, and the workload just keeps on running, with no interruption of service.
This all sounds wonderful; it is the brave new world … however is it achievable? Let’s think about what makes a system a pet…
What makes a system be classed as a “Pet”?
A pet system has special needs, it has most likely been touched by hand to make it perform its functions and it is a requirement of a system if it is missing then things don’t work. To recreate it some processes or configurations might have to be done. Perhaps if it is restarted it has to have a human log into it and change some stuff or start something. If it was to vanish a workload would fail, and an outage will occur.
The system needs to be backed up as it holds some data that changes. To update it you need to patch the operating system and then test the application in lower environments
To be classed as a pet you just have to fall at one of these hurdles really, not all of them, just one may make your system a pet.
For the last 20 years most systems that have been created have been pets, they were all special and had special needs. Their needs would be known and documented, and system admins would install, configure and start things as required. Systems had checks running to make sure everything that had a special process had that process running to deliver what was required.
Why can’t we just change our Pets to Cattle?
There is only so far you can go in the process to change a Pet system into a Cattle system, To a degree, they can be automated in creation and rebuildable, but they may still not achieve “cattle” status. At some point you have to redesign or reengineer the workloads; applications, services, and processes running on these systems to be able to make the resources that run them be indeed cattle