SOA -> API as PaaS -> Docker
I frequently make an analogy of why API's have supplanted SOA as being for similar reasons why Docker/Kubernetes is supplanting PaaS.
SOA was architecturally superior and theoretically provided the same benefits as API's. Many companies went down the SOA road but few ever implemented it very far. For instance, governance registry is pretty key part of the whole reuse idea in SOA and those were rarely implemented by companies and those that implemented them rarely found much reuse. Reuse which was a primary goal of SOA and it was never achieved in most companies.
On the other hand API’s exploded rapidly and reuse happened naturally and explosively. Within 5 years from the start of widescale use of APIs I calculated that there were 100 billion API calls in the cloud every minute 3 years ago. Why did API’s succeed at reuse where SOA failed? Simplicity is absolutely the biggest factor. HTTP is about 100 times easier to use and build than SOA wsdl's and associated machinery.
PaaS vs Containers and Open Source non-opinionated Orchestration
I am a big enthusiast for open source technology and the component microservices and serverless approach to technology that is dominating the development landscape today. I consider that I have helped bring about, predicted and wanted this world for a long time but I am the first to admit why it has taken a while.
Componentization or the fragmentation of software into smaller chunks has been synergistic with the movement to microservices and with open source. They have been part of what I call the virtuous circle composed of the 5 key technologies DevOps Cloud Open Source APIs and mobile. Each of these technologies drives new technologies which drives the others. Therefore, smaller evolves faster and generally wins.
The virtuous circle is a powerful innovation cycle which means that it is not likely to be circumvented by a commoditization to single providers. Single providers can't keep up with the technology change and thus these we will continue to see that Enterprises adopt these technologies in pieces.
The move to containers was thus a natural for this fast evolution of component technologies. Microservices and the idea of being able to spin up and down large numbers of these services rapidly to meet demand was part of the cloud's contribution to the virtuous circle of innovation. This is much better than VMs which can take minutes instead of milliseconds to launch. By scaling up smaller pieces we don’t need as many resources and overall we save 50-80% of the infrastructure that we would need with VM approach.
Containers are also easy to leverage from one service to another. So, if we build one service that uses a particular tool we can leverage that same tool in another service and as demand builds for either we can scale. With VMs this would be more complicated to reuse, to scale and to keep in sync.
The container approach has clearly been winning and nobody can doubt this at this point. Docker's downloads have soared to the billions. PaaS is still gaining some adherents and people continue to do things with VMs the facts are that Docker is exploding to mass adoption just as API's soared past SOA.
PaaS takes massive retraining. A typical PaaS application requires you to learn 12 factor code development methodology. There are numerous complicated aspects to how PaaS builds and deploys code. Running the PaaS is complicated with specialized tools people need to learn. It is sort of an all or nothing approach.
PaaS also bundles in many components that in the Docker world are achieved with a number of open source components. It is easier to pick and choose the complexity you want and to learn each of these tools separately than an entire PaaS.
I realized many years ago that most companies wouldn’t be able to absorb the PaaS solutions being offered. I became an early enthusiast for Docker and Kubernetes in particular.
Containers are simple. You can download a docker container in 5 minutes and be deploying it a minute later. Maybe faster if you’ve done it before. With a tool like Kubernetes most developers can be deploying a dozen containers and be productive almost immediately and understand everything that is going on.
Unfortunately, this oversimplifies the problems but it is almost always better to start with simple and then get more complicated. This allows people to learn and adopt more complexity as their need and skills evolve. Agile Stacks helps you do this by providing you out of the box solutions of the best of breed open source and cloud services to build your cloud in literally minutes.
You can piece together a number of open source technologies to give you a PaaS or the functional equivalent of a PaaS. So, you don’t have to go down the PaaS route. That incremental nature is extremely positive for adoption. No surprise Docker has grown like no other technology change I’ve ever seen.