Posts

Overview of Microservice Architecture

Microservices form the basis of computer applications built upon modular components that are independent of each other.

A microservice is a modular software component that does one defined job. Moreover, a microservice architecture is a method of building a large-scale computer application / information system as a collection of small, discreet modules that work independently of each other but can be used interchangeably.  Within this architecture, each microservice operates as a mini-application that has its own business logic and adapters for carrying out functions including database access and messaging. Microservices utilize application programming interfaces (APIs) to communicate with each other.

According to IBM, microservices architecture is an approach in which a single application is composed of many loosely coupled and independently deployable smaller services.

Characteristics of Microservices:

With a microservice architecture, a complete application is built as a set of independent components that each have their own functionality and each run its own unique process. Microservices communicate autonomously without having to rely on the other microservices or the application as a whole. Additionally, because microservice are independently run, each microservice can be updated, deployed, and scaled to meet demand for specific functions of an application.

• Independence of Code: The code within a microservices is not shared with other microservices. Microservices do not need to share any of their code with other microservices.

• Precise Scaling: Individual microservices can be deployed within their own run-time environment that includes its own processing and memory that can be changed at any time to keep up with demand for the microservice.

• Specialization: If/when a microservice becomes larger and more complex, it can be broken down into smaller microservices.

• Distributed Work Effort: Autonomous teams develop, deploy, and scale their respective microservices independently without interfering with other the work of microservices teams.

• Technology Independence: Microservices can also be implemented using different programming languages, utilize different databases, and deployed on different software environments.

• Reusable Code: Dividing application into small modules enables teams to use functions for multiple purposes. A microservice written for a certain capability can be used as a building block for another capability.

• Application Resilience: When a microservices fail, only the related functionality fails while the rest of application continues to function. A single failure of a microservice does not cause an entire application to crash.

Key Enabling Technologies and Tools of Microservices:

While just about any modern programming language can be used to create a microservice, there are a number of technologies that have become essential to the way that microservices are deployed and managed. These key enabling technologies allow microservices to have additional impact to an information system and provide maximum value to the computer application.

• Containerization:  A container is a bundling of an application and all its dependencies (i.e. binaries, code libraries, configuration files) within an isolated space, allowing the application to be independently scaled. Additionally, containers enable scaling of microservices resources (i.e. memory and processing speed) independently of other microservices, protect against multiple microservices attempting to utilize the same resources, and reduce the impact of a system failure.

• API Gateways:  Microservices communicate with each other through application programming interfaces (API). API Gateways handle all the tasks involved in accepting and processing concurrent API calls, monitor and control API traffic, manage authorization and access control, and provide additional API security. 

• Messaging and Event Streaming:  Messaging and event streaming are two types of technologies that are used to implement asynchronous, loosely coupled, and highly scalable applications. Further, messaging and event streaming enable microservice connections and communications to be simple, efficient, scalable, and easily managed.

• Serverless Computing:  Serverless is a cloud computing model that leverages on demand provisioning of computing resources and transfers all responsibility of infrastructure management from development and operations personnel to a cloud provider. Moreover, common infrastructure management tasks including scaling, scheduling, patching, provisioning, etc. are completely performed by a cloud provider. Microservices deployed on serverless environments are highly scalable and do not need to be managed by internal operations personal.

Microservice architectures provide many benefits over more conventional monolithic architectures. Microservice architectures remove single points of failure by ensuring issues in one service do not crash or impact other parts of an application. Individual microservices can be scaled out independently to provide additional availability and performance. Development teams can extend capabilities by adding new microservices without unnecessarily affecting other parts of the application.

Share