Beste Architektur für MVP: Monolith, SOA, Microservices oder Serverless? Teil 1

Im November startet OTUS ein neues Bildungsprogramm „Software Architect“ . In diesem Zusammenhang haben wir eine Reihe von Veröffentlichungen für zukünftige Kursteilnehmer und Leser unseres Blogs vorbereitet.




Das Erstellen eines neuen Produkts ist immer riskant. Die Auswahl der richtigen Architektur ist ein wichtiger Schritt auf dem Weg zum Erfolg. Wenn Sie zwischen einer monolithischen, serviceorientierten, mikroservice- und serverlosen Architektur wählen, hilft Ihnen dieser Beitrag, die richtige Wahl zu treffen.

Monolithische Architektur


Monolith ist ein altes Wort, das einen riesigen Steinblock bezeichnet. Obwohl der Begriff heute weit verbreitet ist, bleibt die Ansicht in allen Bereichen gleich. In der Softwareentwicklung bezieht sich ein monolithisches Modell auf eine einzelne unteilbare Einheit. Das Konzept der monolithischen Software besteht darin, dass die verschiedenen Komponenten der Anwendung auf derselben Plattform zu einem Programm zusammengefasst werden. In der Regel besteht eine monolithische Anwendung aus einer Datenbank, einer Client-Benutzeroberfläche und einer Server-Anwendung. Alle Teile der Software sind vereinheitlicht, und alle Funktionen werden an einem Ort verwaltet. Lassen Sie uns die Struktur monolithischer Software im Detail betrachten.



Die monolithische Architektur ist praktisch für kleine Gruppen, daher wählen viele Startups diesen Ansatz beim Erstellen einer Anwendung. Komponenten von monolithischer Software sind miteinander verbunden und voneinander abhängig, wodurch die Software autark wird. Diese Architektur ist eine traditionelle Lösung zum Erstellen von Anwendungen, die jedoch für einige Entwickler veraltet ist. Wir glauben jedoch, dass monolithische Architektur unter bestimmten Umständen eine ideale Lösung ist.

Trotz der Tatsache, dass wir positive Erfahrungen mit Microservices bei Google gemacht haben, sind wir [bei Scaylr] einen monolithischen Weg gegangen, weil ein monolithischer Server für uns als zwei Ingenieure weniger Arbeit bedeutet.
Stephen Cherwinski, Leiter Design, Scaylr


Um herauszufinden, ob diese Lösung für Ihr Unternehmen geeignet ist, schauen wir uns die Vor- und Nachteile an.

Die Vorteile der monolithischen Architektur


Vereinfachte Entwicklung und Bereitstellung


Es gibt viele Tools, die Sie integrieren können, um die Entwicklung zu erleichtern. Darüber hinaus werden alle Aktionen in einem Verzeichnis ausgeführt, was die Bereitstellung vereinfacht. Dank des monolithischen Kernels müssen Entwickler Änderungen oder Updates nicht separat bereitstellen, da sie dies sofort tun und viel Zeit sparen können.

Weniger Querschnittsthemen


Die meisten Anwendungen hängen von vielen komponentenübergreifenden Aufgaben ab, z. B. Audit-Trails, Protokollierung, Geschwindigkeitsbegrenzung usw. Monolithische Anwendungen können diese Probleme aufgrund ihrer gemeinsamen Codebasis viel einfacher berücksichtigen. Es ist einfacher, Komponenten mit diesen Aufgaben zu verbinden, wenn alles in einer Anwendung funktioniert.

Beste Leistung


Bei ordnungsgemäßer Montage sind monolithische Anwendungen in der Regel produktiver als auf Mikroservices basierende Anwendungen. Beispielsweise muss eine Anwendung mit einer Microservice-Architektur möglicherweise 40 API-Aufrufe für 40 verschiedene Microservices ausführen, um jeden Bildschirm zu laden, was offensichtlich zu einer schlechten Leistung führt. Monolithische Anwendungen sorgen wiederum für eine schnellere Kommunikation zwischen Softwarekomponenten, da Code und Speicher gemeinsam genutzt werden.

Nachteile der monolithischen Architektur


Die Codebasis wird im Laufe der Zeit umständlich


Im Laufe der Zeit werden die meisten Produkte weiterentwickelt und erweitert, und ihre Struktur verwischt sich. Die Codebasis sieht langsam sehr umfangreich aus und ist schwer zu verstehen und zu ändern, insbesondere für neue Entwickler. Es wird auch immer schwieriger, Nebenwirkungen und Abhängigkeiten zu finden. Wenn die Codebasis wächst, verschlechtert sich die Qualität und die IDE wird überlastet.

Schwierig, neue Technologien einzuführen


Wenn Sie Ihrer Anwendung eine neue Technologie hinzufügen müssen, stoßen Entwickler möglicherweise auf Hindernisse bei der Implementierung. Durch Hinzufügen neuer Technologien wird die gesamte Anwendung neu geschrieben, was teuer und zeitaufwendig ist.

Eingeschränkte Flexibilität


In monolithischen Anwendungen erfordert jedes kleinere Update eine vollständige Neuverteilung. Daher müssen alle Entwickler warten, bis dies erledigt ist. Wenn mehrere Teams an einem Projekt arbeiten, kann die Flexibilität erheblich reduziert werden.

Zusammenfassend


Das monolithische Modell ist nicht veraltet und funktioniert in einigen Fällen immer noch hervorragend. Einige Riesenunternehmen wie Etsy bleiben trotz der heutigen Popularität von Microservices monolithisch. Die Architektur von monolithischer Software kann nützlich sein, wenn Ihr Team sich in der Anfangsphase befindet, Sie ein nicht verifiziertes Produkt erstellen und keine Erfahrung mit Microservices haben. Der Monolith ist ideal für Startups, die das Produkt so schnell wie möglich in Betrieb nehmen möchten. Einige der oben genannten Probleme gehen jedoch mit der monolithischen Architektur einher.

SOA


Serviceorientierte Architektur (SOA) ist ein Stil der Softwarearchitektur, der eine modulare Anwendung umfasst, die aus diskreten und lose gekoppelten Software-Agenten besteht, die bestimmte Funktionen ausführen. SOA unterteilt Komponenten in zwei Hauptrollen: Service Provider und Consumer. Beide Rollen können von Software-Agenten gespielt werden. Das Konzept von SOA lautet: Eine Anwendung kann so entworfen und erstellt werden, dass ihre Module leicht integriert und problemlos wiederverwendet werden können.

Vorteile von SOA


Wiederverwendung von Diensten


Aufgrund der Autonomie und der lockeren Kopplung von Funktionskomponenten in dienstorientierten Anwendungen können diese Komponenten in mehreren Anwendungen wiederverwendet werden, ohne andere Dienste zu beeinträchtigen.

Leichtigkeit begleitet


Da jeder Softwaredienst eine eigenständige Einheit ist, kann er leicht aktualisiert und gewartet werden, ohne andere Dienste zu beeinträchtigen. Beispielsweise sind große Unternehmensanwendungen einfacher zu verwalten, wenn sie in Dienste unterteilt sind.

Höhere Zuverlässigkeit


Services sind einfacher zu debuggen und zu testen als riesige Codestücke wie in Monolithen. Dies wiederum macht SOA-basierte Produkte zuverlässiger.

Parallele Entwicklung


Da die serviceorientierte Architektur mehrschichtig ist, wird die Parallelität im Entwicklungsprozess unterstützt. Unabhängige Dienste können parallel entwickelt und gleichzeitig abgeschlossen werden.

Nachteile von SOA


Schwierigkeiten bei der Verwaltung


Der Hauptnachteil der serviceorientierten Architektur ist ihre Komplexität. Jeder Dienst sollte eine pünktliche Nachrichtenübermittlung gewährleisten. Die Anzahl dieser Nachrichten kann eine Million überschreiten, was die Verwaltung aller Dienste erschwert.

Hohe Investitionskosten


Die SOA-Entwicklung erfordert erhebliche Vorabinvestitionen in Humanressourcen, Technologie und Entwicklung.

Zusätzliche Ladung


In der SOA werden alle Eingaben überprüft, bevor ein Dienst mit einem anderen Dienst interagiert. Bei Verwendung mehrerer Dienste erhöht dies die Antwortzeit und verringert die Gesamtleistung.

Zusammenfassend


SOA eignet sich am besten für komplexe Unternehmenssysteme wie das Bankwesen. Es ist äußerst schwierig, das Bankensystem in Mikrodienstleistungen zu unterteilen. Ein monolithischer Ansatz eignet sich aber auch nicht für das Bankensystem, da ein Teil die gesamte Anwendung beschädigen kann. Die beste Lösung besteht darin, den SOA-Ansatz zu verwenden und komplexe Anwendungen in isolierten, unabhängigen Diensten zu organisieren.

Dies schließt den ersten Teil der Übersetzung ab, und wir werden im zweiten Teil des Materials über Microservices und serverlose Architekturen sprechen.

Source: https://habr.com/ru/post/de476024/


All Articles