Lately, there's been a buzz in the IT world about "Serverless" technologies. The term can be a bit misleading, because there is still a server machine doing server-side processing; the key difference is that when we talk about a "serverless" environment, the whole server infrastructure is managed by a third party. In a serverless environment, a developer only needs to provide his custom server-side code, and the platform will take care of running it when suitable. This takes the concept of cloud computing taking things off developer's hands a bit further. Let's recall those different kinds of cloud offerings and try to fit serverless there:
- IaaS: Infastructure as a Service. The cloud vendor offers an interface for the users to manage their infrastructure: servers, databases, and networks, using a special interface. That way, the user can allocate and consume computational resources using a pay-as-you-go model. This is the model where the user has the most power: he can configure applications, their data, runtime, middleware and OSes; some cloud providers also offer databases, messaging queues and other services. Those which do are sometimes called IaaS+-kind of cloud services. The common use case for this type of solution is to offload datacenter infrastructure management to a third party in order to focus on the application itself. Examples: AWS (Amazon Web Services), Microsoft Azure, Google Compute Engine, Joyent.
- PaaS: Platform as a Service. The cloud vendor offers a programming framework for developers. The vendor takes care of maintaining the framework and its infrastructure, and the developers take care of their applications built using the framework. The common use case for this type of solution is leveraging the existing framework to reduce development time and time-to-market. Example: Apprenda
- Baas/FaaS/Serverless: Backend as a Service. Here, the only aspect that the user controls is which code gets run on the server/backend. Everything else is handled by the cloud provider. That's why I put this between PaaS and SaaS. However, a distinction must be made between BaaS and FaaS (see next paragraph).
- SaaS: Software as a Service. The cloud vendor offers a set of pre-made applications hosted in their own cloud which can be used directly. The client only has access to those apps' interface, and the vendor is fully in charge of mantaining those apps and their infrastructure. The common use case for this type of solution is replacing traditional on-device software, which relieves the user from the hassle of installing and updating. Examples: Google Apps, Salesforce, Citrix GTM, Cisco WebEx.
Mike Roberts, from martinfowler.com, makes a distinction between two types of Serverless cloud computing architectures:
- BaaS: Backend as a Service. An application built on top of a BaaS cloud service delegates most of the server-side logic and state to the cloud provider.
- FaaS: In a FaaS environment, the user still writes most of the server side code, but unlike the traditional environments, that code is ran by the cloud provider in ephemeral containers, breaking the mold of the "always on" server. Basically, FaaS is about running server-side code without managing your own servers or server applications. This gives the cloud provider higher flexibility in assigning its computing resources.
The most popular FaaS offerings Amazon Lambda (from AWS) and Microsoft Azure functions (from Azure).
Further reading including architecture examples: