Neil Fords Übersetzung von Microservices als evolutionĂ€re Architektur

Wir haben eine Übersetzung eines Artikels von Neil Ford, einem Systemarchitekten und ideologischen Vordenker bei ThoughtWorks, einem Softwareentwicklungsunternehmen, das Softwaretests und Bereitstellungsprozesse automatisiert, vorbereitet.

Neil ist ein anerkannter Softwareentwicklungsexperte, der an der Schnittstelle zwischen agilem Design und Systemarchitektur arbeitet. Er ist Autor zahlreicher Artikel, BĂŒcher, Dutzende von VideoprĂ€sentationen und spricht auf fĂŒhrenden Entwicklerkonferenzen. Sie können seine Arbeit auf nealford.com sehen .

Microservices als evolutionÀre Architektur


Die Microservice-Architektur erobert schnell die Welt. Im MÀrz organisierte der O'Reilly-Verlag seine erste O'Reilly-Software-Architekturkonferenz. Fast 60% der Berichte widmeten sich bestimmten Aspekten der Nutzung von Mikrodiensten. Warum wurde dieser besondere Baustil plötzlich so beliebt?

Die Microservice-Architektur ist ein neuer architektonischer Entwurfsstil, der nach DevOps entstanden ist und kontinuierliche Softwarebereitstellungspraktiken beinhaltet. Es ist auch ein Beispiel fĂŒr eine evolutionĂ€re Architektur, die dem Prinzip allmĂ€hlicher, kontinuierlicher Änderungen in mehreren Dimensionen auf der strukturellen Ebene einer Anwendung folgt. Dieser Artikel beschreibt einige der wichtigsten Merkmale und Prinzipien dieser Familie von Architekturstilen.

EvolutionÀre Architektur


FrĂŒher glaubte man, dass die Elemente der Architektur "nach ihrer Entstehung sehr schwer zu Ă€ndern sind". AllmĂ€hlicher Wandel ist das Hauptprinzip der evolutionĂ€ren Architektur. Es zieht allgemeine Aufmerksamkeit auf sich, gerade weil Änderungen in der Architektur immer schwer vorhersehbar und sehr kostspielig waren. Wenn die Möglichkeit von evolutionĂ€ren Änderungen in die Architektur selbst integriert ist, wird ihre Implementierung viel einfacher und billiger, was zu Änderungen in der Softwareentwicklung und den Release-Praktiken beitrĂ€gt und die allgemeine ProzessflexibilitĂ€t erhöht.

Die Microservice-Architektur stimmt voll und ganz mit dieser Idee ĂŒberein, da sie ĂŒber begrenzte Kontexte verfĂŒgt , die gemĂ€ĂŸ Eric Evans 'Domain Driven Design logisch zugeordnet und als physisch separate Komponenten implementiert sind. Diese Trennung wird durch die Implementierung von DevOps-Praktiken wie Bereitstellung, Test und automatisierte Bereitstellung virtueller Maschinen erreicht. Da jeder Dienst von allen anderen Diensten (auf struktureller Ebene) getrennt ist, ist das Ersetzen eines Mikrodienstes durch einen anderen so einfach wie das Austauschen von LegowĂŒrfeln.

Merkmale der evolutionÀren Architektur


EvolutionĂ€re Architekturen weisen eine Reihe gemeinsamer Merkmale auf. All diese Merkmale werden in einem bevorstehenden Buch ĂŒber evolutionĂ€re Architektur beschrieben. In diesem Artikel geben wir nur einige davon.

ModularitÀt und KonnektivitÀt


Die Möglichkeit, Komponenten innerhalb genau definierter Grenzen gemeinsam zu nutzen, bietet Entwicklern bei Bedarf den Vorteil einer kontinuierlichen Änderung. Wenn die Architektur nicht entworfen wurde und das System wie ein großer Schlammballen aussieht ( Big Ball of Mud-Architektur ), sind evolutionĂ€re Änderungen unmöglich, da es in einer solchen Struktur keine unterscheidbaren Teile gibt.


[Die Beziehung zwischen den Klassen (Punkte um den Umfang) in einem großen SchmutzbĂŒndel aus einem unbenannten Kundenprojekt.]

Eine falsche Komponentenverbindung behindert die Entwicklung des Systems aufgrund der Tatsache, dass Änderungen unvorhersehbar andere Teile des Systems beeinflussen können. Alle evolutionĂ€ren Architekturen bieten ein gewisses Maß an ModularitĂ€t, normalerweise auf der Ebene der technischen Architektur (z. B. Schichtarchitektur).

Organisation rund um GeschÀftsmöglichkeiten


Beeinflusst von den Prinzipien des themenorientierten Designs in modernen erfolgreichen Architekturen wird zunehmend ModularitÀt auf DomÀnenebene eingesetzt. Eine service-basierte Architektur unterscheidet sich von einer herkömmlichen serviceorientierten Architektur (SOA) hauptsÀchlich in ihrer Service-Allokationsstrategie. Serviceorientierte Architektur ist streng nach technischen Ebenen unterteilt, wÀhrend serviceorientierte Architekturen hauptsÀchlich in Teilen des durch Microservices definierten Themenbereichs erstellt werden.

Die Experimente


Die DurchfĂŒhrung von Experimenten ist einer der wesentlichen Vorteile, die die evolutionĂ€re Architektur fĂŒr Unternehmen bietet. Die Möglichkeit, auf einfache Weise kleine Änderungen an Anwendungen vorzunehmen, ermöglicht die Verwendung gĂ€ngiger kontinuierlicher Bereitstellungsverfahren wie A / B-Tests, Tests fĂŒr eine begrenzte Gruppe von Benutzern (Canary Release) und andere. Microservice-Architekturen werden hĂ€ufig auf der Grundlage von Routing-Serviceaufrufen erstellt, sodass mehrere Versionen des Service innerhalb eines gesamten Ökosystems verwendet werden können. Dies eröffnet wiederum große Möglichkeiten zum Experimentieren und zur Änderung bestehender Funktionen. Letztendlich wird bei der Entwicklung von GeschĂ€ftsanwendungen weniger Zeit fĂŒr die Erörterung von PlĂ€nen und RĂŒckstĂ€nden aufgewendet, und die Entwicklung erfolgt hauptsĂ€chlich im Rahmen des schnellen Hypothesentests.

Prinzipien der evolutionÀren Architektur


Ein vollstÀndigeres Bild der evolutionÀren Architektur kann erhalten werden, indem man sich mit ihren Grundprinzipien vertraut macht. Diese Prinzipien beziehen sich auf verschiedene Merkmale sowohl der Architektur selbst als auch ihrer Entwurfsmethoden. Ein Teil der Prinzipien bezieht sich auf die Wahl des Zeitpunkts, zu dem architektonische Entscheidungen im Prozess des Systemdesigns getroffen werden.

Fitnessfunktion


Es ist notwendig, zwischen emergenter (als Ergebnis des Designprozesses gebildeter) und evolutionĂ€rer Architektur zu unterscheiden - dies ist Ă€ußerst wichtig. Wie evolutionĂ€re Berechnungsmethoden (wie genetische Algorithmen) setzt die architektonische Fitnessfunktion ein Ziel bei der architektonischen Gestaltung. Bei einigen Systemen ist die Hauptanforderung eine lange Betriebszeit, bei anderen eine hohe Leistung oder Sicherheit.


[Radarkarte zur Hervorhebung wichtiger Fitnessfunktionen, die fĂŒr dieses Softwaresystem relevant sind.]

Wenn Sie die Fitnessfunktion fĂŒr ein bestimmtes System vorab festlegen, hilft dies in Zukunft, rechtzeitig die richtigen Entscheidungen zu treffen. FĂŒr verschiedene Architekturlösungen können Sie Fitnessfunktionen berechnen. Wenn der Wert besser wird, bedeutet dies, dass sich die Architektur in die richtige Richtung entwickelt.

Aufmerksamkeit auf Schmerzpunkte


Viele der Arbeitsmethoden, die bei der kontinuierlichen Bereitstellung von Software und der Entwicklung einer sich entwickelnden Architektur verwendet werden, basieren auf dem von der eXtreme Programming-Community formulierten Prinzip der „Beachtung von Schwachstellen“. Wenn in der Entwurfsarbeit Momente auftreten, die zu Problemquellen (Schmerzpunkten) werden können, mĂŒssen diese so schnell wie möglich beachtet werden. Dies wird dazu beitragen, potenzielle Probleme im Voraus zu identifizieren und in einem funktionierenden Zustand zu beseitigen. GĂ€ngige kontinuierliche Bereitstellungsverfahren wie die Bereitstellungspipeline, die automatische Bereitstellung virtueller Maschinen und die Datenbankmigration beim Entwerfen einer evolutionĂ€ren Architektur vereinfachen die Beseitigung von Schwachstellen wĂ€hrend der Änderungsphase erheblich.

Entscheidungspunkt


Der Hauptunterschied zwischen traditioneller und evolutionĂ€rer Architektur besteht darin, dass wichtige Entscheidungen getroffen werden. Diese Entscheidungen können sich auf die Anwendungsstruktur, den Technologie-Stack, einzelne Tools oder Kommunikationsmuster beziehen. Beim Entwerfen einer traditionellen Architektur werden solche Entscheidungen in der Anfangsphase getroffen, bevor der Code geschrieben wird. Bei der Entwicklung der evolutionĂ€ren Architektur werden Entscheidungen so spĂ€t wie möglich getroffen, im letzten Moment, wenn sie noch akzeptabel sind. Der Vorteil einer spĂ€teren Entscheidungsfindung besteht darin, dass an dieser Stelle möglicherweise zusĂ€tzliche Informationen verfĂŒgbar sind. Die Kosten dieser Methode umfassen die Kosten einer möglichen Verfeinerung der Architektur nach einer Entscheidung. Diese Kosten können durch geeignete Abstraktionen reduziert werden, können aber dennoch auftreten. Die Kosten fĂŒr Entscheidungen in der Anfangsphase sind jedoch ebenfalls sehr real. Treffen Sie zum Beispiel die Entscheidung, ein Messaging-Tool auszuwĂ€hlen. Verschiedene Tools unterstĂŒtzen unterschiedliche Funktionen. Wenn wir ein leistungsfĂ€higeres Werkzeug als nötig wĂ€hlen, erhalten wir eine schlecht konzipierte Architektur, die zwangslĂ€ufig weiterentwickelt werden muss. Diese "technische Verschuldung", die sich aus der Auswahl des falschen Tools ergibt, wird eine zusĂ€tzliche Belastung fĂŒr die Entwickler sein.

NatĂŒrlich besteht das Hauptproblem im letztmöglichen Moment einer Entscheidung darin, festzustellen, wann es kommt. Konzentrieren Sie sich dazu auf die Funktion der Fitness. ZunĂ€chst mĂŒssen Entscheidungen getroffen werden, die einen erheblichen Einfluss auf die Auswahl der Architektur oder der Gestaltungselemente haben können, sowie Entscheidungen, die den Gesamterfolg des Projekts erheblich beeinflussen. Die negativen Auswirkungen einer Verzögerung einer solchen Entscheidung ĂŒberwiegen hĂ€ufig die möglichen Vorteile einer spĂ€teren Entscheidung.

Fazit


Softwarearchitekten sollten die Entscheidungen ĂŒber den Entwurf der zu entwickelnden Systeme in der Regel anhand verschiedener Arten von Diagrammen erlĂ€utern. Architekturentwickler geraten hĂ€ufig in die Falle, Softwarearchitektur als die Gleichung darzustellen, die sie lösen mĂŒssen. Mit vielen kommerziellen Tools, die von Softwarearchitekten angeboten werden, können Sie die Architektur formell in Form von Quadraten, Linien und Pfeilen beschreiben. Obwohl solche Diagramme nĂŒtzlich sein mögen, bieten sie nur eine zweidimensionale Darstellung, eine Momentaufnahme der idealen Welt, aber wir leben in einer vierdimensionalen RealitĂ€t.

Um ein solches zweidimensionales Diagramm mit Leben zu fĂŒllen, muss es spezifiziert werden. Das ORM- Label in einem zweidimensionalen Diagramm wird zu Hibernate v4.2.17 , wodurch die betreffende Welt dreidimensional wird. Wenn Sie einen Plan fĂŒr die Implementierung in der Produktion haben und sechs Monate spĂ€ter auf die unvermeidliche Version von Hibernate v4.3.0.1 aktualisieren , sind Sie bereit fĂŒr die vierdimensionale Welt. Viele Architekten erkennen nicht, dass eine statische Ansicht der Architektur eine kurze Lebensdauer hat. Das Softwareuniversum existiert in einem Stream-Zustand, es ist dynamisch, nicht statisch. Architektur ist keine Gleichung, sondern eine Momentaufnahme eines laufenden Prozesses.

Praktiken der kontinuierlichen Softwarebereitstellung und von DevOps haben gezeigt, dass Probleme aufgrund eines Mangels an VerstĂ€ndnis fĂŒr die Anstrengungen entstehen, die zur Implementierung und UnterstĂŒtzung der Architektur erforderlich sind. Die Implementierung der Architektur ist nur der erste Schritt. Architektur bleibt eine Abstraktion, bis sie in die Tat umgesetzt wird. Mit anderen Worten, die langfristige RentabilitĂ€t einer Architektur kann nur beurteilt werden, wenn Sie sie nicht nur implementiert, sondern auch mindestens einmal geĂ€ndert haben. Und vielleicht haben sie es geschafft, die Überraschungen auf dem Weg zu bewĂ€ltigen.
Das VerstĂ€ndnis der BetriebsfĂ€higkeiten eines Softwarearchitekten ist entscheidend fĂŒr die Entwicklung einer evolutionĂ€ren Architektur. Die evolutionĂ€re Entwicklung der Architektur wirkt sich auf die Merkmale ihrer Implementierung aus und muss daher bei der Fertigstellung berĂŒcksichtigt werden. Die Anforderungen des kontinuierlichen Bereitstellungsprozesses fĂŒr die Architektur zielen darauf ab, ihre Visualisierung zu verbessern und Änderungen zu vereinfachen. Auf diese Weise verbessert die kontinuierliche Bereitstellung die FĂ€higkeiten der evolutionĂ€ren Architektur.

Am 19. November kommt Neil Ford mit einer Meisterklasse zum Erstellen einer evolutionÀren Softwarearchitektur nach Moskau.

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


All Articles