Everyone is trying to make their web applications faster, more scalable, and easier to maintain. There’s a huge push moving us more and more to the cloud for our hosting meaning there are fewer shops that have the cold server closet onsite. With everything moving towards the cloud, we aren’t always sure what OS our “server” is using. So we might as well take it a step further and get rid of the server all together.
That’s what serverless apps are trying to do. The concept has been around for a few years, but it’s starting to pick up speed. Companies are starting to experiment with serverless applications because of all the benefits they provide, but just as many companies are hesitating because of the potential issues. By the time you finish reading this, you should understand what the heck a serverless app is, the benefits and potential issues, and how to architect one.
What Serverless Means
The term “serverless” is weird because you know you need a server to host anything online. What’s really happening is kind of a distributed server thing. So you’ll have the code for your web app (HTML, CSS, JS) hosted somewhere and then all of your back-end stuff will be taken care of elsewhere. You’ll make API calls to other services and use tools like Azure Functions or AWS Lambda to handle the data.
You can think of a serverless app as a front-end that calls 3rd party APIs when an event happens. That means nothing is sitting there waiting for an event to happen or a call to come through. Unlike with normal web apps, you don’t have to handle the back-end at all. Everything happens dynamically which frees up a lot of resources for your application.
Pros/Cons Of Serverless Architectures
It’s hard to describe the serverless architecture without talking about the pros and cons of it. There are just as many reasons that serverless apps are starting to become more popular as there are reasons for keeping monolithic applications. Here are a few of the pros and cons of serverless app.
- You don’t have to worry about your entire back-end crashing because of one bug
- No more big deploys because your entire back-end is distributed
- You don’t have to know a specific back-end language because you don’t have to write any code
- Incredibly fast to set up
- Scalable from the start because you don’t have to worry about how many requests are hitting your server
- You give up a lot of control over how the code is implemented and how the original data is processed
- User experience could suffer if the app is architected properly
- There are more potential security risks since you are depending on third-parties
- Testing locally can be difficult
- A lot of discipline is required to keep the app from sprawling out of control
You have to be sure that your app really needs to be serverless or not. Not every web app needs to be serverless because monoliths and cloud-hosting provide their own sets of pros and cons. It’s not a trivial task to switch your app over to a serverless architecture. It’s not something you can gradually do either. Once you commit, you have to be all in.
Setting up a serverless app isn’t difficult, it’s all the thought and design that happens before you start building. When you are sure you want to go forward with a serverless web app, here’s a simple architecture you can follow. One of the most interesting things about serverless apps is the absence of a back-end. That means developers only have to focus on the front-end and the architecture for the APIs it calls.
How To Architect A Serverless App
The main thing you need to understand is how to setup a serverless app. The architecture is simple, but that’s what makes it tricky. You only need five main components for a serverless app to work: a web server for your front-end, some lambda functions, a security token service, some user authentication, and a database.
It really is that simple. You just “plug in” the APIs you need to use and you use them when the user triggers an event. There are some libraries for Node you can use to make serverless apps, like Claudia.js or Apex to kick-start your apps. As far as the lambdas you use, the most popular options are AWS Lambda and Azure Functions.
One scenario you would consider using a serverless app is if you know there will be an increasing number of users. One of the strongest aspects of the serverless architecture is its ability to scale. A couple other scenarios include doing live broadcasting and processing IoT data, like those home monitoring systems.
Have you had any production experience with serverless apps? I’d like to hear some perspective on whether they are really worth the effort or not. I’ve played around with them and they seem really cool.
You can stay in the loop with what’s happening in the web development world when you sign up for my emails. You can click here to do that. There’s hundreds of people who already get the updates, so why not you too?