Was ist eine monolithische Anwendung?

Eine monolithische Anwendung fasst die Benutzeroberfläche und die Datenzugriffsebenen für mehrere Funktionen in einer Anwendung zusammen. Normalerweise besteht eine monolithische Anwendung aus einer einzigen Codebasis, die von mehreren Teams innerhalb einer Organisation geändert wird, und wird als eine einzige Einheit bereitgestellt, die alle von diesen Teams gepflegten Funktionen enthält.

Monolithische Anwendungen sind dank der engen Integration ihrer Komponenten oft einfacher zu entwickeln und bereitzustellen. Wenn jedoch der Umfang der Anwendung und die Leistungsanforderungen steigen, kann ein Monolith schwer zu warten und zu skalieren sein.

Beispiele für monolithische Anwendungsarchitekturen

Monolithische Systeme eignen sich gut für kleinere, weniger komplexe Anwendungen, die nicht schnell skaliert oder routinemäßig gewartet werden müssen. Nachfolgend finden Sie einige Beispiele für Anwendungen, die in der Regel monolithisch aufgebaut sind (auch wenn ihre neueren Funktionen auf einer stärker containerisierten Infrastruktur basieren können).

  • E-Commerce-Plattformen – Monolithische Anwendungen sind im E-Commerce häufig anzutreffen, da nach der Einrichtung der Infrastruktur (Aufbau des Online-Shops, Auftragsabwicklung, Zahlungsabwicklung und Kundendienst) nur wenige Aktualisierungen der Architektur erforderlich sind.
  • Content Management Systems (CMS) – Dieser Glossareintrag wurde durch eine monolithische Anwendung (WordPress) ermöglicht. CMS-Anwendungen enthalten, wenn sie eingesetzt werden, alle für die Verwaltung von Inhalten erforderlichen Funktionen in Form von Webseiten.
  • Bankensysteme – Viele Finanzsysteme werden als monolithische Anwendungen entwickelt, da die Zahl der Einstiegspunkte begrenzt ist, was sie sicherer macht. Außerdem enthält die Codebasis nach der Bereitstellung alle Funktionen, die ein Kunde von Online-Banking erwartet: Verwaltung von Finanztransaktionen, Zahlungsabwicklung und Nachverfolgung.
Vorteile einer monolithischen Architektur

Auch wenn einige Aspekte monolithischer Architekturen überholt sind, gibt es immer noch viele Zwecke und positive Eigenschaften.

Einige Vorteile von Monolithen sind:

  • Einfachheit – Die zentralisierte Architektur macht Monolithen im Vergleich zu komplexeren Architekturen wie Microservices-Architekturen einfacher zu entwickeln, bereitzustellen und zu warten.
  • Schnelleres Testen – Durch die Integration aller Komponenten in ein einziges Programm kann eine monolithische Anwendung schnell als Ganzes getestet werden. Im Gegensatz zu Architekturen, die aus mehreren, kleineren Komponenten bestehen (z. B. Microservices), gibt es keine zusätzlichen Tests für komplexe Kommunikationsprotokolle oder mehrere Code-Repositorys.
  • Sicherheit – Monolithen sind in der Regel leichter abzusichern, da sie weniger Angriffspunkte für böswillige Akteure bieten. Außerdem ist es einfacher, Sicherheitsprotokolle für eine Anwendung durchzusetzen, als mehrere Sicherheitskonfigurationen zu verwalten.
  • Kosten – Wenn Monolithen als eine einzige Einheit eingesetzt werden, entfallen die zusätzlichen Kosten, die mit der Bereitstellung und Sicherung zusätzlicher Kommunikationsprotokolle, dem Aufbau weiterer Verbindungsinfrastrukturen und der Einstellung von Mitarbeitern mit speziellen Kenntnissen und Schulungen verbunden sind.
Nachteile einer monolithischen Architektur

Die Einzigartigkeit von Monolithen hat zwar ihre Vorteile, kann aber auch zu Problemen führen.

Einige Nachteile von Monolithen sind:

  • Ausufernde Komplexität – Im Laufe der Zeit kann eine monolithische Architektur durch das Wachstum einer Anwendung und die hinzugefügten Funktionen immer größer und komplexer werden. Dieser „Sprawl“ erhöht das Risiko, dass eine Aktualisierung die einzige Codebasis gefährdet, die das gesamte Programm reibungslos laufen lässt.
  • Mangelnde Skalierbarkeit – Wenn eine Funktion oder ein Bereich der Anwendung horizontal skaliert werden muss, muss die gesamte große Anwendung (einschließlich der Teilsysteme, die keine zusätzlichen Ressourcen benötigen) skaliert werden. Dies kann sowohl zu einer langsameren Skalierung führen, da die Bereitstellung länger dauert, als auch zu höheren Kosten, da jede Instanz im Vergleich zu Microservices größere Hardware-Anforderungen hat.
  • Ausfallsicherheit – In einer monolithischen Architektur sind alle Anwendungskomponenten eng miteinander verknüpft und werden von einer zentralen Codebasis aus ausgeführt, sodass bei einem Ausfall einer Komponente die gesamte Anwendung ausfallen kann.
  • Vollständige erneute Bereitstellung – Mit einer einzigen Codebasis, die die gesamte Anwendung repräsentiert, erfordert ein Monolith eine vollständige erneute Bereitstellung, sobald eine einzelne Komponente geändert oder aktualisiert wird.
  • Technologie-Stack – Da die Entwickler sicherstellen müssen, dass die von ihnen verwendeten Tools oder Sprachen in den Monolithen passen, ist die Auswahl eingeschränkt. Außerdem sind viele monolithische Anwendungen so geschrieben, dass sie nicht vollständig mit neueren, effizienteren Technologien wie Cloud Computing und Containerisierung kompatibel sind.
  • Langsamere Entwicklung – Wenn mehrere Entwicklungsteams an einer großen Codebasis arbeiten, ist äußerste Sorgfalt erforderlich, um sicherzustellen, dass Schnittstellen und Domänenabgrenzungen respektiert und beibehalten werden. Manchmal kann der Code zu einer komplexen Kopplung führen, wodurch teamübergreifende Abhängigkeiten die Entwicklung neuer Funktionen oder die Behebung kritischer Probleme verlangsamen.
Was ist eine Microservices-Architektur?

Im Gegensatz zur monolithischen Architektur steht die Microservices-Architektur. Microservices ist ein Ansatz der Software-Architektur, bei dem eine große, komplexe Anwendung aus kleinen Komponenten aufgebaut wird. Diese Komponenten können jeweils eine einzelne Funktion erfüllen (z. B. Authentifizierung, Benachrichtigung oder Zahlungsabwicklung) oder als Bündel innerhalb eines Monolithen arbeiten. „Microservices“ (oder einfach „Services“) ist auch der Begriff für die kleinen Komponenten selbst.

Während monolithische Anwendungen eng gekoppelt sind (d. h. ihre Komponenten sind miteinander verbunden), ist eine Microservices-Anwendung verteilt (d. h. ihre Komponenten können unabhängig voneinander agieren). Da die Anwendungen immer größer und komplexer werden, überlegen viele Organisationen, entweder monolithische Anwendungen aufzugeben oder neue Anwendungen im Microservices-Format einzubinden.

NGINX ist stolz darauf, denjenigen, die sich mit monolithischen und Microservices-Anwendungen beschäftigen, die folgenden kostenlosen Bildungsressourcen anbieten zu können