Ask Learn
Preview
Please sign in to use this experience.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Context
Nowadays, trends show that market conditions are changing constantly and at a pace we have never seen before. New companies come into mature industries and completely disrupt them while existing companies that have been around for a long time are struggling to survive and to hold on to their market share.
Also, building highly available and resilient software has become an essential competency no matter what business you are in. Nowadays, all companies are becoming software companies. Let’s take for example companies in the retail industry. Before, most companies in this industry competed on who can make products available on the shelves with the lowest possible price. Now companies pursue more advanced and sophisticated techniques to lure customers. Nowadays, it’s all about predicting customers’ behaviors by deeply understanding customers’ sentiments, brand engagements and history of their searches and purchases. There is no doubt that companies who are harnessing these capabilities are more successful and profitable than those that do not.
To win in such market conditions, not only do companies have to have the capabilities to build these kind of solutions, but also they have to build them faster than their competitors. This is why many organizations are rethinking how they are architecting and building solutions so that they can better embrace changes in customers’ and market’s demands. Also, the rise of cloud computing has made organizations embrace design approaches that allow pieces of solutions to be scaled independently to optimize infrastructure resources consumption.
Software Architecture Evolution
Looking at how software designs have evolved over the years, initially applications were mainly monolithic applications targeting desktops. As internet became more prominent, a new style of applications emerged, namely Client-Server. In this type of architecture, we ran some code on desktops while another part of the application ran on a remote server somewhere. The server component tended to group both business logic as well as some kind of data persistence mechanism. As applications grew, there was a need to separate the business logic from the data persistence layer so a new style emerged namely 3-tier in which presentation layer, business logic and data persistence all lived on separate layers. The separation of layers have grown beyond the 3-layers giving birth to the concept of the n-tier architectures in which teams can create flexible and reusable components. The figure below shows a depiction of this type of architecture
Although the architecture above divides the solution into multiple layers, multiple flaws can be pointed out:
Because of the limitation mentioned above, a new design approach named Microservices has gained popularity in the last few years.
Microservices Overview
Microservices is an approach to application architecture in which an application is composed of small, independent and flexible components, each focusing on solving a single domain within the application. The figure below shows a depiction of such an approach
This approach solves a number of limitations imposed by monolithic applications. Some of the benefits you would get by adopting this approach include:
In my next post I will drill deeper into the last point which is a suitable deployment strategy for such an architecture. Stay tuned…
Please sign in to use this experience.
Sign in