© Berezovska Anastasia/Shutterstock.com
Über die Kernelemente evolutionärer Architekturen

Bewegung im Architektur-Genpool


Microservices sind in aller Munde und meist auch schon in Produktion. Mit einem technischen Trend allein ist es jedoch nicht getan, wenn es darum geht, die zentralen Versprechungen rund um Langlebigkeit, Innovationsfähigkeit, Geschwindigkeit und Zuverlässigkeit einzulösen. Dieser Artikel verbreitert die Basis der Diskussion und führt in das ADES Framework ein.

In der Softwareentwicklung haben wir uns im letzten Jahrzehnt endgültig vom klassischen Ingenieurswesen verabschiedet. Es wird nurmehr selten versucht, aus weitreichender Analyse und konzeptioneller Betrachtung stabile Pläne zu entwickeln, die Entwicklung aufzuspalten und im Gleichschritt Richtung Umsetzung zu marschieren. Stattdessen werden immer dynamischere Wege gefunden, abstrakte Betrachtung und reale Umsetzung zu verzahnen. Einem groben Plan folgt ein langer empirischer Weg, der mit Unsicherheiten arbeitet und durch stetige Adaption zu einer gültigen Lösung führt. Warum? Weil ein solches Vorgehen besser mit Überraschungen umgehen kann.

Casey Rosenthal und Kollegen meinen, ein verteiltes System sinnvoller Größe werde schnell zu komplex, um von einem Menschen verstanden zu werden [1]. Auch größere monolithische Systeme könnten nicht von einzelnen Architekten oder Entwicklern im Detail durchdrungen werden. Nüchtern betrachtet merken wir oft schon vor der IDE sitzend, dass wir eigentlich eher rumprobieren und hoffen, dass es funktioniert, als einen Masterplan ohne Umschweife in Code zu gießen. Effektiv ist oft, mit einem Ziel im Hinterkopf zu experimentieren, zu erkennen, was funktioniert und erfolgreich ist, und dann entsprechend zu handeln. In der Gesamtbetrachtung der Entwicklung inklusive Lösungsdesign, Technologieauswahl, Integration, Framework-Einsatz und Legacy-Anbindung ist es noch unwahrscheinlicher, mit trockener Analyse allein erfolgreiche Lösungsstrategien zu finden. Evolutionäre Architekturansätze erkennen das an und lassen sich auf empirisches Vorgehen, Experimente und Bewegung in der Lösungsidee ein. Überraschungen sind das neue Normal.

Evolutionäre Architektur = Microservices?

Evolutionäre Architektur ist als Metapher dem Evolutionary Computing entlehnt und eine Idee zur Architekturausgestaltung, stark verknüpft mit agilen Werten und Prinzipien. Zentrales Paradigma ist, dass sich Architektur für größere Systeme stetig weiterentwickeln muss. Sei es aufgrund von Erkenntnissen aus der Implementierung, aufgrund von Innovationsdruck oder wegen aktueller Probleme in Betrieb oder Nutzung. Wir befinden uns mit Softwarelösungen demnach bestenfalls in einem „dynamischen Gleichgewicht“, in dem eine konstant gute Lösung stetige Anpassung braucht. Weil sich die Disziplin der Softwareentwicklung und generell der IT so schnell weiterentwickelt, ist jeder Stillstand auf Lösungs- und Architekturseite schädlich. Evolutionäre Architektur unterstützt die kleinteilige, inkrementelle Veränderung von Lösungen und fördert deren Zielrichtung.

Im Sinne der evolutionären Architekturarbeit teilen wir eine Gesamtarchitektur in eine Vielzahl architektonischer Fragestellungen, unter anderem die folgenden: Wie legen wir Daten ab, wie kommunizieren Bestandteile unseres Systems miteinander, wie gehen wir mit der Versionierung von Schnittstellen um, wie liefern wir den Nutzern ein passendes UI? Jede dieser Fragestellungen kann mit technischen oder konzeptionellen Lösungen beantwortet werden, und diese Antwort kann und soll sich über die Zeit ändern – neue Lösungsideen stehen zunächst auf dem Prüfstand, finden später eventuell breite Anwendung, werden irgendwann von neuen Ansätzen zurückgedrängt und schließlich abgelöst.

Dieser Zyklus evolutionärer Architektur wird von Microservices-Architekturen unterstützt, allerdings ist der Architekturstil allein keine vollständige Antwort auf evolutionäre Nöte. Microservices sorgen für Vertikalität, also für technische Isolation eigenständiger Domänenkonzepte. Das ermöglicht schrittweise technologische Migration und Innovation und bildet eine gute Basis für technische Evolution. Daneben sind jedoch weitere Aspekte zentral:

  • Experimentierkultur: Lösungen dezentral und oft challengen

  • Feedback: Automatisiert, häufig und kleinteilig auf Produktziele achten

  • Verantwortung: Starke Eigentümerschaft von Systemteilen etablieren

  • Soft Standards: Good Practices unterstützen, statt Regeln hart durchzusetzen

  • Transparenz: Weiterentwicklungen und Innovation sichtbar machen

Das ADES Framework [2] (Abb. 1) gibt einen ganzheitlichen Überblick zu diesen Themen und sortiert die organisatorischen, methodischen und technischen Aspekte evolutionärer Systementwicklung in sechs Lernsektoren. Entwicklungsvorhaben können sich daran orientieren, iterativ optimieren und sich wiederholt selbst einschätzen.

toth_evoarc_1.tif_fmt1.jpgAbb. 1: Das ADES Framework im Überblick

Verticality

Steigen wir links unten in das ADES Framework ein – nicht, weil es der einzige Einstiegspunkt wäre, der funktioniert, sondern weil Vertikalität die meisten Buzzwords enthält und bereits angesprochen wurde. Es geht hier darum, größere Systeme rund um fachlich eigenständige Teilgebiete (nach Domain-driven Design – DDD – die Domänen) zu strukturieren und anschließend technologische Barrieren zwischen diesen Teilgebieten hochzuziehen. Ein fachliches Teilgebiet enthält sowohl die Fachlogik (die in eigenen Prozessen läuft), die Datenhaltung (die nur einer fachlichen Domäne dienen darf) als auch UI-Artefakte (die nur Aspekte der Heimatdomäne abbilden).

Die entstandene Säule oder Vertikale reicht von UI bis Datenhaltung, ist unabhängig von anderen Vertikalen auslieferbar und auch zur Laufzeit unabhängig. Dadurch ist gewährleistet, dass Teams, die einer Vertikalen zugeordnet sind, diese auch frei ausgestalten können. Selbst bei Qualitätsproblemen sind nicht sofort andere Säulen und Teams betroffen, solange Abweichungen bei der Framework-Auswahl, Datenhaltung und Logikabbildung erlaubt sind.

Neben der methodisch-konzeptionellen Unterstützung durch DDD finden auch technische Themen wie Microservices, Self-contained Systems (SCS) und Containerization in diesem Sektor ein Zuhause. Eine gute Umsetzung von Vertikalität ermöglicht lokale Innovation und damit sowohl schrittweise Migration eines großen Systems als auch isolierte Spezialisierung auf Qualitätsziele. Evolutionäre Architektur erhält damit eine wichtige Basis. Neue (technologische) Ideen können relativ risikofrei in einzelnen Systemteilen getestet werden, ohne die Gesamtlösung zu gefährden oder zu große Diskussionen anzuzetteln.

Sie erkennen eine schwach...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang