What is monolithic architecture

Monolithic software architecture

Monolithic software architectures combine their functional elements in a single, inseparable and homogeneous structure. In general, the software architecture defines how individual software components are connected to one another and which task areas they each cover.

A monolithic structure does not follow the approach of an explicit division into subsystems or components. These systems are often strongly tied to resources such as hardware, certain data formats and proprietary interfaces. Client-server architectures or generally distributed systems are in contrast to the strictly coupled monolithic architectures. Older mainframe programs or many DOS and Windows 3.x applications are often based on monolithic software architectures.

Software architectures are generally subject to a great deal of freedom in terms of their design. In the past, this led to software systems that were usually not divided into subsystems or created on the basis of individual, interacting components. These monolithic structures can still be found today in older systems and can have a number of disadvantages:

  • Software systems are neither maintainable nor expandable, as the parts of this system can only be modified and adapted to new conditions with considerable effort.
  • Software systems of a certain size are no longer manageable due to the lack of modularization; modifications can have unforeseeable side effects.
  • Parts of the software system cannot be reused.
  • Due to the rigid coupling of parts of the software, these cannot run concurrently, for example for load distribution on distributed systems.
Software applications integrate at least the following functions:
  • The presentation, i.e. the provision of an interactive interface for the user through the application
  • The application logic that provides the actual functionality of an application

Functional coupling in monolithic architectures

If the functionalities of such an application system were to be mapped in a monolithic software architecture, the individual functions would be closely linked and implemented in a centralized manner, and the above-mentioned disadvantages would result. On the other hand, today there are modern application architectures, which are implemented as so-called rich clients and the said GUI applications are based on separate components, the interaction of which is organized via carefully defined interfaces. These are, for example, the typical client-server applications. Overall, there has been a paradigm shift away from monolithic architectures towards service-oriented architectures (SOA), which are based on the flexible use of logically self-contained and only loosely coupled services - the services. The SOA architecture is an abstract architecture pattern that provides the basis for the distributed provision, the search for and the use of services.

An example of a completely different type of monolithic architecture is the kernel of the Linux operating system - this is also referred to in general as a monolithic kernel. In Linux, this kernel encapsulates a number of basic functions that are closely linked to the machine and other hardware resources. Interfaces are defined for an abstraction of these dependencies. Specific extensions and additional modules can then be built on the basic functionality made available by the kernel.