Read in English · Leer en español · Lire en français
Abschnitt 1.1 von 1.8 · Einsteiger · 18 Min. Lesezeit
Was Softwarearchitektur ist: die Standarddefinitionen und ihre Gemeinsamkeiten
Videolektion
5 Min. · auf Englisch gesprochen, mit UntertitelnNur anhören (Audio)
Transkript lesen
Fragen Sie zehn erfahrene Fachleute, was Softwarearchitektur ist, und Sie hören zehn verschiedene Antworten. Deshalb legen wir das Wort in dieser Lektion fest, denn eine gute Definition sagt Ihnen, worauf Sie achten und was Sie schützen sollten.
Beginnen wir mit einem Krankenhausgebäude. Seine Architektur ist nicht der Bauplan an der Wand. Sie ist die tatsächliche Anordnung des Gebäudes: wo die Stationen liegen und welche Flure sie verbinden. Wo die Aufzüge fahren und welche Türen verschlossen bleiben müssen. Und die Regeln, die alle befolgen, wenn sie es erweitern. Manche Entscheidungen, etwa wo die Aufzüge sind, wären nur mit einem Vermögen zu ändern. Die Vorhänge nicht. Softwarearchitektur ist dieselbe Idee für ein Softwaresystem.
Die Definitionen stammen aus drei Quellen. Der internationale Standard für Architekturbeschreibungen nennt sie die grundlegenden Eigenschaften von etwas in seiner Umgebung, plus die Prinzipien, nach denen es gebaut wird und sich verändert. Das Software Engineering Institute, kurz SEI, liefert die meistgelehrte Definition: die Strukturen, die man braucht, um über ein System nachzudenken, aus Elementen, ihren Beziehungen und den Eigenschaften beider. Praktiker fassen es kürzer. Ralph Johnson nannte es das gemeinsame Verständnis der erfahrenen Entwickler. Grady Booch nannte es die bedeutsamen Designentscheidungen, wobei Bedeutsamkeit an den Änderungskosten gemessen wird.
So sieht das für einen Essenslieferdienst aus. Innerhalb der Systemgrenze liegen die Elemente: eine mobile App, ein Bestellservice, eine Bestelldatenbank, ein Kurierservice und ein Zahlungsmodul. Die Beziehungen zeigen, wie sie verbunden sind. Die mobile App ruft den Bestellservice über HTTPS auf, und der Bestellservice fragt seine Datenbank per SQL ab. Eigenschaften stehen neben den Elementen. Der Bestellservice zum Beispiel ist zustandslos und läuft in drei Kopien. Außerhalb der Grenze liegt die Umgebung: Kunden, Kuriere, Restaurants und der Kartenzahlungsanbieter. Zur Umgebung gehören auch Recht, Budget, die Organisation und ihre Teams sowie die Cloud-Plattform. Ohne sie können Sie eine Architektur nicht beurteilen.
Ein System hat mehrere Strukturen zugleich, von drei Arten. Hier ist ein Onlineshop, auf drei Arten betrachtet. Modulstrukturen zeigen, wie der Code aufgeteilt ist: ein Checkout-Paket, das ein Katalog-Paket und gemeinsame Hilfsfunktionen nutzt. Sie beantworten: Wer kann was ändern, und was geht kaputt? Komponenten-und-Konnektoren-Strukturen zeigen, was läuft: Ein Web-Frontend ruft einen Checkout-Service auf, der eine Nachricht an eine Zahlungs-Queue sendet. Sie beantworten Laufzeitfragen: Wie schnell, wie zuverlässig, wie sicher? Zuordnungsstrukturen bilden die Software auf Dinge außerhalb ab: den Container-Cluster in Cloud-Region A und das Checkout-Team, dem er gehört. Sie beantworten: Was kostet es, und wer baut und betreibt es?
Nebeneinander gelesen, teilen die Definitionen sieben Ideen. Die ersten vier haben Sie gerade gesehen: Strukturen, bestehend aus Elementen, Beziehungen und Eigenschaften. Fünftens Entscheidungen: die Entscheidungen, aus denen die Strukturen hervorgingen, samt ihren Gründen. Ohne die Gründe machen Menschen später gute Entscheidungen versehentlich rückgängig. Sechstens Bedeutsamkeit. Nur manches ist architekturrelevant: was teuer zu ändern ist, viele Teile betrifft oder ein zentrales Qualitätsmerkmal bestimmt. Und siebtens die Umgebung: die Nutzer, Systeme, Organisation, Gesetze und Budgets rund um das System, die es prägen und von ihm geprägt werden.
Wenden wir das an. Ein Essenslieferunternehmen bittet eine neue Architektin, ihm zu sagen, was seine Architektur ist. Alles, was es gibt, ist ein veraltetes Diagramm. Mit den gemeinsamen Ideen als Checkliste listet die Architektin die Elemente und Beziehungen auf. Die Apps rufen den Bestellservice auf, der in eine gemeinsame Datenbank schreibt und Events veröffentlicht, die die Kurierzuordnung aufgreift. Dann die Eigenschaften. Der Bestellservice ist zustandslos und läuft in drei Kopien. Die Kurierzuordnung hält ihren Zustand im Arbeitsspeicher und läuft als einzelne Kopie. Als Nächstes: beabsichtigt gegenüber tatsächlich. Das alte Diagramm zeigt eine eigene Datenbank pro Service. In Wirklichkeit liest der Kurierservice die Bestelltabellen direkt. Das bringt zwei Risiken zutage, die niemand benannt hatte: einen Single Point of Failure und eine gemeinsame Datenbank, die zwei Teams aneinanderbindet. Keines davon war im Code eines einzelnen Service sichtbar. Beide sind Eigenschaften der Struktur, also zählen sie zur Architektur.
Daraus folgen zwei Lehren. Erstens hat jedes System eine Architektur, ob sie jemand absichtlich entworfen hat oder nicht. Die Frage ist, ob sie ihren Zweck erfüllt, verstanden wird und bewusst gestaltet ist. Zweitens ist die Architektur nicht dasselbe wie ihre Beschreibung. Ein Diagramm ist ein Arbeitsergebnis, das sie ausdrückt, und es kann unvollständig oder veraltet sein. Und wenn Sie unsicher sind, stellen Sie drei Fragen. Wäre es später teuer zu ändern? Betrifft es mehrere Teile oder Teams? Entscheidet es über ein wichtiges Qualitätsmerkmal, etwa Geschwindigkeit oder Sicherheit? Ist eine Antwort Ja, behandeln Sie es als Architektur.
Das ist Architektur. Der vollständige Abschnitt vergleicht die Definitionen nebeneinander und behandelt verbreitete Missverständnisse. Als Nächstes sehen wir uns in Abschnitt eins Punkt zwei an, wo Architektur endet und Design beginnt. Bis gleich.
Was Sie wissen müssen
- ISO/IEC/IEEE 42010:2022 definiert Architektur als die grundlegenden Konzepte oder Eigenschaften eines Betrachtungsgegenstands in seiner Umgebung sowie die maßgebenden Prinzipien für seine Realisierung und Weiterentwicklung.
- Bass, Clements und Kazman definieren Softwarearchitektur als die Menge der Strukturen, die man braucht, um über ein System nachzudenken: Softwareelemente, die Beziehungen zwischen ihnen und die Eigenschaften beider.
- Definitionen aus der Praxis ergänzen, dass Architektur das gemeinsame Verständnis der erfahrenen Entwickler ist (Ralph Johnson) und die bedeutsamen Entscheidungen umfasst, wobei Bedeutsamkeit an den Änderungskosten gemessen wird (Grady Booch).
- Die Definitionen teilen sieben Ideen: Strukturen, Elemente, Beziehungen, Eigenschaften, Entscheidungen, Bedeutsamkeit und Umgebung.
- Systeme haben drei Arten von Strukturen: Modulstrukturen (Code), Komponenten-und-Konnektoren-Strukturen (Laufzeit) und Zuordnungsstrukturen (Abbildung auf Infrastruktur, Teams und Dateien).
- Jedes System hat eine Architektur, ob sie bewusst entworfen oder aufgeschrieben wurde oder nicht; eine Architekturbeschreibung ist ein eigenes Arbeitsergebnis, das sie ausdrückt.
Warum das Wort überhaupt eine Definition braucht
Fragen Sie zehn erfahrene Fachleute, was Softwarearchitektur ist, und Sie hören zehn verschiedene Antworten: das Kästchen-und-Pfeile-Diagramm an der Wand, die Wahl des Cloud-Anbieters, das Datenbankschema, die Aufteilung in Services, die Regeln, welcher Code welchen aufrufen darf, oder einfach „die schwierigen Entscheidungen“. Jede Antwort erfasst etwas Reales, und jede für sich allein lässt etwas aus. Ein Kurs, der Architektur lehren will, muss daher zuerst genau sagen, wovon er spricht.
Das hat praktische Gründe. Wenn ein Team glaubt, Architektur sei „das Diagramm“, hört es auf hinzusehen, sobald das Diagramm gezeichnet ist, obwohl sich das System darunter weiter verändert. Wenn es glaubt, Architektur sei „der Technologie-Stack“, streitet es über Frameworks und übersieht, wie Verantwortlichkeiten aufgeteilt sind und wie Daten fließen. Eine gute Definition sagt Ihnen, worauf Sie achten, was Sie schützen und was Sie mit anderen besprechen sollten.
Die folgenden Definitionen stammen aus einem internationalen Standard, vom Software Engineering Institute (SEI) der Carnegie Mellon University und aus der Praxis. Sie wurden für unterschiedliche Zwecke geschrieben, stimmen aber mehr überein, als sie sich widersprechen, und die Punkte, in denen sie übereinstimmen, bilden den Kern der Disziplin.
Die Standarddefinition: ISO/IEC/IEEE 42010:2022
ISO/IEC/IEEE 42010 ist der internationale Standard für die Beschreibung von Architekturen. Seine aktuelle Ausgabe, veröffentlicht im November 2022, hat die Ausgabe von 2011 ersetzt. Er definiert Architektur, eng umschrieben, als die grundlegenden Konzepte oder Eigenschaften eines Betrachtungsgegenstands in seiner Umgebung, zusammen mit den maßgebenden Prinzipien für dessen Realisierung und Weiterentwicklung und für die zugehörigen Lebenszyklusprozesse.
Drei Merkmale dieser Definition verdienen Aufmerksamkeit. Erstens spricht sie von einem Betrachtungsgegenstand, nicht nur von einem Softwaresystem. Die Ausgabe von 2022 hat den Geltungsbereich bewusst erweitert, sodass dieselben Ideen für Software, Systemverbünde, Produkte, Produktlinien und ganze Unternehmen gelten. Zweitens stellt sie den Gegenstand in seine Umgebung: Eine Architektur lässt sich nicht verstehen ohne die Nutzer, anderen Systeme, Organisation, Gesetze und Budgets um sie herum. Drittens umfasst sie maßgebende Prinzipien dafür, wie der Gegenstand gebaut wird und wie er sich verändert. Architektur ist nicht nur eine Momentaufnahme der Struktur; sie umfasst die Regeln, die die Struktur stimmig halten, während sich das System weiterentwickelt, etwa „jeder Service besitzt seine eigenen Daten“ oder „der Domänencode hängt nie vom Web-Framework ab“.
Der Standard zieht außerdem eine scharfe Linie zwischen einer Architektur und einer Architekturbeschreibung. Die Architektur ist die Menge der grundlegenden Eigenschaften, die das System tatsächlich hat. Die Beschreibung ist ein Arbeitsergebnis (Dokumente, Modelle, Diagramme, Entscheidungsprotokolle), das sie ausdrückt. ISO/IEC/IEEE 42010 ist vor allem ein Standard über Beschreibungen: Er legt fest, was eine gute Beschreibung enthalten sollte, etwa die identifizierten Stakeholder, ihre Anliegen und Sichten, die diese Anliegen behandeln. Er sagt Ihnen nicht, wie Sie eine Architektur entwerfen. Abschnitt 1.5 kommt auf Stakeholder und Anliegen zurück, und Kapitel 4 behandelt Sichten.
Die SEI-Definition: Strukturen, Elemente, Beziehungen und Eigenschaften
Die am häufigsten gelehrte Definition stammt aus Software Architecture in Practice von Len Bass, Paul Clements und Rick Kazman (4. Auflage, Addison-Wesley, 2021), deren Autoren am SEI tätig waren. Sinngemäß in ihren Worten: Die Softwarearchitektur eines Systems ist die Menge der Strukturen, die man braucht, um über das System nachzudenken, und diese Strukturen bestehen aus Software-Elementen, den Beziehungen zwischen ihnen und den Eigenschaften beider.
Jeder Teil dieses Satzes leistet etwas. Strukturen, im Plural: Ein System hat viele Strukturen zugleich (seine Codemodule, seine laufenden Prozesse, seine Verteilung auf Maschinen), und keine einzelne davon ist „die“ Architektur. Die man braucht, um über das System nachzudenken: Ob etwas architekturrelevant ist, zeigt sich daran, ob Sie es brauchen, um wichtige Fragen zu beantworten, etwa „Übersteht das die Spitzenlast?“ oder „Können zwei Teams unabhängig daran arbeiten?“. Elemente sind die Teile: Module, Services, Datenbanken, Queues. Beziehungen sind die Art, wie sie verbunden sind: nutzt, ruft auf, veröffentlicht an, ist deployt auf. Eigenschaften bestimmen, wie sich Elemente und Beziehungen verhalten: Ein Service ist zustandslos, ein Aufruf ist synchron mit einem Timeout von zwei Sekunden, eine Datenbank enthält personenbezogene Daten und muss in der EU bleiben.
Die Formulierung über das Nachdenken erklärt auch, was keine Architektur ist. Der Name einer lokalen Variable, der interne Algorithmus einer Sortierroutine oder das Layout eines Einstellungsbildschirms helfen meist nicht, über das System als Ganzes nachzudenken; sie gehören daher zum Feinentwurf und nicht zur Architektur. Abschnitt 1.2 untersucht, wo diese Grenze verläuft.
Elemente, Beziehungen, Eigenschaften und Umgebung
Definitionen aus der Praxis: gemeinsames Verständnis, das Wichtige und Entscheidungen
Praktiker haben kürzere Definitionen vorgeschlagen, die Menschen und Entscheidungen statt Strukturen betonen. Martin Fowler hat zwei von Ralph Johnson bekannt gemacht (einem der vier Autoren des Buchs Design Patterns von 1994). Die erste lautet, Architektur sei das gemeinsame Verständnis, das die erfahrenen Entwickler davon haben, wie das System entworfen ist. Die zweite, aus derselben Diskussion, ist bewusst offen gehalten: Bei Architektur geht es um das Wichtige. Was immer das ist.
Johnson schlug außerdem vor, Architektur sei die Menge der Entscheidungen, die man gern früh in einem Projekt richtig treffen würde, nicht weil man sie früh eher richtig trifft, sondern weil ein Fehler bei ihnen so teuer ist.
Grady Booch, einer der Schöpfer der UML, fasste es ökonomisch: Architektur besteht aus den bedeutsamen Designentscheidungen, die ein System prägen, wobei Bedeutsamkeit an den Änderungskosten gemessen wird. Das macht aus einer abstrakten Idee einen brauchbaren Test. Die Farbe eines Buttons zu wählen, lässt sich billig rückgängig machen. Die Wahl zwischen einer relationalen Datenbank und einem Dokumentenspeicher oder zwischen einer deploybaren Einheit und vierzig ist teuer rückgängig zu machen, sobald Daten, Code und Teams darum herum gewachsen sind. Booch stellte auch fest, dass jede Architektur Design ist, aber nicht jedes Design Architektur.
Diese Definitionen ergänzen etwas, das die strukturellen offenlassen. Architektur lebt zum Teil in den Köpfen der Menschen; ein System, dessen erfahrene Fachleute ein klares gemeinsames Bild davon haben, wie es funktioniert, hat eine stimmigere Architektur als eines, bei dem jeder ein anderes Bild im Kopf hat, selbst wenn keines von beiden ein Diagramm besitzt. Und Architektur wird durch Entscheidungen geprägt, von denen viele eine Abwägung erfordern: Wer sich für eine Option entscheidet, verzichtet auf die Vorteile einer anderen. Abschnitt 1.6 behandelt Entscheidungen und Abwägungen im Detail.
Die Definitionen im Vergleich
| Quelle | Kernidee (sinngemäß) | Was sie betont | Am nützlichsten für |
|---|---|---|---|
| ISO/IEC/IEEE 42010:2022 | Grundlegende Konzepte oder Eigenschaften eines Betrachtungsgegenstands in seiner Umgebung sowie maßgebende Prinzipien für seine Realisierung und Weiterentwicklung | Umgebung, Prinzipien, Weiterentwicklung; Architektur getrennt von ihrer Beschreibung | Verträge, Normungsarbeit, einheitliche Beschreibung von Architekturen in einer Organisation |
| Bass, Clements und Kazman (2021) | Die Menge der Strukturen, die man braucht, um über das System nachzudenken: Elemente, Beziehungen und die Eigenschaften beider | Mehrere Strukturen; Nachdenken über Qualitätsmerkmale | Analyse und Entwurf: die Frage, ob eine Struktur ihre Ziele erreicht |
| Ralph Johnson, über Martin Fowler | Das gemeinsame Verständnis erfahrener Entwickler; das Wichtige, was immer das ist | Menschen, Kommunikation, Urteil darüber, was wichtig ist | Teampraxis: ein gemeinsames mentales Modell lebendig halten |
| Grady Booch | Die bedeutsamen Designentscheidungen, die ein System prägen, wobei Bedeutsamkeit an den Änderungskosten gemessen wird | Entscheidungen und ihre Ökonomie | Entscheiden, wohin der Analyseaufwand fließt |
Was die Definitionen gemeinsam haben
Nebeneinander gelesen, laufen die Definitionen auf sieben Ideen zusammen, die gemeinsam eine Arbeitsdefinition für den restlichen Kurs bilden.
Sieben gemeinsame Ideen
- StrukturenEin System hat mehrere Strukturen zugleich, die es jeweils aus einem anderen Blickwinkel zeigen. Kein einzelnes Diagramm ist die ganze Architektur.
- ElementeDie Teile, aus denen diese Strukturen bestehen: Module, Komponenten, Services, Datenspeicher, Queues, Server.
- BeziehungenWie die Elemente verbunden sind und voneinander abhängen: Aufrufe, Nachrichten, gemeinsame Daten, Deployment, Zuständigkeit.
- EigenschaftenDie von außen sichtbaren Merkmale von Elementen und Beziehungen, etwa zustandslos, verschlüsselt, asynchron oder repliziert, die zusammen die Qualitätsmerkmale des Systems bestimmen.
- EntscheidungenDie Entscheidungen, aus denen die Strukturen hervorgegangen sind, mit den Gründen und verworfenen Alternativen dahinter. Ohne die Gründe machen Menschen später gute Entscheidungen versehentlich rückgängig.
- BedeutsamkeitNur manches ist architekturrelevant: was teuer zu ändern ist, viele Teile betrifft oder ein zentrales Qualitätsmerkmal bestimmt. Architektur ist per Definition selektiv.
- UmgebungDas System steht inmitten von Nutzern, anderen Systemen, einer Organisation, Gesetzen und Budgets. Diese prägen die Architektur und werden von ihr geprägt.
Drei Arten von Strukturen
Die Arbeit des SEI zur Dokumentation, veröffentlicht als Documenting Software Architectures: Views and Beyond (Clements und Kollegen, 2. Auflage, 2010), teilt Strukturen in drei Arten ein, und Software Architecture in Practice verwendet dieselbe Einteilung. Wer die drei Arten kennt, ist vor dem häufigsten Fehler in Architekturdiskussionen geschützt: über eine Art von Struktur zu sprechen, während das Gegenüber an eine andere denkt.
Modulstrukturen zeigen, wie der Code in Implementierungseinheiten aufgeteilt ist, etwa Pakete, Bibliotheken und Namensräume, und wie diese Module voneinander abhängen. Sie existieren zur Entwicklungszeit. Sie beantworten Fragen wie: Welches Team kann was ändern, ohne anderen etwas kaputtzumachen, und welcher Code lässt sich wiederverwenden?
Komponenten-und-Konnektoren-Strukturen zeigen, was existiert, wenn das System läuft: Prozesse, Services, Clients, Datenbanken und die Konnektoren dazwischen, etwa HTTP-Aufrufe, Message Queues und Event-Streams. Sie beantworten Laufzeitfragen: Wie schnell ist eine Anfrage, was passiert, wenn ein Teil ausfällt, wo liegen die Daten?
Zuordnungsstrukturen bilden Software auf Dinge außerhalb der Software ab: auf Hardware und Cloud-Infrastruktur (Deployment), auf Teams (Arbeitszuteilung) und auf Dateien und Repositorys (Implementierung). Sie beantworten Fragen zu Kosten, Betrieb und Organisation: Wo läuft es, wer baut es, wer wird nachts geweckt, wenn es ausfällt?
Ein Element kann in allen dreien vorkommen. Eine Checkout-Funktion ist in der Modulstruktur ein Paket, in der Komponenten-und-Konnektoren-Struktur ein laufender Service und in den Zuordnungsstrukturen eine Menge von Containern in einer Cloud-Region, die dem Checkout-Team gehören. Die Abbildung zwischen den Strukturen ist nicht immer eins zu eins: Ein einzelnes Modul kann als mehrere Services deployt werden, oder mehrere Module laufen in einem Prozess. Genau in dieser Lücke verbergen sich viele Überraschungen.
Ein System, drei Arten von Strukturen
Jedes System hat eine Architektur
Weil Architektur aus Strukturen und den Eigenschaften besteht, die sie tatsächlich haben, hat jedes Softwaresystem eine Architektur, ob sie jemand absichtlich entworfen hat oder nicht und ob sie aufgeschrieben ist oder nicht. Ein Tabellenkalkulationsmakro, das zu einem geschäftskritischen Werkzeug gewachsen ist, hat eine Architektur. Ebenso die Codebasis eines Start-ups, die drei Leute in Eile geschrieben haben. Die Frage ist nie, ob ein System eine Architektur hat, sondern ob diese Architektur ihren Zweck erfüllt, von den Menschen verstanden wird, die daran arbeiten, und bewusst gestaltet ist.
Daraus ergibt sich eine nützliche Unterscheidung. Die beabsichtigte (oder präskriptive) Architektur ist das, was das Team für die richtige Struktur hält oder beschlossen hat: das Diagramm im Wiki, die vereinbarten Regeln. Die tatsächliche (oder deskriptive) Architektur ist das, was Code und Infrastruktur wirklich tun. Beide driften mit der Zeit auseinander, wenn niemand sie in Einklang hält, und diese Lücke ist eine der Hauptquellen technischer Schulden, die in Abschnitt 1.7 behandelt werden. Eine undokumentierte Architektur fehlt nicht; sie ist nur schwerer zu sehen, zu durchdenken und sicher zu ändern.
Ausgearbeitetes Beispiel
Ausgearbeitetes Beispiel: die Definitionen auf eine Essensliefer-App anwenden
Ein Essenslieferunternehmen bittet eine neue Architektin: „Sagen Sie uns, was unsere Architektur ist.“ Es gibt ein veraltetes Diagramm. Mit den gemeinsamen Ideen als Checkliste erstellt die Architektin innerhalb einer Woche eine erste Beschreibung.
| Elemente | Mobile App, Web-App für Restaurants, Bestellservice, Kurierzuordnungsservice, Zahlungsmodul, eine gemeinsame PostgreSQL-Datenbank, ein Message Broker, ein externer Kartenzahlungsanbieter. |
|---|---|
| Beziehungen | Die Apps rufen den Bestellservice über HTTPS auf; der Bestellservice schreibt in die gemeinsame Datenbank und veröffentlicht „Bestellung aufgegeben“-Events; die Kurierzuordnung konsumiert diese Events; das Zahlungsmodul ruft die API des Anbieters auf. |
| Eigenschaften | Der Bestellservice ist zustandslos und läuft in drei Kopien; die Kurierzuordnung hält ihren Zustand im Arbeitsspeicher und läuft als einzelne Kopie; die Datenbank enthält personenbezogene Daten und Karten-Tokens. |
| Umgebung | Zwei Entwicklungsteams, eine Lebensmittelaufsichtsbehörde, Datenschutzrecht, ein festes Cloud-Budget, Restaurants mit unzuverlässigen Tablets. |
| Gefundene bedeutsame Entscheidungen | Eine gemeinsame Datenbank für alle Services; eine einzelne Kopie der Kurierzuordnung; Events für die Kurierdisposition, aber direkte Aufrufe für Zahlungen. |
| Beabsichtigt vs. tatsächlich | Das alte Diagramm zeigt getrennte Datenbanken pro Service. In Wirklichkeit liest der Kurierservice die Bestelltabellen direkt, sodass die beiden Services nicht unabhängig voneinander geändert werden können. |
Die Übung bringt zwei Risiken zutage, die niemand benannt hatte: Die einzelne Kopie der Kurierzuordnung ist ein Single Point of Failure, und die gemeinsame Datenbank koppelt zwei Teams aneinander.
Keines der beiden Risiken war im Code eines einzelnen Service sichtbar. Beide sind Eigenschaften von Strukturen und Beziehungen, und deshalb zählen sie zur Architektur.
Die Beschreibung dauerte eine Woche, weil niemand die Entscheidungen oder ihre Gründe festgehalten hatte. Das Festhalten ist Thema von Kapitel 4.
Wie Fachleute die Definitionen nutzen
In der Praxis sagen erfahrene Architekten selten eine Definition auf, aber sie nutzen jede als Linse. Die ISO-Sicht erinnert sie daran, nach außen auf die Umgebung zu schauen und das, was das System ist, von dem zu trennen, was die Dokumente sagen. Die SEI-Sicht gibt ihnen ein Vokabular aus Strukturen, Elementen, Beziehungen und Eigenschaften für die Analyse und einen Test („Brauchen wir das, um über das System nachzudenken?“). Johnsons Sicht erinnert sie daran, dass ein gemeinsames mentales Modell im Team selbst ein Wert ist, der gepflegt werden muss. Boochs Sicht sagt ihnen, wofür sie ihre begrenzte Zeit einsetzen sollten: für die Entscheidungen, die teuer rückgängig zu machen wären.
Daraus folgt eine praktische Faustregel. Wenn Sie unsicher sind, ob etwas architekturrelevant ist, stellen Sie drei Fragen. Wäre es später teuer oder riskant, es zu ändern? Betrifft es mehrere Teile des Systems oder mehrere Teams? Entscheidet es darüber, ob das System ein wichtiges Qualitätsziel erreicht, etwa Geschwindigkeit, Verfügbarkeit oder Sicherheit? Lautet die Antwort auf eine dieser Fragen Ja, behandeln Sie es als Architektur: Entscheiden Sie es bewusst, halten Sie die Gründe fest und sorgen Sie dafür, dass die Betroffenen es verstehen.
Prüfen Sie Ihr Verständnis
Was ist der Unterschied zwischen einer Architektur und einer Architekturbeschreibung?
Die Architektur ist die Menge der grundlegenden Eigenschaften und Strukturen, die das System tatsächlich hat. Die Beschreibung ist ein Arbeitsergebnis, etwa Diagramme und Dokumente, das sie ausdrückt, und sie kann unvollständig oder veraltet sein.
Welche Art von Struktur würden Sie untersuchen, um herauszufinden, welches Team geweckt wird, wenn ein Service ausfällt?
Eine Zuordnungsstruktur, genauer die Abbildung der Arbeitszuteilung oder Zuständigkeit von Software auf Teams.
Ist nach Boochs Test die Wahl der Logging-Bibliothek eine Architekturentscheidung?
Meist nicht, wenn sie hinter einer kleinen Schnittstelle verborgen und billig austauschbar ist. Sie wird architekturrelevant, wenn jedes Modul sie direkt aufruft und sie dadurch teuer zu ändern ist.
Warum erwähnt die ISO-Definition die Umgebung?
Weil sich eine Architektur nur im Verhältnis zu den Nutzern, Systemen, der Organisation, den Gesetzen und Budgets um sie herum beurteilen lässt; dieselbe Struktur kann in einer Umgebung gut und in einer anderen schlecht sein.
Quellen und weiterführende Literatur
Haben Sie eine Frage zu diesem Abschnitt? ArchitectBot, der KI-Lernassistent des Kurses, antwortet zuerst aus dem Kurs.
Fragen: „Das einzige Architekturdiagramm meines Teams ist zwei Jahre alt. Wie finde ich heraus, was unsere tatsächliche Architektur ist und welche Teile davon bedeutsam sind?“