Will serverless be the future of enterprise application development?
Serverless is currently one of the hot topics out there in software architectural patterns. Like many other terms or trends in software engineering, serverless also doesn’t have a clear definition of what it is. In this post, I’ll walk-through a basic overview of serverless and a few examples around it. Further, this will explore the potential of serverless and discuss on some of the debatable points around serverless.
What is serverless
As per MartinFowler.com,
Serverless architectures refer to applications that significantly depend on third-party services (knows as Backend as a Service or “BaaS”) or on custom code that’s run in ephemeral containers (Function as a Service or “FaaS”)
In simple terms as I see, if you are not maintaining or managing your own infrastructure to run your application and you pay as per your usage (never pay for idle), while getting required level of high availability, scalability and fault tolerance automatically from your vendor, from your point of view you are running a serverless application. As an owner of an application which runs on a serverless environment, you can put your 100% focus on your application business logic without worrying about the infrastructure that it runs on, and other non-functional requirements around your application such as high availability, fault tolerance, and scalability.
Will serverless be just a hype?
If you are new to serverless and you are considering it as an architect, this will be one of the main concerns that you will be having. Yes, serverless is a hype these days, but after considering the past and how technology evolves, I personally believe that it won’t be just a short term hype, rather it will stay there for at least next 3–5 years. Technologies around serverless will be changed or replaced, but the concepts behind serverless would not.
How technology actually evolves towards serverless?
Before going to explain how powerful serverless is, let’s first see how it evolves over the last few years.
“You have to know the past to understand the present.” ― Carl Sagan
This is how it evolves over time…
- 1989–1991 —World Wide Web invented by Sir Tim Berners-Lee
- 1991–1995 — The bare metal age
- 1995 — The invention of web hosting
- 1999 — Software as a Service (SaaS) concept was introduced by Salesforce
- 2001 — VMWare releases ESXi, “server virtualization” becomes a thing
- 2002–2006 — AWS is born (IaaS), people started to talk about “Cloud computing”
- 2009 — Heroku and the invention of the “Platform as a Service” (PaaS)
- 2011 — Envolve/Firebase, real-time database as a service
- 2012 — Parse.com and the ﬁrst Backend as a Service (BaaS)
- 2013 — Docker, “containers are better than virtual machines”
- 2013–2015 — Kubernetes / Swarm / Nomad / CoreOs (containers at scale)
- 2014 — Launch of AWS Lambda (FaaS)
Likewise, AWS lambda was born and the word serverless came out to the stage together with FaaS. Although we see Lambda as the starting point for serverless, containerization was the first hit for the movement towards serverless. With the invention of the containerization concept, world-leading cloud service providers were able to provide services to their customers with the concept, “pay as you use”, together with most required non-functional requirements to run their business using their infrastructure.
Key characteristics of a serverless application
There are four key characteristics of a serverless application.
- No server management — as the name implies, for a serverless application, there aren’t any physical servers involved at the application owners’ end. If you are the application owner, you have no idea of how many servers are running on behalf of your application, and of their physical location.
- Flexible scaling — since you don’t have an idea about the physical server layer, you don’t have to worry about its scalability. Your application will be allocated more resources on demand to manage the required level of capacity (which can be processing, memory, disk, database storage etc.)
- High availability — redundancy and fault tolerance are built-in features of serverless frameworks. You don’t have to keep your own servers to make your application highly available. If there are processing node failures, the underlying framework will automatically spawn a new node or several nodes for you and you won’t feel anything at all.
- Never pay for idle — In a serverless environment, you never pay for the idle time which is one of the key advantages when it comes to cost considerations :-)
Are both FaaS and serverless the same?
This is kind of a trending topic in these days, since there are some people who claim that FaaS is the technical implementation of the serverless concept while there are others who believe that serverless is not bounded to FaaS, rather a concept which is applicable more broadly. I’m in agreement with the latter group, let me explain why…
FaaS is just the event driven processing part of the serverless architecture. For an application, there are many other required building blocks such as data persistence, data streaming, messaging, user management and many more, to be there, to serve some end to end functionality. Most importantly there can be some applications without a FaaS component at all, but which still can be considered as a serverless application.
As an example, if we need some static web hosting, nowadays we can do that without considering about physical servers at all, thanks to world-leading cloud service providers. If we consider AWS as our cloud service provider, we can host our web page content in an S3 bucket and enable static web hosting to host our web page. To make it complete you can use Route 53 for DNS and CloudFront for CDN.
Another example would be a web application with a thick client which will use back-end services only for authentication and data persistence. You can implement this kind of an application without having your own physical servers or a FaaS component at your side. There are many services you can use for both authentication and data persistence.
Will serverless be the future?
Before answering this, I suggest you check this page which is the product section of AWS page. If you see carefully, there are around 100 ‘as-a-service products’ which cover the complete software development life cycle, starting from development to deployment and maintenance.
What do you think about the vision of AWS? I strongly believe that they will drive this effort to change the world such that we will be able to develop, test, deploy and maintain our applications fully on top of their solutions. In fact, we won’t be charged for the idle time as well, while they will be able to cover 90% of the cases from their services.
If you are still not ready to believe me, check out the growth of AWS services within last the two years, they are rapidly expanding their boundaries and enhancing their offerings to cover almost all the requirements in the software lifecycle process from the infrastructure point of view. Yes, some of those services are not yet 100% complete (few of them having been released within the last two months) and completely replaceable for on-premise products. However, within the next 2–3 years, they will make sure that you don’t have to think twice before going for cloud offerings while selecting infrastructure for your application development, deployment, and maintenance.
So, where are these cloud service providers taking software development and maintenance process? Definitely, their objective is to cover all the possible scenarios under the serverless approach and give their clients a comfort zone, to make sure they only have to focus on their business logic and will be able to put their full potential into it.
Will FaaS be able to reach the required level of capacity?
Now you may be thinking this — if we are going to move to the serverless paradigm, how capable is FaaS to facilitate the required level of processing capability? Let me explain this with an example FaaS offerings, AWS lambda (of course AWS is not the only leading players in this section, but I’m selecting the one I am more familiar with :-) ). Yes, if you consider current limitations/ constraints of AWS lambda, you can easily argue that AWS lambda doesn’t have the capacity to facilitate many of the common the processing scenarios. However, for me, almost all these limitations are only soft limits which can be easily relaxed based on customer requirements. Trust me, in future, they will definitely extend these limits to make sure lambda is capable of covering at least 90% of the cases.
A recent report claims that the FaaS market is projected to grow up to 32.7% by 2021. This is only for FaaS; if you look at the complete picture of serverless paradigm, you will understand how much potential it has.
Serverless is currently a trending topic which will definitely be a major hit within the next few years. In the future you won’t have to worry about the infrastructure, as your complete software life cycle will depend on cloud service providers. If you are enthusiastic to be up to date with the technology, I welcome you to become familiar with the serverless paradigm and these cloud offerings.
As I have mentioned at the very beginning, most of these points are debatable which do not have concrete definitions or answers. So if you have any concerns, happy to meet you in the comments section! :-)