Begriffsdefinition

    Ein Monolith ist eine Art der Softwarearchitektur (man sagt auch Monolithische Architektur), bei der alle Komponenten einer Anwendung in einem einzigen, großen und komplexen Codeblock zusammengefasst sind. Im Gegensatz zur Microservices-Architektur, bei der eine Anwendung aus vielen kleinen, unabhängigen Diensten besteht, die miteinander kommunizieren und spezifische Aufgaben erfüllen, ist die Monolithische Architektur in der Regel weniger flexibel und skalierbar. Ein Monolith hat in der Regel eine höhere Kopplung und ist schwieriger zu testen und zu warten als eine Microservices-Architektur.

    Wann ist es sinnvoll, auf einen Monolith zu setzten?

    In bestimmten Situationen kann ein Monolith dennoch sinnvoll sein:

    • In kleinen Projekten mit geringen Anforderungen und die Entwicklungszeit begrenzt ist, kann eine Monolithische-Architektur die einfachste und schnellste Wahl sein.
    • Wenn die Anforderungen an die Skalierbarkeit gering sind und es keine erwarteten Veränderungen in der Nutzung der Anwendung gibt.
    • Bei begrenzten Ressourcen, z. B. wenn es nicht möglich ist, ein Team von Experten für die Wartung und Skalierung der Anwendung zu beschäftigen.
    • Oder wenn die Anwendung schnell und einfach zu testen und zu debuggen sein soll.

    Vorteile

    • Einfache Entwicklung, da alle Komponenten an einem Ort zusammengefasst sind.
    • Einfache Verwaltung von Abhängigkeiten zwischen verschiedenen Teilen der Anwendung.
    • Einfacheres Testen und Debuggen, da alle Komponenten an einem Ort sind.

    Nachteile

    • Es ist schwieriger, neue Funktionalitäten hinzuzufügen oder bestehende Funktionalitäten zu ändern, ohne den bestehenden Code zu beeinträchtigen und die Wartbarkeit zu erschweren.
    • Da die gesamte Anwendung als Einheit skaliert werden muss, ist es schwierig, die Skalierbarkeit zu verbessern.
    • Continuous Deployment und Cloud-Deployment mit einer Monolithischen Architektur umzusetzen. Continuous Deployment erfordert die Möglichkeit, Teile der Anwendung unabhängig voneinander zu deployen, was mit einem Monolith schwierig ist. Auch das Deployment in die Cloud erfordert in der Regel eine höhere Flexibilität und Skalierbarkeit, die eine Monolithische Architektur in der Regel nicht bietet.
    • Ein Monolith enthält in der Regel alle Komponenten und Abhängigkeiten einer Anwendung, was bedeutet, dass es viele verschiedene Technologien, Framework und Libraries enthalten kann. Dies kann es schwierig machen, den Code zu verstehen und zu warten, insbesondere für neue Entwickler oder wenn es notwendig ist, bestimmte Teile des Codes zu ändern. Es kann auch schwierig sein, veraltete Technologien oder Libraries zu entfernen, die nicht mehr benötigt werden, was zu einem höheren technischen Schuldenberg führen kann.

    Beispiele für eine Microservice-Architektur

    Ein Schaltbild für eine Monolithische-Architektur könnte wie folgt aussehen:

    In diesem Beispiel ist der Monolit für die Kommunikation mit den Clients und den Backend-Systemen verantwortlich. In diesem Schaltbild sind die Clients, wie zum Beispiel Web-Browser oder mobile Anwendungen, direkt mit dem Monolit verbunden. Der Monolit selbst kommuniziert auch mit Backend-Systemen wie Datenbanken oder externen Diensten, um die erforderlichen Daten und Funktionalitäten bereitzustellen. Es gibt keine separate Schicht oder Middleware für die Kommunikation, sondern alles wird innerhalb des Monoliten verarbeitet.

    Einige bekannte Unternehmen, die Microservices einsetzten

    • Die Amazon-e-Commerce-Plattform wurde ursprünglich als Monolith entwickelt wurde und im Laufe der Zeit in eine Microservices-Architektur migriert.
    • Netflix wurde ebenfalls als Monolith entwickelt
    • Die New York Times betreibt ihre Content-Management-Systeme als Monolith.

    Links