I wonder out loud if containers are the future of the cloud, and if other types of infrastructure or platform solutions for running code have a long-term future. Please read what I think and then join the conversation below to let us know your views.
My view of how cloud platforms such as AWS and Azure are being used is limited — I work for a distributor in the breadth market (customers with up to 500 seats), focusing mainly on infrastructure, and in a small market (6.4 million on the island of Ireland). But despite my limited view, I interact with people in other types of business and in other markets and what I’ve learned is bigger than my limited scope, but it probably still isn’t all encompassing … that’s why I’m interested in other people’s views.
From what I can tell, cloud platforms such as AWS and Azure are being adopted in the following ways:
I can understand Microsoft’s vision of the future of the cloud: legacy off-the-shelf systems will be deprecated and be converted into Software-as-a-Service (SaaS), which is best run on PaaS. But let me share what I have learned when talking to some developers that aren’t tied to Microsoft: they like the idea of PaaS – the costs and reduced maintenance make complete sense. A Premium 250GB Azure SQL instance costs around $698 per month (East US Region), but a D4v2 VM with SQL Enterprise costs $3,065 per month, plus storage, plus human time!
And that’s why every developer that I have encountered is only doing PaaS … except they are not. My first encounter with one of these kinds of companies when selling Azure was a shock to me. They told me that they had a company policy never to run their customer’s systems on PaaS. The reason was that they view cloud computing exactly as it is sold; the cloud is a utility.
Forget the cloud for a moment. Think about how you get electricity into your home. You compare the offerings in your neighborhood and pick the best value service for your needs. When your contracted term is up, you re-evaluate and seamlessly switch to another provider if they have a better offer.
The cloud is a utility. If you find that, today, Microsoft is the best, you deploy with them. If AWS offers something you need or has better terms, you might want to switch over to them. If the cloud is a utility, then you want that ability to switch between systems, right? But at what cost does that mobility come?
PaaS is a very specialized system. If you work with Azure Functions, Logic Apps or cloud services, with Azure SQL and other storage/data systems on the back end, and various queuing and messaging systems, then your code is going to be very specialized, right? Keep in mind that I haven’t written a meaningful line of code since 1997. If you write code that is deeply embedded into the system, then it’s going to be hard to lift and shift that code to another cloud, and vice versa.
The traditional way to have code mobility between clouds was to build on a common platform. That commonality comes in the form of IaaS: you run your code on a virtual machine guest OS that the clouds share, such as Linux or Windows Server. If I code on Windows Server, SQL Server, Ubuntu, or MySQL, all running in a virtual machine in AWS, then I can deploy identical machines in Azure, and migrate my code and data, and shut down everything in AWS (there are even ways to move the virtual machines and their hard disks!).
But the problem with that is now, as a developer, I have to start looking after things that I don’t know much about:
A lot of my time will be pulled from writing new code or improving existing services, and spending it on infrastructure, which is not core to my role or business.
So if operational and maintenance costs make IaaS less attractive, and lock-in makes you worried about PaaS, where do you turn? There is a middle ground: containers.
Containers provide a standardized way to deploy an application without an operating system, but leveraging the features of a host operating system. The dependence on a host operating system (Windows or Linux) means that developers can write code using familiar techniques, and the standardization of containers means that they are mobile between on-premises and any cloud that currently supported containerization.
I view containers as being a middle-ground between IaaS and PaaS. While containers might not end up being as cost-effective as native PaaS, they are certainly more competitive than IaaS. There are few obstacles to learning host to code on containers, which seems to be an issue for many of the developers that I have spoken to about PaaS. There is no maintenance for containers – the host OS can be managed by the cloud service provider. Containers offer a repository system that is perfect for the new world of DevOps, allowing rapid creation of new or specialized systems from older images; new applications can be deployed in seconds … yes; seconds. And best of all, the Linux world and Microsoft have cooperated at lengths never seen before in the Microsoft world to ensure that containers are interchangeable between cloud platforms if there is a shared host OS.
So in my opinion, the best of both worlds approach makes containers the best path forward for developing and deploying new systems on. As I said earlier, I have a limited view of the market, which is enhanced by some conversations. In some of those conversations, people prefer containers, and in others, people question the usefulness of containers in a world of PaaS. Let us know what you think by commenting below.