Eine monolithische Architektur liegt dann vor, wenn alle Funktionen eines Software-Systems nur an einer einzigen Stelle leben - in einem “Tier”. Man spricht hier auch von “single-tier-application” oder “one-tier-application”, d.h. die Applikation mit ihrer Presentation-Logic, Business Logic und Data Access Logic, sowie die Datenbank werden auf einer Maschine betrieben.
Ein gegenteiliger Ansatz ist die ”multi-tier-application”, bei dem man diese Teile trennt und in separate “Tiers” packt. Das könnte bedeuten, daß sich die Datenbank auf einem separaten Server befindet und/oder die Presentation-Logic in eine eigene Application ausgelagert wird. Des Weiteren können Funktionen auch auf der vertikalen Ebene separiert werden. Man spricht hier von Mikrosystemen oder auch Micro-Services (welches in einem separaten Post behandelt werden soll).
Vorteile
Es bestehen keine Abhängigkeiten zu anderen Tiers/Komponenten/Services etc.; sprich alles ist an einem Ort. Dadurch lassen sich notwendige Schritte in der Entwicklung von neuen Features oder dem Warten von existierendem Code besser überblicken. Änderungen sollten besser nachvollziehbar sein.
Nachteile
Auch wenn die Abhängigkeiten geringer sein können, heißt das nicht automatisch das die Architektur weniger komplex ist. Oftmals steckt das Wissen einer monolithischen Architektur in wenigen Köpfen, d.h. das Wissen ist wenig verteilt (dieses Thema wird noch einmal in einem separaten Post behandelt). Eines der größten Schwächen ist allerdings die geringe Skalierbarkeit eines solchen Setups.