Is the future serverless? Chances are every developer around you is having this conversation. But calling this computing execution model “Serverless” might be a misnomer – this computing model does use servers, however here the user does not need to manage them. Serverless, in short, is a backend service where the cloud provider dynamically allocates and charges the user only for the compute resources and storage needed to execute a particular piece of code. For the developers, there are absolutely no servers to manage and provision.
Serverless has been enthusiastically welcomed by the developer community especially as methodologies like DevOps become the default mode of software development. Serverless gives developers the advantage to focus on the business goals of the code they are working on rather than allocate mental bandwidth to infrastructure questions. On the costs side, since organizations pay for compute resources in a granular manner, the obvious cost advantage is hard to ignore.
With the added benefits of automatic scaling, accelerated speed of deployments and updates, and enhanced availability and decreased latency owing to the capability of running code close to the end-user, it is hardly a wonder the developer community is attracted towards Serverless.
So, what do Node.js developers need to know about serverless?
Before jumping on to the Serverless bandwagon, Node.js developers need to understand the different cloud computing service models that are related to Serverless.
Infrastructure as a Service (IaaS) – IaaS is where the infrastructure is delivered to “customers” on-demand while being fully managed by the service provider. You don’t worry about anything physical, be it networking, storage, servers, virtualization.
While the end-user doesn’t need to worry about maintaining servers, in IaaS you still have to take care of third-party updates, application run time, and data storage. With no restrictions in terms of system architecture, everything can be set up as per demand. However, since there is no ready solution provided by a vendor, application scaling in IaaS could become a challenge.
Platform as a Service (PaaS) – PaaS provides developers the capability to deploy applications without the worry of managing the underlying hardware that powers them. Developers do not need to maintain operating systems and application runtime and there is almost always a solution that enables automated application scaling. In PaaS, however, the system runs the servers in long-running processes. The user thus is charged per the running time even with a complete absence of traffic.
Function as a Service (FaaS) – In between the PaaS and the SaaS model lies a sweet spot called FaaS. In FaaS, the user is charged per function execution and these functions are executed per request. FaaS allows for automatic scaling and removes the need to do capacity planning to enable application scaling. The only challenge with FaaS perhaps is its inability to handle long-running processes.
Backend-as-a-Service (BaaS) – BaaS is a cloud model that allows developers to farm out the backend of application development so that they have to only manage the front end. In BaaS, developers get access to pre-written software for activities that occur on servers, like user authentication, push notifications (for mobile apps), remote updating, and database management and, as well as cloud storage and hosting.
Software as a Service (SaaS) – In SaaS, everything is managed and controlled by the cloud provider. The user can only use the software provided in the model (think Microsoft Office 365, Dropbox, etc.) and in some cases, it is possible to add certain integrations using APIs.
How does Serverless help Node.js developers?
Making backend easy
While building the server for Node.js applications is easy, the backend processing of messages can be a challenge and can seem hard to manage and maintain. The absence of too many tools that aid background processing also adds to the complexity. While scaling HTTP request messages in many platforms is easy, however, getting the queues right often proves tricky.
With serverless, developers can get this function up and running and also scaling dynamically. The added advantage is that since we only pay for execution in most serverless frameworks, the cost never outweighs the benefits.
E2E Frameworks get a break
Serverless removes the worry from a lot of things, like the need for Node.js frameworks like Express.js when you just want to push out a function. Developers do not have to worry about the full stack of things like HTTP entry points that they need to manage. The worries of having too much code are drastically reduced. This also makes applications lighter.
Microsoft Azure Functions, for example, have bindings to various services and don’t need the SDKs to talk to. Serverless enables developers to just choose bindings and eliminates the need to work with SDK’s making things simpler, faster, and more effective for Node.js developers.
Easier horizontal scaling
With FaaS, it becomes infinitely easier to achieve high scalability with functions. With no cause for worry about instance counts, implementing patches, or managing VMs, the application easily scales as soon as application traffic increases. The VMs disappear as the traffic increases and the scaling happens dependent on requests and usage.
Apart from that, Node.js developers enjoy the other Serverless benefits as well – namely, the advantage of remaining focused on business logic without infrastructure worries, auto-scaling, and the cost-benefit of only paying for what they use.
The big draw of Serverless lies in its ability to throw a function and get two services to talk to each other. Having a function do the heavy lifting for the developer simplifies the development process, accelerates development speed, and aids competitiveness. What’s there not to like?