What are Microservices?

As set out by Lewis and Fowler, microservices are defined as an architectural style that follows the following architectural decisions:
A single application is to be comprised of a suite of small services.
Each service is to run its own process and communicate via lightweight mechanisms, such as a HTTP resource API.
Services are to be built around business capabilities.
Services are to be independently deployable via the use of fully automated deployment machinery.
Services are to adhere to a bare minimum of centralized management, thus, may be built on varying languages or persistence technologies.
Being part of the distributed architecture family as well as being its own unique architectural style, microservices instantiates architectural characteristics that may be unique to the style itself or belonging to the distributed architecture family. Such characteristics, specifically within the scope of this project's resource-sharing system, is outlined within the requirements section and expanded upon the design section of this report.
History of Microservices
Microservices was first formalized by a blog post, "Microservices: a definition of this new architectural term" by Fowler and Lewis. It was within this blog post that defined the core architectural characteristics of microservices such as "decentralized governance", "decentralized data management" and "componentization via services".
Service-Oriented Architecture and Microservices
Although microservices is often seen as an evolution of the pre-2010s service-oriented architecture, it is important to note that most textbooks and articles "reject the SOA label entirely" and define microservices as its own independent architectural style. Both styles are briefly compared within the evaluation section.
Problems Microservices Tries to Solve
Through the use of service decoupling, independent deployment and maintainability as well as a strong focus on automated infrastructure and evolutionary design — microservices aims to provide an architectural style that solves the issues that monoliths face when scaled or go beyond their intended lifespan. Through service modularisation and API-only communication, microservices abstracts the underlying implementation of partner services, opposed to monoliths which are tightly coupled and thus require a failure in one component to cascade to other components. These two core characteristics further help increase the flexibility of the software by providing developers the choice of using the most suitable tools per specific service. Longevity and scalability of the software is also improved as decoupled services with API-based communication can be independently updated, scaled or swapped out.
Microservices further complements the devops movement by leveraging automated deployment machinery and tooling. With a focus on business capability and a product building mentality, it promotes the notion of continuous improvement and autonomous cross-functional teams — breaking the status quo of outdated monolith-based notions such as siloed functional teams and project-oriented development.
Background Literature
Although microservices architecture is fairly new, with a majority of research and information stemming from enterprise-there is a prominent paper that tried to explore teaching concepts within the scope of a microservices architecture. "Teaching Complex Systems based on Microservices" by Cordeiro et al. explores how microservices is a current challenge in complex systems development, and how it may be leveraged as a teaching environment for senior undergraduate students of Computer Science. The paper delves into illustrating how the use of microservices in an academic context can promote in fostering teamwork and simulating industry environments. Cordeiro et al. took an approach of assigning students to develop a reactive-based microservices system. The class was divided into bounded-context teams, with focus on agile practices. The learning process included both lectures and practical implementation of concepts found in microservices such as patterns, tooling and deployment processes. Reviews of the course were under the impression that the course was successful. As the research popularity of this architectural style grows in industry, with a plethora of conference papers, industry-focused articles and text-books, there too is a growing interest in equipping students on both a masters and undergraduate level, with the knowledge and toolset for exploring microservices.
Subscribe to my newsletter
Read articles from Marco directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Marco
Marco
Senior DevOps Engineer exploring the world of distributed systems