Friday, May 10, 2013

Cats, Cattle and Zebras

Or, the Animal kingdom in the cloud

Something about IT seems to attract references to the animal kingdom. It might be caused by lively imagination or the unkempt nature of practitioners in the field (I'm thinking about myself). For example, the Agile movement seems to like the story of "the Chicken and the Pig". Just as an indication as to how prevalent this meme became, I've been asked (actually, usually I do the asking) - who are the chickens and the pigs in a meeting. Only those few unaware of the meme took offense. As most powerful memes, this one helps in communicating briefly a much more complex set of ideas, hence it's power.

"You promised Cats…." you might say about now, "and all you've talked about are pigs. And when did this blog become veterinarian focused?"

Bare with me for a bit...

Ok. Cats. A more recent meme I've been hearing about is "Cat vs Cattle", or more frequently known as "Pet vs Cattle". The idea behind this meme is to capture the effect of scale on your approach to things. Say you have a cat. You name it "tickles". You feed it its favorite food. You tend to its every need, an pay the vet ridiculous amounts of money when it gets sick. This works since you have one or just a handful. Each and every instance of the Cat is precious and has a unique charter and sometimes quirky behavior (I had a cat who woke me up every morning by biting my cheeks). 
Now, consider the difference in attitude to Cattle.You don't have 5 cows, you have a whole herd, say 500 or 5000. In general you try to keep them happy and healthy. The herd as a whole might be broken into categories, but they mostly get the same treatment - same food, same lodging etc. You might have some aggregate affection to the herd, and maybe the lifestyle. But (sorry PITA) in general, you won't go far out of your way if one of the cows fell ill. Heck, if the disease is infections, you might actually sacrifice the one cow for the good of the herd.

Ok.. so what does this have to do with Cloud computing?

Replace the Cat with a pet server, and the cattle with a compute farm, and the analogy might become apparent. If you have a few servers, you'll name them things like "Fred" and "Branny" and "Pebbles". They'd each have a unique character (e.g. the OS flavor, version of software installed, firewall rules etc). With a compute farm, you name your servers something like "r12c2-east" and some more esoteric like "tge0-0-0-0.border1" or "ae-8-8.ebr1.newyork1" (these happen to be names of routers I plunked out of a trace route…). You strive to achieve uniformity among your servers, and
If one of these servers is sick (bad hardware, or malicious software detected), you power it off, toss it aside, and replace it with a new one. In the cloud this is even easier, since tossing a server aside just means a few mouse clicks in the console (or better yet an automated script that invokes the right API's).

Ok… so Zebras?

While I like the Pet vs Cattle analogy, I think it is missing an important ingredient that's pivotal in the Cloud. The pet vs cattle captures the reality of dealing with one axis of complexity - going across order of magnitudes in numbers - from 1-10, to 100-1000. The attitude tools and processes required to handle this transition across scales have to adjust the farther you go. This is captured well. The missing part is the diversity aspect.

Looking at wealth of services offered on Amazon AWS, and more importantly at the 20 some pages explaining "How AWS pricing works" might start you down the path of realizing that the cloud is not a matter of cattle, it's a matter of Zebras, or more correctly a whole zoo.

In a zoo, each species of animal has it's own needs - food, habitat, social preferences and various other demands on your operations staff. To be successful, the staff must be intimately aware of what does it take to make that certain species happy (or at least keep it alive). For bonus points, the staff also needs to be cost conscious in caring for the animals (e.g. if the Lion will eat gizzards, don't feed it filet mignon).

Complexity on the axis of scale yielded new tools and processes: Configuration management tools, like Chef and Puppet, Monitoring tools like Nagios and capacity planning tools like Ganglia and many others. Tools to handle the complexity axis (the zoo part) are starting to emerge, as more and more cloud users are faced with the need to economically handle their Zebras. 

I'm proud and happy to be working on one of those tools, and if your Zebras are getting too complex and expensive, or if you'd like to figure out if your lions will accept gizzards, I'd like to hear your story.

As a parting, in case I under delivered on cats, you can have your fill here.