In the mid 2000′s a bookseller accidentally changed the world. Yes, that bookseller was Amazon, and the change was the introduction of a IaaS. Quite possibly the first Infrastructure as a Service. At least the first commercially viable IaaS.
This allowed companies to not worry about having to provision hardware to host their services. It allowed you to pay only for what you used. So if you had a job that required large amounts of compute one day a month, you could scale up for that, and then shut it off when you did not need it. If you were a few developers in a garage, you could concentrate on developing, and not on buying hardware to run your code on.
That was a sea change in IT, and we are still digesting it. Enterprise IT is slow to adopt new ideas, and this was a big change. I’ve posited before that it was not the radical change that some people seem to think, however. It was just the next evolutionary leap in how we interact with servers.
The next sea change was PaaS. Platform as a Service was actually more interesting then IaaS in my mind. It allows for developers to not even think about servers, routers or load balancers, and just use the famous
git push heroku (or what ever your PaaS uses) to deploy code to production. This actually changed developers workflow, and allowed them to increase their velocity tremendously. It allowed one or two people to develop, deploy and run world class, high scale apps.
When there was just one or two PaaS’s or IaaS’s out there, they was not much choice. However now, you have a lot more to choose from. If there are 10 PaaS’s for you to choose from, you need to think hard about which one will best serve you. Also if there are 10 IaaS’s out there, you need to take some time to shop to see which one offers the features that you need, and does not lock you in.
However I feel that the next wave will change even that…
I believe that the next big thing is larger then IaaS or PaaS. I feel that the next big thing is Orchestration. Sitting above IaaS and PaaS, this will allow you to configure, deploy and manage large scale, complex sets of services across many providers. For example, you could provision an IaaS for your databases and a PaaS to handle your code and deployment. You could even have it manage a backup IaaS region or provider, failing over if the primary runs into problems. It can even manage other things, such as Service as a Services, internal apps or what have you.
You should be able to define your entire infrastructure in one place. You’ll have checks to insure that it is running the defined configuration. Including the tested versions of each granular part of your overarching architecture. If a part of your system goes out of scope, the system will detect that, and bring it back into compliance with your rules.
You should be able to clone your infrastructure easily to test new code, systems or configurations. You will be able to easily push tested changes out to production with automated, tested and repeatable systems. You will manage internal and external systems and clouds using a single set of tools.
This is just another step on the evolutionary ladder away from artisanal, hand crafted servers and environments to mechanized systems to deploy tested and repeatable systems at scale in the blink of an eye, across many locations and providers. It will be the assembly line of deployment. It will be self healing, set up to move services from location to location if it detects a failure.
Sounds like science fiction? Not really. We are seeing the basis of these systems build today. Chef, puppet? These are the low level tools of tomorrow. I see a future, not too far off, where you will be able to run entire architectures from the command line. We will look back at the racks of lovingly built servers from the early 2000′s and wonder how they were able to do accomplish so much with so little.