When I first wrote about cloud computing, App Engine wasn’t yet in beta, Amazon EC2 was a radical new thing, Microsoft seemed poised to strike, and Heroku was a twinkle in its founders’ eyes.
At the time, I was a strong advocate of what became known as platform-as-a-service. In the future, went my thinking, developers will focus on their logic, not their infrastructure. To a degree I still believe this, but the path looks different now.
In 2008, perhaps the largest concern about PaaS was lock-in to bespoke features. App Engine and Azure offered powerful APIs that were tightly coupled to their runtimes. Heroku forged a different path, offering the ability to run (nearly) vanilla Rails projects, but had bespoke flavor in its management interfaces and specialized third-party plug-in library.
Back then, the last thing on my mind was sudden price hikes from reputable providers. Certainly there would be downward pricing pressure in the market. Surprise! Earlier this year, the App Engine team announced new pricing. Users promptly revolted, and rightly so: real customers were staring down 7x-10x cost increases. Worse, however, was the realization that the price hikes gave the lie to App Engine’s unwritten premise: that if you bought in to its idiosyncratic approach, you’d scale far higher for far less money than on any similar offering.
Welcome to today’s PaaS landscape: services aplenty that make it possible to quickly launch and scale new apps, but that sport non-portable interfaces with uncertain future pricing and feature availability.
Where to turn? Bog-standard Linux distributions, of course. They’ll be around for a long time to come; they’re easy to set up and infinitely malleable. But most importantly, they’re the foundation of modern infrastructure-as-a-service offerings like AWS and Rackspace.
Alone, “Linux distributions” on IaaS are not enough. Luckily, a universe of tools has grown up alongside IaaS. Puppet and Chef make it possible to define machine configurations and manage them under source control. Fabric and Capistrano make it painless to invoke commands on remote servers from popular scripting languages. And tools like Cloud Formation make it easy to construct webs of IaaS resources in a single transaction.
Useful though they are, these tools are still in their infancy. But they point to a future where complex infrastructure is readily captured in source control and deployed to any cloud (or bare metal) in repeatable fashion. This is how we manage our Cloak server deployments today; I can’t imagine turning back.
Most importantly, these tools make it possible to keep one’s infrastructure code “on the outside” of one’s logic. IaaS providers like Amazon aren’t above introducing their own bespoke APIs, but the good news is that in the world of IaaS it’s easy to separate application from infrastructure logic — an impossible task on platforms like App Engine.
What’s missing? A million open-source tools that add up to one big tool: a push-button utility that spins up a production-ready deployment of a vanilla Rails or Django project on any IaaS provider. When developers need more control, it should be possible to pull back the deployment’s layers. Silver Lining was a solid first experiment in this direction, but the tool I envision is probably several years away.