Wahl des architektonischen Stils (Teil 3)

Hallo, Habr. Heute setze ich die Serie von BeitrĂ€gen fort, die ich speziell zum Start des neuen Kurses geschrieben habe. „Software-Architekt“.

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 letzten GesprĂ€ch haben wir verschiedene Arten von Monolithen und die Verwendung von Komponenten fĂŒr deren Aufbau diskutiert, sowohl von Montage- als auch von Bereitstellungskomponenten. Wir haben uns mit der serviceorientierten Architektur vertraut gemacht.

Jetzt werden wir endlich die Hauptmerkmale der Mikroservice-Architektur definieren.

Architekturanalyse

Es ist wichtig zu verstehen, dass, basierend auf den Informationen aus vorherigen Artikeln, jeder Dienst eine Komponente darstellt, aber nicht jeder Dienst ein Mikroservice ist.

Merkmale der Mikroservice-Architektur

Die Hauptmerkmale der Mikroservice-Architektur sind:

  • Organisation nach GeschĂ€ftsmöglichkeiten (Organized around Business Capabilities)
  • Produkte, nicht Projekte (Products not Projects)
  • Intelligente Endpunkte und einfache KanĂ€le (Smart endpoints and dumb pipes)
  • Dezentralisierte Steuerung (Decentralized Governance)
  • Dezentralisierte Datenverwaltung (Decentralized Data Management)
  • Automatisierung der Infrastruktur (Infrastructure Automation)
  • Fehlersicherheit (Design for failure)
  • Architektur mit evolutionĂ€rem Design (Evolutionary Design)

Der erste Punkt stammt aus der serviceorientierten Architektur, da Mikroservices einen speziellen Fall von Diensten darstellen. Die anderen Punkte verdienen eine eigene Betrachtung.

Organisation nach GeschÀftsmöglichkeiten (Organized around Business Capabilities)

Jetzt sollten wir uns an das Conway'sche Gesetz erinnern: Organisationen, die Systeme erstellen, gestalten deren Architektur basierend auf der Struktur der Interaktionen innerhalb dieser Organisationen. Ein Beispiel wĂ€re der Fall der Compiler-Erstellung: Ein Team von sieben Personen entwickelte einen Sieben-Durchlauf-Compiler, wĂ€hrend ein Team von fĂŒnf einen FĂŒnf-Durchlauf-Compiler entwickelte.

Wenn wir ĂŒber Monolithen und Mikroservices sprechen, bedeutet dies, dass, wenn die Entwicklung nach funktionalen Abteilungen (Backend, Frontend, Datenbankadministratoren) organisiert ist, ein klassischer Monolith entsteht.

Um Mikroservices zu erhalten, mĂŒssen die Teams nach GeschĂ€ftsmöglichkeiten organisiert werden (Auftragsteam, Versandteam, Katalogteam). Eine solche Organisation ermöglicht es den Teams, sich auf die Erstellung spezifischer Teile der Anwendung zu konzentrieren.

Produkte, nicht Projekte (Products not Projects)

Der projektorientierte Ansatz, bei dem das Team entwickelte FunktionalitĂ€ten an andere Teams bei einer Mikroservice-Architektur ĂŒbergibt, ist völlig ungeeignet. Das Team sollte das System wĂ€hrend des gesamten Lebenszyklus unterstĂŒtzen. Amazon, einer der Vorreiter bei der EinfĂŒhrung von Mikroservices, erklĂ€rte: "Sie erstellen ein Produkt, und Sie bringen es auch zur AusfĂŒhrung" ("you build, you run it"). Der produktorientierte Ansatz ermöglicht es dem Team, die BedĂŒrfnisse des Unternehmens zu spĂŒren.

Intelligente Endpunkte und einfache KanÀle (Smart endpoints and dumb pipes)

Die SOA-Architektur legte großen Wert auf KommunikationskanĂ€le, insbesondere auf den Enterprise Service Bus (ESB). Dies fĂŒhrt oft zu einem fehlerhaften Spaghetti-Box, das heißt, die KomplexitĂ€t des Monolithen verwandelt sich in die KomplexitĂ€t der Beziehungen zwischen den Services. In der Mikroservice-Architektur werden nur einfache Interaktionsmethoden verwendet.

Dezentralisierte Steuerung (Decentralized Governance)

Wichtige Entscheidungen zu Mikroservices sollten von denjenigen getroffen werden, die tatsĂ€chlich Mikroservices entwickeln. Hierbei beziehen sich die SchlĂŒsselentscheidungen auf die Auswahl
von Programmiersprachen, Bereitstellungsmethoden, VertrĂ€gen fĂŒr öffentliche Schnittstellen usw.

Dezentralisierte Datenverwaltung (Decentralized Data Management)

Der Standardansatz, bei dem eine Anwendung auf einer einzigen Datenbank basiert, kann die Besonderheiten jedes einzelnen Services nicht berĂŒcksichtigen. MSA setzt auf eine dezentralisierte Datenverwaltung, die bis zur Anwendung unterschiedlicher Technologien reicht.

Automatisierung der Infrastruktur (Infrastructure Automation)

MSA unterstĂŒtzt kontinuierliche Bereitstellungs- und Lieferprozesse. Dies ist nur durch die Automatisierung der Prozesse möglich. Dabei erscheint die Bereitstellung einer großen Anzahl von Services nicht mehr bedrohlich. Der Bereitstellungsprozess sollte eintönig werden. Ein zweiter Aspekt betrifft die Verwaltung von Services in einer Produktumgebung. Ohne Automatisierung wird das Management von Prozessen, die in verschiedenen Betriebssystemumgebungen ausgefĂŒhrt werden, unmöglich.

Fehlersicherheit (Design for failure)

Zahlreiche MSA-Services sind Fehlermeldungen ausgesetzt. Die Fehlermanagement in einem verteilten System ist jedoch eine Ă€ußerst komplexe Aufgabe. Die Anwendungsarchitektur sollte widerstandsfĂ€hig gegenĂŒber solchen Fehlermeldungen sein. Rebecca Parsons hĂ€lt es fĂŒr Ă€ußerst wichtig, dass wir nicht einmal interne Prozessinteraktionen zwischen Services nutzen, sondern stattdessen auf HTTP zurĂŒckgreifen, das in keinster Weise so zuverlĂ€ssig ist.

Architektur mit evolutionÀrem Design (Evolutionary Design)

Die Architektur des MSA-Systems sollte sich evolutionĂ€r entwickeln. Es ist wĂŒnschenswert, die notwendigen Änderungen auf die Grenzen eines einzelnen Dienstes zu beschrĂ€nken. Es sollte auch der Einfluss auf andere Dienste berĂŒcksichtigt werden. Der traditionelle Ansatz besteht darin, zu versuchen, dieses Problem ĂŒber Versionsmanagement zu lösen, aber MSA sieht vor, Versionsmanagement als
letzte Maßnahme zu verwenden.

Fazit

Nach allem Gesagten lĂ€sst sich formulieren, was Mikrodienste sind. Die mikrodienstliche Architektur ist ein Ansatz zur Entwicklung einer einzelnen Anwendung in Form einer Reihe kleiner Dienste, von denen jeder in seinem eigenen Prozess arbeitet und ĂŒber leichtgewichtige Mechanismen, oft ĂŒber die HTTP-Ressourcen-API, interagiert. Diese Dienste basieren auf GeschĂ€ftsmöglichkeiten und können unabhĂ€ngig mit einem vollstĂ€ndig
automatisierten Bereitstellungsmechanismus implementiert werden. Es gibt ein minimales Maß an zentraler Verwaltung dieser Dienste, die in verschiedenen Programmiersprachen geschrieben sein können und unterschiedliche Datenspeichertechnologien verwenden.

Wahl des architektonischen Stils (Teil 3)

Teil 2 lesen

Quelle: habr.com

60GB SSD 8Gb DDR4