I was hungry. Perhaps that’s a good excuse, or perhaps not. Either way, I sat down after ordering, took a peanut, broke the nuts out of the shell, and ate them.
After eating the peanut, I felt less hungry. So I picked up another one and ate it, as well. Soon enough, long before I order came out in fact, I wasn’t really hungry any longer. I still ate, of course, because I’d bought the burger, and it was a good burger. The fries were pretty good, too. The sweet tea wasn’t shabby, either.
But I thought about the peanut it all started with as I ate the burger. You see, a peanut solved my hunger problem. So it one peanut solves my hunger, why couldn’t a pile of peanuts solve world hunger? So I took a pile of peanuts and put them on the table, considering something I’d never thought about before — I could solve world hunger. Right here, right now, in this place, I could actually solve a major problem the world has been struggling with for thousands of years.
Okay, but then where would I get these peanuts? The place I was in had boxes stacked here and there, so there must be plenty of the things. If there were hundreds of restaurants giving away peanuts, they couldn’t be all that expensive, right? And how would I transport the things? I picked the pile of peanuts up — they didn’t feel all that heavy to me. I could probably toss a couple of boxes in the back of my truck right now and carry them to someone who was hungry — it wouldn’t add much to my fuel costs. Maybe if I just had a magic peanut, that one rare peanut that would shine like gold, and…
This might seem silly to you, but let’s be honest: this type of thinking is what passes for serious reasoning in far too much of the network engineering world. If virtualization is good, we should virtualize everything and just get rid of our hardware. Think of all the maintenance, power, and cooling costs I could save! If I can build a data center with one hundred 1g ports all in a single broadcast domain, I should be able to use the same ideas and techniques and build a data center with one million 1g ports all in a single broadcast domain. If one tunneling protocol is good, then we should invent a hundred, because tunneling can save the world. If one standard is good… Well, you get the picture.
We constantly forget the law of unintended consequences, the law of leaky abstractions, and the simple fact that no matter how foolproof you make the plan, a bigger fool is going to come along than you planned on. We constantly forget is that sometimes scale doesn’t require a larger solution, it requires a different solution.
Tunneling is tunneling, whether the encap is VxLAN, MPLS, MPLS over NVGRE over IP, GRE, or whatever else. The problems we face in designing protocols and networks are roughly the same as the ones faced by folks a lot older than us. We’ve just changed the names on the protocols to protect the innocent along the way, it seems. We run to extremes to solve one problem, and then to the other to solve the problem we just created. We make the perfect peanut transportation system, and then have to destroy it all just to get the peanuts to actually grow.
There is no magic peanut — or a bigger pile of peanuts — here that’s going to solve world hunger. Just as there is no magic protocol that’s really going to solve, for once and for all, with no side effects, and no unintended consequences, the full space of network problems we face on a daily basis.
The bottom line: Stop trying to boil the ocean (or all the peanuts in the world, as the case might be). Use the tool that works for the job while minimizing your tool set, and stop trying to solve world hunger. Maybe you can solve the hunger problem next door, instead — and maybe that’s enough.