Thu, 04 Aug 2016
When you hear “Serverless” I know what you’re thinking… oh boy, another buzzword! I get it. And it’s a pretty confusing one, on two levels:
- There are still servers! We’re just talking about a new abstraction above the servers, but of course the servers are still hiding down in the stack.
- There have been services abstracted to hide servers for a long, long time! SaaS and PaaS, namely. This is not a new idea.
So what’s different? Well actually, once you get past the buzzword, quite a lot. There’s a fundamental idea here that is actually a pretty big deal in our opinion.
Services and Functions are the Platform Abstraction and the Unit of Deployment
In the typical Platform as a Service, a monolithic app is the platform abstraction and unit of deployment. This has a lot of downsides. As a result, fully managed platforms in general have retained a niche role in the IT landscape. The change in abstraction level to services/functions removes most of these downsides:
|Highly curated||Minimal curation: Functions run in a Linux container. A few languages are natively supported|
and you can bring-your-own-binary to support any language.
|Single monolithic app can be a challenge to scale||Inherent decoupling with functions and services, which can run independently and scale almost infinitely|
|Fairly large black box underneath the hood limits customizability||By hooking up individual functions and services, the system is highly customizable for very|
complex architectures or a variety of enterprise / security requirements
Even better, Serverless architectures retain all of the traditional benefits of platform abstractions, and a few more:
- No servers to manage, OS to configure, or security patches to stay on top of
- Scalability is solved, no clustering or Auto Scaling to manage
- Fault tolerance is solved
- All of the infrastructure is code-defined. Really it just becomes another component of the application.
- Costs scale per request (in AWS Lambda, it’s per 100ms of execution time). Costs are tied as closely to usage as you could possibly make them, which typically makes it dramatically more cost effective.
- Configuration and deployment are simplified with a tool like the Serverless Framework, so the DevOps team can focus on automated pipelines and other software quality processes.
So What Is Serverless, Really?
OK, enough discussion of abstractions. What does Serverless really mean at a more concrete level?
At the heart of Serverless is a function-as-a-service cloud offering.
AWS invented this category in the Fall of 2014 with Lambda. Azure, Google Compute, IBM Bluemix, and others have quickly followed with competitors, but Lambda was the first mover and is by far the most mature and most widely used.
The fundamental idea here is that you upload your code and it runs when requested as an isolated container, with as much concurrency as you need. You don’t need to worry about container orchestration, OS configs, or the underlying servers… just upload your code and run your function.
Critically, though, a Serverless architecture relies on more than just a cloud function. In AWS, a typical Serverless architecture consists of the following AWS services:
- API Gateway for an HTTP endpoint to make your functions into RESTful services
- S3 to serve static content
- A database like DynamoDB to persist application data
- And often many other components.
In upcoming posts, we’ll dive deeper into Serverless architectures and give you a better idea of how you can architect your next solution with Serverless.