DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports Events Over 2 million developers have joined DZone. Join Today! Thanks for visiting DZone today,
Edit Profile Manage Email Subscriptions Moderation Admin Console How to Post to DZone Article Submission Guidelines
View Profile
Sign Out
Refcards
Trend Reports
Events
Zones
Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
  1. DZone
  2. Software Design and Architecture
  3. Cloud Architecture
  4. Serverless Computing vs. Containers

Serverless Computing vs. Containers

Take a look at this article that gives an overview and direct comparison of three ways of resource virtualization: serverless, containers, and virtual machines.

Gaurav Yadav user avatar by
Gaurav Yadav
·
Sep. 03, 18 · Analysis
Like (3)
Save
Tweet
Share
6.25K Views

Join the DZone community and get the full member experience.

Join For Free

Serverless computing has seen a significant adoption over the last couple of years, with all the major public cloud providers enabling serverless architectures. AWS Lambda, Azure Functions, and Google Cloud Functions provide an abstraction layer to deploy small pieces of code instead of monolithic applications and further simplifies public cloud consumption. But, serverless architecture is not suitable for all the applications and has its own issues that need to be considered.

Virtual machines (VMs), containers, and serverless are all different mechanisms of resource virtualization and have evolved to simplify and manage resources. Moving from one mechanism to another generally involves a significant workflow transformation and care needs to be taken before selecting the right computing model.

Traditionally, VMs have been the de facto standard for infrastructure virtualization. Hypervisors are used to virtualize the hardware resources and the operating system is unaware of underlying resource management. For a given hypervisor, each VM has its own operating system and hypervisor virtualizes hardware such that each VM believes it has a dedicated set of resources.

With the booming popularity of containers came a new way of resource utilization by virtualizing the operating system itself instead of the physical hardware. VMs consist of the entire operating system along with the application-specific libraries, but containers comprise only the libraries needed to run the applications with a single operating system being shared by all the containers.

Enter serverless computing. 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.

Benefits seem boundless; 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.

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 the adoption of serverless technologies now matches that of containers, but what is not yet quite clear is the extent of use in production applications.

Another study from Cloudability shows adoption of containers and serverless computing services is growing in the triple digits quarter to quarter, based on data in late 2017. Specifically, for Amazon Web Services users, container adoption grew 246 percent during the fourth quarter of 2017, and 206 percent the quarter before that, with most customers leaning toward Kubernetes as a popular service. That study also showed huge growth in adoption of serverless computing among cloud users, growing by 667 percent among the sites tracked. Serverless continues to be attractive to organizations since it doesn't require management of the infrastructure as companies continue to build cloud-native architectures.

Let's consider two different use cases to figure out the pros and cons of serverless and container-based architectures.

Restaurant Review and Reservation Application

Our application design will consist of two databases that store information related to restaurant reviews and reservation transactions, respectively. Our application browser should be able to perform restaurant searches based on certain keywords, submit restaurant reviews and reserve a table. Serverless architecture for such an application can be designed as shown below: Database as a service (DBaaS) is utilized for restaurant details and reservations using DynamoDB and RDS. AWS Lambda provides FaaS (functions as a service) for executing these tasks:

  • Restaurant search
  • Restaurant review
  • Restaurant reservations

Amazon API gateway is being used as the HTTP server, redirecting requests to above Lambda functions. These functions are ephemeral tasks that can be invoked on-demand and terminated after execution. Serverless architecture for this application removes the need for physical servers, sysadmins and over-provisioning of resources for handling the peak user traffic scenario.

Container-based architecture can also be used for this implementation, but it will involve an overhead of another container orchestration layer along with an interface that can handle restaurant tasks and replaces the API gateway. Serverless architecture for this use case allows businesses to introduce new features by simply adding new Lambda functions and scale application traffic on-demand.

Continuous Integration and Continuous Deployment (CI/CD) Pipeline

The CI/CD pipeline is a key component of delivering modern software frequently in small increments. As part of the CI/CD pipeline, software needs to be rebuilt whenever any code change is made, execute regression and function tests and redeploy software if needed. This seems like a perfect fit for serverless architecture, which can be developed as shown below.

If the build task starts taking a large amount of time or testing involves long-running operations, serverless architecture might not work. All the public FaaS providers such as AWS, Azure and Google Cloud have a maximum duration of time (between 300 and 540 seconds) that is allowed to run any given task. For such unpredictable long-running tasks, it is beneficial to run using a container-based architecture that can shut down tasks after execution at any given point of time. Container-based architecture for the CI/CD pipeline can be built as shown below:

It involves deploying container orchestrator such as Kubernetes that can efficiently run containers in a distributed environment. The infrastructure orchestration tool Chef is used to coordinate with Kubernetes and schedule containers when needed. Users still have the option of eliminating server management by running containers in the cloud.

Finding the Balance in the Enterprise

Comparing containers vs serverless computing is like comparing running an application on-premises in the local data center or running it in the cloud. At the end of the day, someone must manage the infrastructure and pay for it. Containers are best suited to build a serverless computing framework and relieve the end user of infrastructure management-but comes at a cost.

Users need to find a balance between the cost and complexity such that serverless computing can justify the extra cost of offloading infrastructure management. Serverless computing and FPaaS (function platform as a service) are best suited for running applications in the public cloud and containers are useful in transforming on-premises hardware resources into a private cloud.

The studies don't lie-both containers and serverless computing are booming, and here to stay. Which one will win in the end?

Kubernetes Serverless computing Computing operating system application Continuous Integration/Deployment Cloud computing Amazon Web Services Architecture

Published at DZone with permission of Gaurav Yadav, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • How Observability Is Redefining Developer Roles
  • Fraud Detection With Apache Kafka, KSQL, and Apache Flink
  • Upgrade Guide To Spring Data Elasticsearch 5.0
  • How To Create and Edit Excel XLSX Documents in Java

Comments

Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends: