What is Serverless Computing?
One obstacle that application developers have struggled with for a long time is not only having to know how to code an application, but also having to learn all of the ins and outs of the entire server environment. In a perfect world, developers would be able to just sit down and write the code needed to create outstanding applications. Developers would be able to choose what language to write the application in depending on what the application needs and not have to stress over what the server can handle.
One solution to solve this nagging problem is Serverless computing. The name is very misleading. Serverless computing does not mean the lack of any servers; this would be impossible. Instead, the servers are managed by a third party and it is their responsibility to handle what needs to be done to support the applications of the developers and users.
In a serverless environment, the vendor hosting the application will provide either back-end as a service (Baas) or functions as a service support. With BaaS, developers are able to connect their applications to the cloud’s service by using application programming interfaces (API) and their own preference or the vendor’s own software development kit (SDK). When vendors provide FaaS, the developer can run the applications or even single functions without stopping to build the entire infrastructure needed to run an application.
The vendor controls and manages the servers and services needed for an application to run. Customers can pay for only the actual transactions that happen instead of paying for a server when it is not even being used. When a user calls the application and some type of activity is happening, the developer will get charged for this usage of the server. If no user is interacting with the application, the customer is not charged for the servers the application lives on.
Because only usage is chargeable, customers can easily scale and fluctuations of users do not cause headaches. In an in-house environment, there is a daily battle of ensuring there is enough space and memory to handle the load of users. Administrators try and guess as closely as possible what the load might be and provide servers that can handle the load. When this guess is wrong and space and resources are all consumed, there are outages and downtime. It is not always simple to add more space and resources as necessary.
In a serverless environment, space and resources are scaled as needed by the service provider. The developer does not have to think about when and how to spin up more servers. They can dedicate their time and effort into producing and maintaining the perfect application for their users. The developer can write many small functions instead of entire applications as well. Serverless environments are perfect for running code that handles one small, specific function.
Top providers of serverless services include Amazon Web Services (AWS), Google Cloud Platform, IBM Bluemix, and Microsoft Azure. AWS has been around the longest and has a large amount of the market share. Developing for AWS is easy for developers because a large community of users have provided resources to train developers and handle most issues as they arise. Having such excellent support often means the difference between smooth development and an unacceptable amount of downtime for the users as issues have to be solved.
Developers no longer need to build and manage physical or virtual environments to host their applications. Spending money on a server that may only be needed infrequently is a waste of resources. Serverless computing architecture is not a great option in all circumstances and has drawbacks. Developers need to trust the vendor they choose will provide the services requested with no downtime. Security issues need to be addressed when designing applications. Lambda is not compliant with certain HIPPA and PHI regulations. Long-running applications may not be cost effective. As long as the limitations of the technology are addressed, serverless architecture seems to be the way of the future for cloud computing.