Introduction
The “as a service” business model continues to grow rapidly, largely thanks to the rise of cloud computing. “As a service” offerings deliver IT products and technologies such as software, hardware, and data storage to consumers via the Internet, rather than having to install or manage them themselves.
Serverless and containers are two such “as a service” technologies that have seen increasing adoption in recent years. In this article, we’ll explain the difference between serverless and containers, so that you can understand for which situations each technology is best suited.
What is Serverless Computing?
How Serverless Computing Works
The term “serverless computing” refers to the execution of a function, or code, that runs on-demand, typically in response to a specific event or trigger. A developer needs only specify how much RAM and CPU to allocate for the function, what trigger or event should cause the code to execute, and then finally upload the function source code. There are no servers to maintain – hence, “serverless”.
Like almost all other services from cloud providers, Serverless is a metered service meaning you pay for only what you use. This means you are only charged when your function is actually handling a trigger or event. Just like when you turn your lights on in your house, you only pay when you have them on.
Is Serverless Really Serverless?
Serverless computing still requires servers to run applications; however, you aren’t responsible for provisioning and managing servers, setting them up, or shutting them down. This means that computing is only “serverless” in the eyes of the user.
Serverless vs. Microservices
Serverless computing is sometimes confused with or compared with another popular cloud computing paradigm: microservices. In the microservices architectural pattern, a large “monolithic” application is split up into multiple smaller “microservices” that interact with each other.
Serverless applications can use microservices, and microservices-based applications can be serverless. The term “serverless” refers to how the application is executed, whereas the term “microservices” refers to the internal structure of the application.
Serverless Advantages
The two biggest advantages of serverless computing are:
- Ease of use: The main advantage of serverless computing is that many of the technical complications of using the cloud are taken out of your hands. You don’t have to manually scale the application as your user base grows, or perform maintenance on the server hardware—all of this is handled for you by the cloud provider.
- Pricing: The lower cost of serverless is often cited as a benefit—but in terms of pricing, serverless actually has both pros and cons. Serverless can be cheaper than traditional cloud computing: you pay only for the resources that you actually consume. However, many cloud vendors charge you overhead to use serverless platforms to compensate for the extra work they have to do behind the scenes. Before switching to serverless, make sure you understand how this move will impact your IT budget.
Serverless Use Cases: When Should I Use Serverless?
As you might expect, you might choose serverless when you don’t want, or need, an always-running server. Serverless can be cost-effective for applications that handle very few events or that need to scale up to thousands of events per second, on-demand. Serverless scales up based on the actual event/trigger demand, as opposed to a container or VM auto-scaling which determines when to scale by resource demand, e.g. CPU usage.
What are Containers?
How Containers Work
Essentially, a container is a package that consists of an application’s source code bundled together with items such as its libraries, frameworks, settings, and configurations. This package can be easily transferred between different IT environments, helping the application run predictably and reliably.
Although containers are far from being universally adopted, technologies such as Docker and Kubernetes have made it significantly easier for organizations to use containers in production.
Differences Between Containers and Virtual Machines (VMs)
Containers are often contrasted with another virtualization technology: virtual machines (VMs). A VM is a software application that emulates computer hardware. You can create VMs with different virtual graphics cards, disks, network interfaces, USB ports, kernel or OS versions, etc. and multiple VMs can run on the same physical machine. VMs are abstractions at the hardware level.
On the other hand, containers run on top of a given operating system and all share the same OS kernel. The underlying, or host, OS manages resource permission (CPU, Memory, etc.) and namespacing (one container cannot see another container’s processes or files). Because containers don’t have to emulate an entire physical server, they are much more lightweight than VMs. Containers are abstractions at the OS level.
Advantages of Using Containers
Some advantages of using containers include:
- Portability: As mentioned above, containers combine source code with the dependencies that the application needs to run in separate environments. Recently, OSX and Windows have gained the ability to run Linux based containers without the need for a VM intermediary host, by using native hypervisors.
- Consistency: By behaving in a consistent manner, containers make it easier to develop and test applications.
- Less overhead: Containers don’t emulate physical hardware like VMs do, which means that they require fewer resources to run.
Use Cases: When Should I Use Containers?
Containers are best suited for users who want to guarantee consistency when running applications in multiple environments. For example, if you want to “lift and shift” your applications from on-premises to the cloud, packaging them in containers can ensure that they behave identically in both locations.
Similarities Between Serverless and Containers
While they differ in purpose and nature, both serverless and containers share a broader goal: helping users simplify and streamline their applications by abstracting away much of the complexity during and after deployment. Once code is production-ready, serverless and container technologies combine to ensure that the application is appropriately deployed and scaled. This means that both serverless and containers can be a vital part of continuous integration/continuous delivery (CI/CD) workflows.
Serverless or Containers? The Answer Depends on Your Needs
Whether you use serverless computing, containers, or both in the same project, you should understand the differences and similarities between serverless and containers:
- Serverless computing runs applications on-demand in response to a certain event or trigger, saving you the trouble of starting and managing application servers.
- Containers are a lightweight virtualization technology that wraps source code together with application dependencies, allowing easy portability and consistency.
- Both serverless and containers facilitate the process of deploying applications in the cloud and can make portability and scaling less hands-on for developers.