Abstract

Context. Since its proclamation in 2012, microservices-based architecture has gained widespread popularity due to its advantages, such as improved availability, fault tolerance, and horizontal scalability, as well as greater software development agility. Motivation. Yet, refactoring a monolith to microservices by smaller businesses and expecting that the migration will bring benefits similar to those reported by top global companies, such as Netflix, Amazon, eBay, and Uber, might be an illusion. Indeed, for systems that do not have thousands of concurrent users and can be scaled vertically, the benefits of such migration have not been sufficiently investigated, while the existing evidence is inconsistent. Objective. The purpose of this paper is to compare the performance and scalability of monolithic and microservice architectures on a reference web application. Method. The application was implemented in four different versions, covering not only two different architectural styles (monolith vs. microservices) but also two different implementation technologies (Java vs. C#.NET). Next, we conducted a series of controlled experiments in three different deployment environments (local, Azure Spring Cloud, and Azure App Service). Findings. The key lessons learned are as follows: (1) on a single machine, a monolith performs better than its microservice-based counterpart; (2) The Java platform makes better use of powerful machines in case of computation-intensive services when compared to.NET; the technology platform effect is reversed when non-computationally intensive services are run on machines with low computational capacity; (3) vertical scaling is more cost-effective than horizontal scaling in the Azure cloud; (4) scaling out beyond a certain number of instances degrades the application performance; (5) implementation technology (either Java or C#.NET) does not have a noticeable impact on the scalability performance.

Highlights

  • T HE evolution of software architectures has been driven by the need to achieve a better separation of concerns

  • We focus on application performance – interprocess communication (IPC) required between microservice components introduces substantial overhead when compared to intra-process communication used in

  • This section discusses the results of our study – we address research questions stated in the introduction regarding performance differences between monolithic and microservice applications, scaling approaches, and implementation technologies

Read more

Summary

Introduction

T HE evolution of software architectures has been driven by the need to achieve a better separation of concerns. The first is a traditional approach in which an application is built with a single code base that includes multiple services. These services are not independently executable [4]. A. MONOLITHIC ARCHITECTURE Enterprise applications are often internally built according to the classic three-tier model and consist of: (1) user interface code (typically HTML pages and JavaScript running in a browser on the user’s machine); (2) server-side business logic which handles HTTP requests, executes domain logic, retrieves and updates data from the database, and selects and populates HTML views to be sent to the browser; and (3) database backend [34]. When a new version of an application is deployed, it replaces the previous version of the application in a single step (for example, to deploy an application under the JEE Application Server, a single EAR/WAR file containing the application executable must be copied to a designated folder)

Objectives
Methods
Results
Conclusion
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call