Hallo, Habr. Heute setze ich die Serie von BeitrÀgen fort, die ich speziell zum Start des neuen Kurses geschrieben habe. .
EinfĂŒhrung
Die Wahl des Architekturstils ist eine der grundlegenden technischen Entscheidungen beim Aufbau eines Informationssystems. In dieser Artikelreihe möchte ich die beliebtesten Architekturstile fĂŒr die Entwicklung von Anwendungen untersuchen und die Frage beantworten, wann welcher Architekturstil am bevorzugt wird. Im Laufe der ErlĂ€uterungen werde ich versuchen, eine logische Kette zu ziehen, die die Entwicklung der Architekturstile von Monolithen zu Microservices erklĂ€rt.
Im Wir haben uns mit dem Monolithen beschĂ€ftigt und festgestellt, dass der Monolith eine Reihe von Problemen hat: GröĂe, KohĂ€renz, Bereitstellung, Skalierbarkeit, ZuverlĂ€ssigkeit und TrĂ€gheit.
Dieses Mal möchte ich ĂŒber die Möglichkeiten sprechen, ein System in Form eines Satzes von Modulen/Bibliotheken (komponentenorientierte Architektur) oder Diensten (serviceorientierte Architektur) zu organisieren.
Komponentenorientierte Architektur
Die komponentenorientierte Architektur sieht vor, dass das System aus einer Reihe von Komponenten besteht, die sowohl in aktuellen als auch in zukĂŒnftigen Projekten verwendet werden können. Bei der Aufteilung des Systems in Komponenten werden folgende Aspekte berĂŒcksichtigt: die Eignung zur Wiederverwendbarkeit, die Austauschbarkeit, die UnabhĂ€ngigkeit vom Kontext, die Erweiterbarkeit, die Kapselung und die UnabhĂ€ngigkeit.
Bei sachgemĂ€Ăem Einsatz von Komponenten wird das Problem des âgroĂen Klumpens Schmutzâ (groĂe GröĂe + hohe KohĂ€renz) gelöst, und die Komponenten selbst können sowohl als BausĂ€tze (Module, Bibliotheken) als auch als Bereitstellungseinheiten (Dienste) auftreten. Bereitstellungseinheiten spiegeln nicht immer den ausgefĂŒhrten Prozess wider: Zum Beispiel werden eine Webanwendung und eine Datenbank gemeinsam bereitgestellt.
Am hÀufigsten werden Monolithen in Form einer Vielzahl von Modulen entwickelt. Dieser Ansatz gewÀhrleistet die UnabhÀngigkeit der Entwicklung, jedoch bleiben die Probleme der unabhÀngigen Skalierung und Bereitstellung, der Fehlertoleranz und der UnabhÀngigkeit vom gemeinsamen Technologiestack bestehen. Aus diesem Grund ist ein Modul eine teilweise unabhÀngige Komponente.
Das Hauptproblem eines solchen Monolithen ist, dass die Modultrennung rein logisch ist und leicht von Entwicklern verletzt werden kann. Es kann ein Core-Modul entstehen, das sich allmÀhlich in einen Schrottplatz verwandelt, die AbhÀngigkeitsgraphen zwischen den Modulen können wachsen und so weiter. Um solche Probleme zu vermeiden, muss die Entwicklung von einem sehr erfahrenen Team geleitet oder unter der Leitung eines "Architekten" stehen, der sich ganztÀgig mit Code-Reviews beschÀftigt und Entwicklern, die die logische Struktur verletzen, auf die Finger klopft.
Ein "idealer" Monolith besteht aus einer Reihe logisch getrennter Module, von denen jedes in seine eigene Datenbank schaut.
Serviceorientierte Architektur
Wenn dennoch eine Organisation des Systems in Form einer Reihe von Services vorgesehen ist, spricht man von serviceorientierter Architektur. Ihre Prinzipien umfassen: InteroperabilitÀt von benutzerorientierten Anwendungen, mehrfache Nutzung von Business-Services, UnabhÀngigkeit von Technologie-Stacks und Autonomie (unabhÀngige Evolution, Skalierbarkeit und Bereitstellbarkeit).
Serviceorientierte Architektur (SOA = service-oriented architecture) löst alle genannten Probleme des Monolithen: Bei Ănderungen ist nur ein Service betroffen, wĂ€hrend eine klar definierte API eine gute Kapselung der Komponenten unterstĂŒtzt.
Aber es ist nicht alles so reibungslos: SOA bringt neue Probleme mit sich. Remote-Aufrufe sind teurer als lokale, und die Umverteilung von Aufgaben zwischen den Komponenten ist wesentlich kostspieliger geworden.
Ăbrigens ist die Möglichkeit eines unabhĂ€ngigen Deployments eine sehr wichtige Eigenschaft des Services. Wenn Services gemeinsam oder gar in einer bestimmten Reihenfolge bereitgestellt werden mĂŒssen, kann das System nicht als serviceorientiert angesehen werden. In diesem Fall spricht man von einem verteilten Monolithen (dies wird nicht nur aus der Sicht von SOA als Antipattern angesehen, sondern auch aus der Perspektive der Mikroservice-Architektur).
Serviceorientierte Architektur wird gut von der Architekturgemeinschaft und Anbietern unterstĂŒtzt. Daraus ergibt sich eine Vielzahl von Kursen und Zertifizierungen sowie gut ausgearbeiteten Mustern. Zu letzterem gehört beispielsweise der nicht unbekannte Enterprise Service Bus (ESB). Dabei ist der ESB ein Erbe von Anbietern und muss nicht zwingend in SOA verwendet werden.
Der Höhepunkt der Beliebtheit von serviceorientierter Architektur lag etwa im Jahr 2008, danach begann sie zu sinken, wobei der RĂŒckgang mit dem Aufkommen von Microservices (~2015) deutlich ausgeprĂ€gter wurde.
Fazit
Nachdem wir die Möglichkeiten zur Organisation von Informationssystemen in Form von Services und Modulen besprochen haben, schlage ich vor, endlich zu den Prinzipien der Microservices-Architektur ĂŒberzugehen und in der nĂ€chsten Teil besonders auf die Unterschiede zwischen der Microservices-Architektur und der serviceorientierten Architektur einzugehen.
Quelle: habr.com
