Chapter 10. Strangling Monoliths
Microservices have been increasingly adopted by many organizations to better address their software needs. Microservices encapsulate different parts of an application as independently deployable units that contain their own application logic, data, and more. After the term “microservices” appeared, previous systems or architectures developed were labeled as “monoliths.” Unfortunately, the term monolith gained a bad connotation because these systems are often considered to be legacy systems or Big Balls of Mud. Developing a system using the monolith architecture style is not necessarily a bad design decision or an anti-pattern. Sometimes it is the right choice. Building any kind of a Distributed Architecture can be very difficult and has many challenges. A well-designed Modular Monolith is often the best choice for organizations, especially when starting a new project.
Typically, a monolithic application is packaged as a single deployment file that runs on an application server. The monolith consists of many components that may contain business logic from various subdomains. These monolith components can include services, modules, libraries, or any type of implementation. They also have dependencies among themselves that typically increase over the years. Monolith components that are visible on the network may use protocols, message formats, and API design standards that are not fully compatible with network calls being used in new client applications. ...