Our Hypervisors are Singles Bars (Why I Love Single-Purpose Servers)

Single-purpose servers are my hot mashed fruit. As a minimalist, I don't like clutter, and that extends into computing environments. Although it might sound kind of crazy to spin up a new server for every little thing, I promise it will make sense by the end of this post.

From a management perspective, having single-purpose servers makes it so much easier to know which services are running where. Basically think of this like delegating tasks among team members to get projects done quickly and efficiently. I'm a documentation junkie, and it drives me bonkers when I see a server that's just got too much on its plate--we're not running a steakhouse here--keeping things simple keeps them running smoother. As a result of not cluttering servers with every possible service to run, my documentation stays clean and readable. Single-purpose setup also means that I can set the less mission-critical services and devices to update and restart in the middle of the day and have little-to-no effect on my end users' computing experience. If a server is loaded with too many services, restarting it in the middle of the day is probably going to result in quite a few obscene phone calls. End users likely won't notice if one of several logon servers goes down... but they absolutely will notice if a logon server that also acts as a print server goes down, even if for a minute or two. [insert obligatory anti-printer rant]

You might be asking Well, doesn't this concept make for a nightmare in terms of hardware? And my answer is a solid "no, not really, like at all." Fully loaded bare metal is going to have a ton of resources, from processor cores to RAM to storage. With most of our servers running Ubuntu Server, they generally only need 4-8GB of RAM and 2 processor cores to do their work. This means that 2U taken up in a server stack could functionally be 8 or 10 servers. ...and as a minimalist again: I like things that don't take up a lot of space. Moving on...

From common-sense and security perspectives, devoting a separate server for each mission-critical process can mean easier data protection when an environment is compromised, or intrusion is suspected. Every business is going to have more than just one service they rely on to get business done. In the event that a hacker is only interested in disrupting a single service or server, it's beneficial to have that server isolated from the rest so that other business functions can still go on (with extreme caution and close monitoring, of course). Single-purpose servers, especially *nix servers, also have the added security benefit of not being locked into a single account name and password across the entire administrative environment. Each server can have its own unique root username and password. Side note about Windows here: this is a little more difficult to accomplish unless you can get away with using the local administrator accounts (and for this, use LAPS--it slaps), which probably won't accomplish 100% of what you need... and having a ton of different privileged accounts is generally frowned upon in the world of Windows administration. Bigger market share = bigger target.

When it comes to backup and restoration, and even just simple reboots, using single-purpose servers has yet more benefits. Less disk space is needed for one service vs. many services, so backups and snapshots happen faster. Restoring one server and its service at a time is faster and much less nerve-wracking than trying to bring up a whole ton of services at once on a single server. Trying to do too many things at once causes competition for resources which doesn't make sense when computation lives in a post-scarcity society. I've never been a fan of having a bunch of things run at startup because of the freezes and lag it can cause, and running a single service on a single server means it boots up and gets back to work really quickly after periods of downtime. I can't speak for anyone else but I like high availability, and running single-purpose servers keeps availability adequately high.

TL;DR - Single-purpose servers keep documentation looking clean, and keep critical functions running smoothly. Isolating services from one another also allows for higher availability, faster startup, easier protection and recovery, and so on and so forth. If your servers all have heavy workloads from running a bunch of different services, give them a break and start to split up tasks. Your servers (and maybe even your end users) will thank you when you have the luxury of keeping downtime and service interruptions to a minimum.

P.S. Work smart, not hard.