- August 27, 2020
- 4 minute read
Both serverless computing and containers enable developers to build applications with far less overhead and more flexibility than applications hosted on traditional servers or virtual machines. Which style of architecture a developer should use depends on the needs of the application, but serverless applications are more scalable and usually more cost-effective.
In this article we take a look at the debate: serverless computing vs containers, and offer our insights on both models.
A study conducted last year by New Relic revealed 70 percent of enterprises have migrated a significant number of workloads to the public cloud. From this group 39 percent were using serverless, 40 percent used containers and 34 percent used some sort of container orchestration. This points to how adoption of serverless technologies now matches that of containers, but what is not yet quite clear is the extent of use in production applications.
Serverless is a development approach that replaces long-running virtual machines with compute power that comes into existence on demand and disappears immediately after use.
Despite the name, there certainly are servers involved in running your application. It’s just that your cloud service provider, whether it’s AWS, Azure, or Google Cloud Platform, manages these servers, and they’re not always running.
Rather, you configure events, such as API requests or file uploads, that trigger your serverless function to execute. And when that action is complete, the server goes idle until another action is requested, and you are not billed for the idle time.
In other words, serverless computing is another abstraction on top of the operating system which provides a mechanism to run the application in a lot of smaller pieces. It provides functions or modules to execute application tasks that can be executed on-demand without worrying about underlying operating system and hardware infrastructure. These tasks are generally short-lived and run periodically as per the application requirements. Similar to the way cloud computing need physical hardware, serverless computing need servers as well for any application execution.
Adopting serverless lowers costs, speeds time to deployment, increases scalability and decreases management time for overworked IT teams. Serverless is also great for supporting various microservices and popular with developers for DevOps.
Benefits serverless computing offers tom businesses include:
According to Docker, a container is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it: code, runtime, system tools, system libraries, and settings.
Containers solve the problem of running software when it has been moved from one computing environment by essentially isolating it from its environment. For instance, containers allow you to move software from development to staging and from staging to production, and have it run reliably regardless of the differences of all the environments.
Instead of virtualizing the hardware stack as with the virtual machines approach, containers virtualize at the operating system level, with multiple containers running atop the OS kernel directly. This means that containers are far more lightweight: they share the OS kernel, start much faster, and use a fraction of the memory compared to booting an entire OS.
There are many container formats available. Docker is a popular, open-source container format that is supported on Google Cloud Platform and by Google Kubernetes Engine.
Adoption for both serverless and containers are growing at a rapid rate, according to several surveys and studies. Here are some of the highlights I picked out.
According to Rightscale, serverless is a trop growing cloud service:
Developers who choose a serverless architecture will be able to release and iterate new applications quickly, without having to worry about whether or not the application can scale. In addition, if an application does not see consistent traffic or usage, serverless computing will be more cost-efficient than containers, because the code does not need to be constantly running.
Containers give developers more control over the environment the application runs in (although this also comes with more maintenance) and the languages and libraries used. Because of this, containers are extremely useful for migrating legacy applications to the cloud, since it is possible to more closely replicate the application's original running environment.
It is also possible to use a hybrid architecture, with some serverless functions and some functions deployed in containers. For instance, if an application function requires more memory than allotted by the serverless vendor, if a function is too large, or if certain functions but not others need to be long-running, a hybrid architecture enables developers to reap the benefits of serverless while still using containers for the functions serverless cannot support.
Instead of choosing one or the other, serverless and containers can also be used side by side. Indeed, many companies have found success with a hybrid approach. They:
Both serverless computing and containers offer advantages to businesses looking to scale their workloads. If you have questions about which approach is best for your business, feel free to contact us today to help you out with your performance and security needs.