
Multi-Cloud Handbook for Developers
By :

The evolution of application architecture has seen a shift from integrated monolithic structures to the decoupled services of service-oriented architecture (SOA), leading up to today’s microservices and containers. These advancements prioritize flexibility and efficient, independent deployment, reshaping software development in the cloud era. Let’s explore each one.
In the early days of computing, when applications were developed as monolithic architectures, every functionality was bundled together in a single application. The waterfall approach was king, with each development phase (requirements, design, implementation, testing, deployment, and maintenance) occurring sequentially. The advantage of monolithic applications was their simplicity as developers could easily understand the entire application and its dependencies. However, monolithic architectures had significant drawbacks:
To overcome the limitations of monolithic architectures, developers began to adopt SOA in the early 2000s.
SOA is an architectural style that structures an application as a collection of loosely coupled, reusable services. These services communicate with each other using standard protocols and can be combined to create composite applications. The key advantages of SOA include the following:
While SOA helped solve some challenges of Monoliths, it also comes with drawbacks, such as the increased complexity of managing and coordinating multiple services and the overhead introduced by the communication protocols between services.
Microservices, an evolution of SOA, are small, independent services that can be developed, deployed, and scaled independently. They communicate with each other via lightweight protocols such as HTTP/REST or message queues. Microservices offer several advantages over monolithic architectures and traditional SOA, including the following:
Containers, another key technology in the cloud-native landscape, provide a lightweight, portable way to package and deploy applications and their dependencies. Containers isolate applications from the underlying infrastructure, enabling them to run consistently across different environments. This isolation simplifies deployment and scaling, making containers perfect for microservices-based architectures. We will learn more details about this topic in upcoming chapters.
Figure 1.1 depicts the evolution from monolithic, where components are interdependent, to SOA, which introduces a service-based structure, and finally to microservices, where services are fully independent, embodying cloud-native flexibility and scalability:
Figure 1.1 – The evolution from monolithic to microservices-based systems