On the Genealogy of Serverless
“Serverless is no more about Lambda-functions than astronomy is about telescopes”. To paraphrase Dijkstra
Sometimes the best way to understand a concept is by tracking down its roots and examining its evolvement. Serverless is not technology nor a feature, and exactly like computer science exists without a computer, serverless lives regardless of the cloud providers.
So where should we start our inquiry? We can start simply by analyzing the term. Serverless means “without a server” or “server-free”, implying that a key concept here is, of course, the server. To have a better understanding of what does it mean to get rid of the server, let’s start by exploring what does it mean to have one.
The Physical Server
We start this journey in the 1990s when the concept of data-centers or server-farms started to boom. Companies needed to store data and process it, and later on also to run websites or other online services. For that purpose, they dedicated a room in the building and filled it with computers, stacked one on top of the other. On those computers the data was stored, the processing took place and the web servers handled incoming requests.
Scaling meant to contact a hardware provider and order mew machines, additional components, or hard drives for storage, making scaling a slow and expensive process. In addition, data-centers forced companies to hire IT experts who know how to add RAM cards on mother-boards and wire computers to one network.
Just recently, as I was looking for some ways to set up a database, I came across a relevant article for our topic. It was explaining how to utilize a machine with 256 cores for a certain type of database. This article is definitely an artifact of those times, in which you already had the hardware in place, but the business and software changed, now you must find a way to square the circle.
The Virtual server
Two significant advancements joined together at the beginning of the new millennium — virtualization and high-speed internet connection. The latter requires no clarification, but it is the place to explain a bit of what is virtualization.
A virtual device is a logic devic — meaning it was created programmatically — that behaves and feels like if it was a physical one. To simplify a bit, it means that I can take a physical machine with 8 CPUs and 16GB RAM and “split” it, using only code (not touching the hardware), into 2 machines, each has 4 CPUs and 8GB RAM. If we give each one of the smaller machines to two separate users, they will feel exactly if they are using their own physical machine and will completely unaware that they share physical hardware.
Now there can be someone who has many physical machines in a remote place and I can ask them for the resources I need exactly now. When I need more I can ask for additional resources, and when I want to reduce, I just give the resources back and they can be allocated easily for someone else. Those service providers are mostly known today as cloud providers. No more ordering components or handling hardware, and no need anymore for hardware experts.
The invisible server
Today we are making our first steps in the serverless phase. The new improvements in the fields of virtualization and infrastructure management and features from our cloud providers are allowing us to be more flexible.
In this phase, the goal is to be completely unaware of the physical nor the virtual resources that we use, in order to free developers from managing infrastructure or calculating RAM and CPU.
Moving from physical servers to virtual servers enabled developers to focus more on the software and less on the hardware — it enabled them to develop faster and easier. That is exactly the trend, of which serverless is a direct continuation.
Hence Serverless does not mean that there is no server there. It is not about CPUs floating in space running random code. Serverless can mean even dedicated resources, CPUs that are always up as well as limited storage. It is critical, furthermore, to shift the focus from not owning (or not paying for) resources to not managing them.
This evolution to serverless architecture holds a significant contribution to software development which revolutionizes the field:
- Democratize software development: infrastructure management (physical or virtual) requires skills that not every developer has, unfortunately, there is no program that runs without infrastructure. By eliminating the need to handle servers, Serverless brings software development to every developer out there.
- Eliminate waste of resources: automatic resource allocation can bring resource utilization to almost 100%. For example, CPUs will never be idle switching from one user to another fast and seamlessly.
If we subscribe to such definition of serverless we realize that every resource can be serverless, and many already have a serverless version — databases, message brokers, ETL jobs, etc. I could say that the phrase “less is more” is spot on — less server for more technology.