“Perhaps we no longer have to think about servers”. This is what Werner Vogels, AWS’ CTO, said on 7 July 2016 to sum up the value of Serverless computing during his speech at the London Summit.
He saw it as the next big revolution after containers and mentioned that some companies were already starting to remove the big parts from their apps and replacing their servers, virtual machines and containers just with a code.
After all, if there is one thing that characterizes cloud services is the ability they give us to develop our apps without having to worry about the underlying hardware. Within computing services, the basic level of abstraction is obtained with an IaaS. In a PaaS, greater abstraction is obtained. The maximum level of abstraction can be attained with Serverless services.
In them we can host our code or app, which will run when certain events occur. We will not have to spend time managing any server. The service will scale automatically (almost to infinity) to match demand.
And we will only pay for those resources we consume. Furthermore, leading cloud providers include a free layer by means of which a large amount of resources can be used free of charge on a monthly basis.
When we talk about Serverless it is important to clarify that this term is used to refer to several things: A methodology, a framework and an organisation.
Serverless architecture is a completely vendor-agnostic methodology. Framework Serverless is a multi-provider, command-line tool that automates many tasks and saves us from doing them by hand.
This stack provides a set of utilities for working on the serverless services of several providers. And the company that develops and maintains this framework is Serverless Inc. The Serverless framework currently supports the following providers:
Serverless is commonly associated with FaaS (Function as a Service), a technology that was born in 2014 in hook.io and was continued, among others, by AWS Lambda, Google Cloud Functions, Microsoft Azure Functions and IBM/Apache OpenWhisk.
AWS Lambda was not the first Serverless service to be operational on the market, but it has become the most popular. It supports Java, Node.js, C#, Python and Go. It is integrated with the rest of services in the Amazon ecosystem: API Gateway, S3, RDS, Kinesis, DynamoDB, SNS, etc. It can be monitored with CloudWatch and is used by companies such as Netflix in big projects.
Azure Functions is Microsoft Azure’s proposal. It has been on the market for about 2 years. It allows using C#, F#, Java, Python, PHP, Batch, Bash and PowerShell. It is integrated with many Azure services, including Cortana.
But, in addition to these services – which are the best known, there are many open source projects, such as Kubeless, Fission, OpenFaaS and Riff, that make it possible to minimize vendor lock-in while continuing to use Serverless services.
These frameworks are designed to be deployed on Kubernetes clusters, on Swarm and on Docker. And they provide an open source Serverless environment where we can run our pieces of code, in either a public or a private cloud. They support a plethora of languages: Java, Python, Node.js, Ruby, PHP and more.
In addition, they can be integrated with the main Cloud providers and with the Serverless framework mentioned above. They support different messaging systems, such as Kafka, and can be tailored to different monitoring tools, such as Prometheus.
This technology has as many use cases as we can think of, the following among others:
- Backends for mobile applications: Its functions allow the backend of mobile applications to be extended to deal with and issue the necessary events.
- Web application backends: As in the previous case, the processing that the backend of a web application requires can be supplemented with additional functions. For example, to process orders from a queue and store information in a database.
- Webhooks: For managing events in the form of HTTP(S) requests that are generated from third-party sources like e.g. GitHub or Slack and thus build workflows.
- APIs and microservices: Applications may be created from functions that have low coupling and are compiled, deployed and scaled in a fast, automatic manner according to demand.
- Data processing/ETL: By compiling data and processing them in near real time. It can be applied to the processing of files, data from websites, and pictures and video.
- Running scheduled tasks: Running actions on a periodic basis or at a specific point in time.
- IoT: An ecosystem made up of thousands of devices is the perfect example of the capacity to process, transform and store data that Serverless services might have.
And, on top of this, there are other services that can also be considered serverless computing services from a conceptual point of view:
- Products for APIs (Cloud Endpoints, API Gateway).
- Messaging and data streaming systems (Cloud Pub/Sub, Kinesis, SNS, SQS).
- Data processing services (Cloud Dataproc, Cloud Dataflow, Elastic MapReduce).
- Data analytics services (RedShift, BigQuery, Datalab, Datastudio).
- And all Machine Learning and Artificial Intelligence services and APIs (ML Engine, Auto ML, API Speech, API Vision, API Video Intelligence, API Translation, API Natural Language, Comprehend, Lex, Polly, Rekognition, Transcribe, Translate).
With all this we can build complete architectures for our applications based on Serverless technologies.
Not too long ago, to set up microservices, event buses or stream processing engines you needed large clusters with a lot of servers that had to be maintained and kept running at all times. But now none of that is necessary anymore.
With a Serverless approach, these architectures eliminate the need to keep the servers always on. This makes these new systems significantly lighter in terms of operational cost and complexity, while bringing down the cost of development, and the scaling via functions becomes more economical.
Thanks to all these advantages and to the large number of products on the market, the use of Serverless computing is experiencing rapid growth. It has become a very powerful tool for rapid innovation.
With Serverless we are building a large number of software products and making them available to users without having to worry about the machines. Perhaps we will no longer have to think about servers, as Vogels and others predicted two years ago.