The Cloud Evolution
There’s been happening a lot over the last years to what we use to call “cloud”. After dealing with different aspects of the cloud over the last years I thought I have a good understanding what IaaS, PaaS and the cloud itself are. But I was wrong. I wasn’t able to distinguish e.g. PaaS from “Serverless” properly and what the heck is this new FaaS. So I thought it’s time to put all important facts of this cloud journey together into one image to really see the change. That’s what I always do, if i don’t understand something properly. I draw :D
We’ve come a long long way together. The concept of a server, a machine hosting a service, is nearly as old as computer science itself.
A lot of things got much more interesting with the dawn of “the internet”. Suddenly people like me and you wanted to host their services aka websites for being present in “the internet” aka www. This was the time when IaaS — Infrastructure as a Service — joined the party — and changed the game. I could rent hardware to host my applications from there. I just had to take care of setting up the machine properly and deploy my services there. Sure, for greater applications hosted from different machines it was mandatory to have a solid architecture in place. But my focus was not on hardware anymore, it was on the operating system and the services it ran. The hardware got abstracted with IaaS. Nevertheless I had to maintain the whole virtualized machinery which means updating and taking care of the VMs and everything which ran within them. All this was part of my own responsibility.
Surely this was just the start into “a new world”. A couple of years later this theory got proof with PaaS- Platform as a Service — emerged. Now things got easier — again? From now on I don’t have to care about setting up my VMs and maintain OS versions. The OS gets abstracted. The platform offers me services which I can use and connect to make them interact and form my application. If my application needs a database and a storage I just fire up an instance of those services and connect it to my application. No need to setup machines for doing those tasks — they are just “resources” within my application architecture which I configure for my needs. But with great power comes great responsibility. The way systems and applications are being developed is changing. New development patterns are forming and old ones get retired. Now it’s not just a “lift and shift my application into the cloud” as it could be done with IaaS. Mostly a redesign of the service/application architecture is necessary, to be able to use the cloud services to their full potential.
To be honest PaaS already sounds like “Kthxbye, I have all I need for developing and hosting my services in a very loose way”. Far wrong! Not so long ago a new paradigm formed out of PaaS, which is called FaaS — function as a service. I see you raising an eyebrow and asking me “RLY?”. And my answer is “FRLY!”**.
But what do I need functions for if i have my web servers up and running, loosely connected with my services? I can extend it in a quite flexible way with additional features.. Right? So using functions for … what?
Functions can be seen as small scaled services which are hosted standalone and are running autonomously. In addition they can be triggered by events. So functions are small portions of code triggered by events. Sounds no bit like a fully qualified way for building your application? True! But a bunch of those functions are. The idea is going into the direction of microservices — cut down big monolithic services into small and more maintainable portions. And those portions can be hosted as functions. They can interact with each other, be chained, trigger other services — simply just be integrated into complex architecture structures.
Apart from being small, functions can be set up in no time. The application is abstracted and the focus in development is on the function itself. The whole infrastructure and application layer is managed and even the performance scaling can be done dynamically other functions. Now it sounds a bit more like “next level to PaaS”, right?
But — keeping the golden principle of “separation of concerns” in mind while designing an architecture with functions ist most important. As handy as functions can be they bear the same dangers to an architecture as microservices — which is: having none :D
** The term “Freili” is a Bavarian short form of the German phrase “Ja, natürlich” which means “Yeah, sure!”