In the ten years or so that I have been programming professionally, there’s been significant changes to the way we did things whether it be the way we developed software, the way we managed software, or the environments we used to execute our code. Over time, these changes have become increasingly more and more dramatic to the point where it’s now possible to run a company and maintain almost no actual servers.
For the last 18 months or so, I have been working with “serverless computing” which is an incredibly encompassing buzzword for a lot of different technologies and techniques.
Serverless computing is a very large break from the traditional way we developed software and deployed software to servers. Serverless computing is basically an architecture where code is stored and executed by a fully managed provider.
I think a very simple explanation of what serverless computing is that it’s a paradigm shift. It’s a way of incorporating third party services (Backend as a Service) or running your custom code in containers that are managed by a contracted third party (Infrastructure as a Service, etc.).
Backend as a service Providers are typically thought of as companies that provide some sort of API your code can call. For example, cloud databases (Firebase, Parse, RackSpace) or authentication services like Auth0.
At it’s core, serverless computing is completely dependent on “the cloud” and the all of the cloud computing concepts such as shared resources, full management of the system, etc. It is a huge break from infrastructure as a service or platform as a service type of products though. Almost all server management and capacity decisions are hidden from the developer or operations team. Pricing is usually based on the usage of resources instead of having to pre-plan, or utility computing as some call it, that is that your electricity bills balance is based on how much you used.
Prior to the concept of serverless computing developers would load their code onto a virtual machine or container which would then require certain resources to execute which the operations team had to plan to be available.
Benefits of Serverless Computing
There’s three major benefits of using serverless computing.
- No server management. Serverless stills require servers – you just don’t manage them. Providers manage the servers and other resources and price their services based on your usage.
- Very Flexible scaling. The computing provider usually looks after the scaling automatically as your account receives more and more requests it adjusts automatically, although some providers allow you to adjust the capacity by dragging sliders.
- Typically a lot cheaper than traditional approaches because there’s almost no idle time. The Serverless Calculator can provide some really rough details around what the cost would be.
- Decreased time to market and faster software releases is possible because you won’t need to necessarily build everything or purchase your own hardware and wait for a vendor like Dell to build it and ship it.
Disadvantages of Serverless Computing
While there’s a lot of huge advantages to serverless computing, especially for startups, there’s also some trade offs.
- Debugging and monitoring is more difficult because you don’t know what machine executed the
- Documentation is very weak or not available.
- Vendor Lockin is significant – as all of the different vendors have all of their own approaches.
Serverless Computing Providers
Amazon Web Services (AWS) launched the first real serverless computing platform when they launched AWS Lambda in 2014. In the time since then, almost all of the big cloud providers have launched their own versions of lambda.
Amazon Web Services
AWS Lambda was launched in 2014, and provided a way to execute NodeJS without having to maintain servers. In the time since then, it’s grown considerably and now provides execution environments for Java, Python, C#, and Node.Js
Google Cloud Functions recently became available. I haven’t had an opportunity to use them yet, but look forward to being able to soon.
Adopting to Serverless Computing
Adopting to Serverless Computing isn’t easy. I’ve put together a blog post with some details on how to get ready to adopt to serverless computing.
Stay tuned, in the next few days I plan to blog about some common serverless architectures.
Also published on Medium.