Microservices, ehrlich gezeichnet
Jedes Microservice-Diagramm sieht gleich aus, und fast keines beantwortet die einzige Frage, die zählt: lässt sich einer davon allein ausliefern? Zwei Anordnungen derselben vier Dienste - eine, bei der es geht, und eine, bei der es nicht geht.
8 Min. LesezeitUML 2.5.134 von 35
Die kurze Antwort
- Die einzige Frage, die ein Microservice-Diagramm beantworten muss, ist, ob sich irgendein Kasten an einem eigenen Tag ausliefern liesse.
- Folgen Sie den synchronen Pfeilen und zählen Sie die Sprünge. Drei oder mehr Dienste, die für eine Benutzeraktion alle laufen müssen, sind ein verteilter Monolith.
- Zeichnen Sie Aufrufe als Schnittstellen und Ereignisse als Signale. Damit wird aus einer im Code vergrabenen Abwägung etwas, dem ein Reviewer widersprechen kann.
- Eine Datenbank je Dienst, und nicht auf dieses Diagramm. Wo sie laufen, ist die Verteilungssicht; was sie halten, das Modell des jeweiligen Dienstes.
01Die Frage, die ein Microservice-Diagramm beantworten muss#
Nicht "welche Dienste gibt es" - das leistet eine Liste, und die Liste steht meist in den Repository-Namen. Die Frage lautet: lässt sich irgendeiner davon für sich deployen? Alles, was man sich von Microservices erhofft - unabhängige Releases, unabhängige Skalierung, ein Team, das ohne Abstimmungstermin liefern kann - folgt daraus, dass die Antwort ja ist, und keine andere Eigenschaft der Zeichnung zählt, wenn sie nein ist.
Ein Komponentendiagramm beantwortet sie, sofern Sie das Richtige zeichnen. Jeder deploybare Dienst ist eine Komponente; jeder veröffentlichte Vertrag eine Schnittstelle; jedes Ereignis ein «signal». Decken Sie dann einen Dienst mit der Hand ab: wenn das Verbleibende seinen Ersatz vollständig spezifiziert, kann dieser Dienst nach eigenem Zeitplan released werden.
02Zwei Arten von Pfeil, mit Absicht#
In der Abbildung oben hängt das Gateway von IOrders ab - einem synchronen Vertrag, denn das Gateway kann dem Nutzer ohne Bestellung nicht antworten. Shipping und Billing zeigen auf OrderPlaced, ein Signal, das der Order service sendet und auf das er nicht wartet.
Beide unterschiedlich zu zeichnen ist der ganze Wert des Bildes. Die synchronen Kanten sind, wo Verfügbarkeit sich zusammensetzt: ist der Order service unten, gibt das Gateway einen Fehler zurück. Die Ereigniskanten sind, wo sie es nicht tut: ist Shipping unten, verzögert sich ein Paket und sonst nichts. Ein Diagramm, das beides als schlichte Pfeile zeichnet, hat den Unterschied getilgt, der entscheidet, wie das System ausfällt.
03Die Anordnung, die man erkennen sollte#
Das ist ein verteilter Monolith, und es ist die häufigste Form in der Produktion. Nichts daran ist illegal, nichts schlecht benannt, und es besteht jeden Review, weil es aussieht wie jedes andere Microservice-Diagramm. Was es sagt, wenn man die Pfeile statt der Kästen liest, ist, dass die vier Dienste zusammen deployt, zusammen getestet und zusammen oben sein müssen - das Team hat also jede Last der Verteilung auf sich genommen und jede Einschränkung eines Monolithen behalten.
Das Anzeichen ist zählbar: die Zahl synchroner Sprünge auf einer Anfrage. Einer ist in Ordnung. Zwei sind meist in Ordnung. Drei oder mehr, und die Verfügbarkeit des Ganzen ist das Produkt der Teile - vier Dienste mit je 99,9 % ergeben zusammen etwa 99,6 %, also drei Stunden im Monat, in denen niemand etwas bestellen kann.
Die Abhilfen sind auf derselben Zeichnung sichtbar. Lassen Sie Orders ein Ereignis publizieren und Pricing und Inventory darauf reagieren. Oder führen Sie zwei der Kästen zusammen, was eine legitime Antwort ist, die selten vorgeschlagen wird. Oder cachen Sie, was Pricing braucht, damit der Sprung nicht mehr im Anfragepfad liegt. Alle drei sind Änderungen an diesem Diagramm, und deshalb sind die zwanzig Minuten, es vor dem Bauen zu zeichnen, gut angelegt.
In je einer Zeile
- 01Eine Komponente je deploybarem Dienst, eine Schnittstelle je veröffentlichtem Vertrag, ein Signal je Ereignis.
- 02Zeichnen Sie synchrone und asynchrone Kopplung verschieden - so fällt das System aus.
- 03Synchron, wenn der Aufrufer die Antwort braucht; ein Ereignis, wenn nicht.
- 04Zählen Sie synchrone Sprünge je Anfrage: drei oder mehr ist ein verteilter Monolith.
- 05Entlang einer synchronen Kette multipliziert sich Verfügbarkeit, und aus vier Neunen werden drei.
- 06Decken Sie einen beliebigen Dienst ab: das Verbleibende muss seinen Ersatz spezifizieren, sonst kann er nicht allein ausgeliefert werden.
Die Notation behandelt der Leitfaden zum Komponentendiagramm, und fünf weitere Anordnungen - darunter der Zweiwege-Zyklus, den dieser Artikel nicht wiederholt - stehen in den Beispielen für Komponentendiagramme.
04Häufige Fragen#
Wie zeichnet man Microservices in UML?
Als Komponenten, eine je auslieferbarem Dienst, mit einer Schnittstelle für jeden veröffentlichten Vertrag und einem Signal für jedes Ereignis. Zum Microservice-Diagramm wird es dadurch, dass jeder Kasten an einem eigenen Tag veröffentlicht werden könnte - und die Schnittstellen ringsum stützen diese Behauptung oder widersprechen ihr.
Woran erkennt man im Diagramm einen verteilten Monolithen?
Folgen Sie den synchronen Pfeilen und zählen Sie die Sprünge pro Anfrage. Kreuzt eine einzelne Benutzeraktion drei oder mehr Dienste, die alle laufen müssen, haben Sie einen Monolithen verteilt statt zerlegt - und das Diagramm hat es Ihnen vor der Produktion gesagt.
Sollen Dienste synchron oder über Ereignisse sprechen?
Synchron, wenn der Aufrufer ohne die Antwort nicht weiterkommt, und über ein Ereignis, wenn er es kann. Beides unterschiedlich zu zeichnen - Schnittstelle für Aufrufe, Signal für Ereignisse - macht aus dieser Abwägung etwas, das ein Reviewer sieht und bestreiten kann, statt einer im Code vergrabenen Konvention.
Wohin gehört die Datenbank im Microservice-Diagramm?
Eine je Dienst, und nicht auf dieses Diagramm. Die Komponentensicht handelt von den Verträgen zwischen Diensten; fünf Datenbanken zu zeichnen fügt fünf Kästen hinzu, die dasselbe sagen. Wo sie laufen, gehört ins Verteilungsdiagramm, was sie halten, ins Modell des jeweiligen Dienstes.
In dieser Reihe
- 01Was ist UML?
- 02UML-Symbole
- 03Diagramm auswählen
- 04Klassendiagramme
- 05Klassendiagramm-Beispiele
- 06Klassendiagramm zeichnen
- 07Klassendiagramm-Symbole
- 08Sequenzdiagramme
- 09Sequenzdiagramm-Beispiele
- 10Sequenzdiagramm zeichnen
- 11Anwendungsfalldiagramme
- 12Anwendungsfall-Beispiele
- 13Aktivitätsdiagramme
- 14Aktivitätsbeispiele
- 15Zustandsdiagramme
- 16Zustandsdiagramm-Beispiele
- 17Komponentendiagramme
- 18Komponenten-Beispiele
- 19Komponentendiagramm zeichnen
- 20Komponenten-Symbole
- 21Verteilungsdiagramme
- 22Verteilungsbeispiele
- 23Objektdiagramme
- 24Paketdiagramme
- 25Kompositionsstrukturdiagramme
- 26Kommunikationsdiagramme
- 27Sequenz vs Kommunikation
- 28Zeitverlaufsdiagramme
- 29Interaktionsübersichtsdiagramme
- 30Profildiagramme
- 31UML mit KI
- 32E-Commerce-Beispiel
- 33Banken-Beispiel
- 34Microservices-Beispiel
- 35AWS-Beispiel
Passend dazu
Strukturdiagramme
Modellierungspraxis
Modellierungspraxis
Strukturdiagramme
Verhaltensdiagramme
Strukturdiagramme