What is a microservice architecture?
With microservices, all application functionality is divided into small services that strongly correlate with business functions and processes. A microservice is built expressly for independent deployment and communication utilizing lightweight APIs. "Micro" refers to the concise scope of functionality within each microservice, not the amount of code within the service.
The key characteristics of a microservice architecture are:
Functional decomposition: Simplify each service's design such that there is a clean separation of business functions and accommodation of various technology stack constraints.
Single responsibility: Wherever practicable, each service encapsulates a discrete part of the functionality.
Explicitly published interface: A service must publish an interface that is readily consumable by any authorized service.
Independent maintainability: Each service must be independently deployable, updatable, replaceable, and scalable.
Smart endpoints and dumb pipes: Each microservice must offer full command of its domain logic and communicate with other services through a protocol, such as REST over HTTP.
Historically, a microservice architecture arises from an evolution of SOA and cloud computing systems. Many teams go through the journey of decomposing a monolithic application into an equivalent set of microservices. Consider the example of an inventory component or module with a small team dividing into separate sets of functions for reading inventory data, modifying and updating data, verifying data, and posting data to a database.
It's not hard to imagine a range of complexity for these four types of functionality. However, offering a simple arrangement could modify the monolithic app to substitute legacy inventory data functions with new calls to several new microservices. Another evolution of the architecture could expand some of the microservice functionality to handle other inventory data functions. Other applications can use these microservices, and each microservice can be independently updated to preserve existing functionality while also accommodating requests from other services and applications.
A primary objective in microservice development is to build flexible services. Each service provides a limited set of functionality capable of responding to requests from a variety of sources.
Some use cases that greatly benefit from microservices include:
Highly intricate processing applications
Multi-channel applications (mobile, desktop, server, API, and datacenter)
Multi-dimensional cloud computing
Internet of things data analytics and processing
Multi-source, multi-output systems (online payments and e-commerce)
Dynamically scalable systems that include extract, transform, and load (ETL) components
Fraud and anomaly detection
Dynamic machine learning model implementations that connect to operations
One theme that runs through these and other use cases is managing large data volumes. Another is the immediate-response service levels. Microservice architectures are becoming essential for these types of applications, with many companies realizing the many advantages.