Serverless is the new cloud computing trend that allows teams to develop applications and services quickly without having to worry about servers in a cost effective manner.
Why Use Serverless
Amazon, Microsoft, and Google are betting big on Serverless by investing millions. Satya Nadella, Microsoft CEO, had this to say at Build 2017:
“serverless computation is going to fundamentally not only change the economics of what is back-end computing, but it’s going to be the core of the future of distributed computing.” — Satya Nadella
There are 3 major benefits of going Serverless: Faster to Market, Reduce Cost, and Focus on Logic.
Product Owners can reduce time to market from months or years to weeks or months by reducing infrastructure creation and developing faster. Serverless allows teams to experiment quickly and fail fast by using managed services that are easy to configure and develop on. Function-as-a-Services is a natural fit for developing micro-services letting teams build discrete, independently deployable, technologically diverse services.
Companies can reduce cost by taking advantage of consumption based pricing and reducing overhead cost of managing traditional deployment models. Function-as-a-Service will spin up and down based on user demand eliminating the cost of running virtual machines or containers 24/7. You pay for what you use, not what you provision. When using Serverless technologies, non-functional requirements such as scalability and availability is handled by the cloud providers.
Teams can focus on logic by eliminating infrastructure management tasks common to the DevOps lifecycle. Tasks such as image creation, configuration management, application installation, os patches, system monitoring, and log collection no longer exist with a Serverless deployment model.
Functions-as-a-Service (FaaS) is the cloud computing service that Serverless applications and services are developed around. FaaS used in combination with other services can create a low-cost, event-driven architectures that scale to meet demand. There are two things that had to have happened for Serverless to become viable.
1. Technology had to advance to a state to allow compute power to be quickly spun up and down to have fast short running processes.
In the early days, companies had to acquire, configure, and maintain bare-metal servers to run applications and services. Operation teams had to spec out parts for the servers, price components across different vendors, and send orders through their company’s lengthy procurement process. Once the hardware was received, servers had to be assembled, installed into data centers, operating systems and software had to be installed, and the company’s applications would be configured. Development teams had to consider their hardware and operating system when designing and developing applications. This process could take months.
A major shift in server acquisition and management occurred with new approaches around virtualization with virtual machines (VMs). VMs abstracted away CPU, Memory, Storage, and Network to meet the needs of applications on a per server basis. With venders like VMWare, Parallels, VirtualBox, etc. companies could host multiple servers on a single bare-metal machine. This eliminated the cost and time to spec out and acquire machines to run our applications and services. Teams could spin up new environments in a few hours or days instead of a few months.
The next virtualization movement happened in the cloud. Cloud providers such as AWS and Azure provided virtual machines that ran on managed bare-metal servers. The cost and time of running and managing physical servers was eliminated. Cloud providers enabled teams to spin up new VMs in a matter of minutes through a simple click of the button. Virtual machines allowed teams to provision resources faster, provided higher availability, made image recovery easier, and supported multiple OS environments on the same hardware. Teams still had to setup and maintain load balancing, scaling, healing, and disaster recovery.
The next advancement in application hosting was containerization. Containers went one step further than virtual machines to abstract away the operating system. Teams could move even faster by focusing on their own applications and direct dependencies and packaging up their contents to run in a resource-isolated process. Containers are light weight, stand-alone and are highly scalable while providing faster startup times. Technologies like Docker allowed companies to run containers on their own data centers. Amazon Web Services, Microsoft Azure, and Google Cloud Platform provide services to manage and run your containers. Challenges teams face when using containers include dependency management, container versioning, orchestration, and lifecycle management.
With the success of containers came the possibility of having Serverless computing. Functions-as-a-Services runs on containers. When properly managed, as the cloud providers do, you can spin up a container in milliseconds to run a small bit of code. Teams simply have to configure the function and provide the code without having to worry about managing infrastructure, scalability, or availability. Cloud providers do all this for you. Serverless shifts the cost structure as well. Instead of paying for virtual machines that run all the time waiting on a request, you only have to pay for the resource you consume! This consumption based model significantly reduces cost of running your applications and services.
By removing the operational and infrastructure requirement, teams can move quickly reducing time to market. Serverless allows teams to experiment without having to worry about cost and procurement. It enables teams to iterate and experiment quickly by failing fast.
2. Companies had to relinquish control over the hardware.
Over the last few decades companies have slowly shifted to data centers and then to the cloud. Cloud adoption didn’t happen overnight, it required years to build trust between cloud providers and companies. As cloud providers have matured, they’ve provided more and more services that meet many security compliances and standards. This includes the recent push into the Serverless offerings. Cloud providers are consistently making Serverless services HIPAA, SOC, PCI, etc. compliant every quarter.
Serverless Cloud Providers
There are four major cloud providers in the Serverless market today: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), and IBM OpenWhisk. Each provider has their own Function-as-a-Service (FaaS) offering with many things in common and a few things that differentiate it from the others. To go truly Serverless you have to use more than just the platform’s FaaS, you will need to use other services around storage, gateway, messaging, and more. Each platform has their own offering in this space, but first let’s focus on FaaS.
Each platform varies on its implementation and other offerings around FaaS.
AWS provides a service, Step Functions, that allows teams to develop statement machines in Lambda by defining Lambdas, inputs, and outputs via configuration using syntax similar to CloudFormation Templates (CFT). CFTs are infrastructure-as-code written in json or yaml. AWS also has Lambda@Edge to allow processing of events before it enters into other cloud services. For instance, you could intercept a call that’s going through CloudFront to validate the caller or rewrite headers.
Azure has Logic Apps for bundling Azure Functions into related groups to make managing and deploying functions simpler. Another differentiator for Azure is the ability to run Azure Functions on VMs. You lose the advantage of consumption based cost, but gain the ability to control the environment more. This can be useful if your functions required OS level packages.
Google Cloud Platform is the newest platform to the market and offer superior services around handling big data and analytics.
IBM OpenWhisk is the only Serverless platform that is open-source and provides an on-prem option. Implementation details are a bit different on OpenWhisk with the focus on Actions, Sequences, Triggers, Rules, and Packages to enable teams to build out complete solutions.
Other Services for going Serverless
While Functions-as-a-Services is the core of Serverless, you will need other services to build out complex applications and services. You’ll need to provide a gateway for users and systems to access your application, storage for persisting objects and data, messaging for inter-service communication and external notifications, identity and access management, content delivery and more. Each platform, with the exception of IBM OpenWhisk, provides services to meet most of these needs. Below is a table with a sample of these services.
Serverless is a new cloud computing trend that Amazon, Microsoft, and Google are investing a lot of effort on. These platforms are quickly building an ecosystem of services that can be used by teams to build innovative solutions fast. By using Function-as-a-Service computing services with other managed services teams can create highly-scalable, low-cost, event-driven architectures.