User:DKinzler (WMF)/Monolith
What's a monolith? The answer seems to depend on context. Most generally speaking, it's "one big chunk", referring to a lack of modularity. But what exactly makes it "one", and what kind of modularity is meant, depends a lot on what the speaker is interested in.
In software architecture, "monolith" tends to refer to a tangled "big ball of mud" with no clear component boundaries. As software architecture is mostly concerned with reducing static coupling by encapsulation, modularity is achieved by creating and enforcing component boundaries and constraints.
In system architecture, "monolith" tends to refer to a single deployment unit that performs many functions (as opposed to a micro-service, which only performs a single function). As system architecture is mostly concerned with dynamic behavior, modularity typically refers to separation of components into processes that communicate over the network.
Typically, a given piece of software will match both definitions (or neither of them): a single deployment unit tends to get internally tangled; Conversely, isolated components tends to be deployed separately if possible. However, some systems my be internally structured, yet get deployed at once:
A "structured monolith" (or "modular monolith") is a piece of software that performs multiple functions, has a modular internal structure, but is deployed as a single unit. It provides simple deployment, low latency, and simple dynamic behavior. However, maintaining the internal structure of the monolith takes conscious effort, since it has a natural tendency to degrade into a tangle. Also, monolithic deployment prevents individual functions to be isolated for scaling, security, etc.
Resources:
- :en:Monolithic application
- :en:Monolithic system
- http://www.laputan.org/mud/
- https://martinfowler.com/articles/dont-start-monolith.html
- https://www.thereformedprogrammer.net/my-experience-of-using-modular-monolith-and-ddd-architectures/
- https://searchapparchitecture.techtarget.com/tip/Understanding-the-modular-monolith-and-its-ideal-use-cases
- https://microservices.io/patterns/monolithic.html
- https://www.shopify.com/partners/blog/monolith-software