Archyno
UMLStrukturdiagramme

Verteilungsdiagramm-Beispiele

Drei Verteilungsdiagramme von Systemen, die Sie kennen - eine dreischichtige Webanwendung, ein Kubernetes-Cluster und ein Pool hinter einem Load Balancer - jeweils mit der Begründung, was gezeichnet und was bewusst weggelassen wurde.

8 Min. LesezeitUML 2.5.122 von 35

Die kurze Antwort

  • Vier Knoten, drei beschriftete Kommunikationspfade und drei Deploy-Pfeile ergeben ein vollständiges Diagramm: Browser, Webserver, Anwendungsserver, Datenbank.
  • Ein laufender Container ist eine Ausführungsumgebung und damit ein Knoten. Das Image, aus dem er startete, ist ein Artefakt - das Image als Knoten zu zeichnen ist der übliche Fehler.
  • Zeigen Sie Redundanz über eine Multiplizität wie 3..* an einem Knoten. Ein Diagramm, das genau drei Instanzen behauptet, ist nach dem ersten Autoscaling falsch.
  • Zeichnen Sie nur so viel, wie die Frage beantwortet, wegen der Sie zeichnen. Jeder weitere Knoten ist eine Behauptung, die nach der nächsten Migration jemand wahr halten muss.
Ein dreischichtiges UML-Verteilungsdiagramm. Ein Browser-Gerät verbindet sich über HTTPS mit einer nginx-Ausführungsumgebung, die sich über HTTP auf Port 8080 mit einem Anwendungsserver verbindet, der sich über TCP auf Port 5432 mit einem Postgres-Datenbankgerät verbindet. Von oben sind drei Artefakte darauf deployt: web-ui.tar.gz auf nginx, orders.jar auf den Anwendungsserver und schema.sql auf die Datenbank.
Der Dreischichtstapel: vier Knoten, drei Protokolle, drei Artefakte. Die meisten ersten Verteilungsdiagramme sind dieses Diagramm mit anderen Namen.

01Beispiel 1: eine dreischichtige Webanwendung#

Das Diagramm oben ist das, welches man aus dem Kopf zeichnen können sollte. Ein Browser, ein Webserver, der TLS terminiert, ein Anwendungsserver, eine Datenbank. Drei Kommunikationspfade mit Protokoll und Port und drei Artefakte, auf die Knoten gelegt, die sie ausführen.

Zwei Entscheidungen darin verdienen einen Namen. Erstens sind die Protokollbeschriftungen der Grund, warum das Diagramm nützlich ist: HTTPS, HTTP/8080, TCP/5432 ist der gesamte Inhalt der meisten Sicherheitsprüfungen, und ein Diagramm ohne sie sind vier Kästen, die jeder hätte raten können. Zweitens sind die Artefakte echte Dateinamen - orders.jar, nicht „Anwendung“ - denn ein Verteilungsdiagramm handelt von physischen Dingen, und ein Build erzeugt Dateien mit Namen.

02Beispiel 2: ein Kubernetes-Cluster#

Container lassen Leute zögern, weil ein Container zugleich etwas Laufendes und etwas Gebautes ist. UML trennt das bereits: der laufende Container ist eine Ausführungsumgebung, also ein Knoten, und das Image, aus dem er startete, ist ein Artefakt, das darauf deployt wird.

Ein Kubernetes-UML-Verteilungsdiagramm. Ein Load-Balancer-Gerät verbindet sich über HTTPS mit einer ingress-nginx-Ausführungsumgebung, die sich über HTTP auf Port 8080 mit einer orders-Pod-Ausführungsumgebung verbindet, die sich über TCP auf Port 5432 mit einem verwalteten Datenbankgerät verbindet. Von oben darauf deployt: ingress.yaml auf den Ingress, das Container-Image orders:1.4.2 auf den Pod und schema.sql auf die Datenbank.

An der Form dieses Diagramms unterscheidet sich nichts vom dreischichtigen, und das ist der Punkt: die Laufzeit hat sich geändert, die Notation nicht. Der Load Balancer ist ein «device», weil er Infrastruktur ist, in die Sie nicht deployen. Der Ingress-Controller und der Pod sind «execution environment», weil in ihnen anderes läuft. Der Image-Tag orders:1.4.2ist ein Artefakt, weil ein Build ihn erzeugt hat, und die Version in die Beschriftung zu setzen ist das, was das Diagramm „was läuft gerade in Produktion“ beantworten lässt.

Die verwaltete Datenbank sitzt als schlichtes Gerät am Rand. Das ist die ehrliche Zeichnung: man deployt keine Artefakte auf einen Dienst, den jemand anders betreibt, und so zu tun, als sei das Schema „auf RDS“ installiert, stimmt nur in dem Sinn, dass es dort einmal angewandt wurde.

03Beispiel 3: ein lastverteilter Pool#

Der häufigste Grund, ein Verteilungsdiagramm zu öffnen, ist herauszufinden, was passiert, wenn ein Kasten stirbt. Diese Frage hat eine Form, und es lohnt sich, sie ausdrücklich zu zeichnen, statt sie einer Fußnote zu überlassen.

Ein UML-Verteilungsdiagramm, das horizontale Skalierung zeigt. Ein haproxy-Load-Balancer-Gerät verbindet sich nach unten mit drei identischen Anwendungsknoten, app-01, app-02 und app-03. Alle drei verbinden sich nach unten mit einem einzigen primären Datenbankknoten.

Drei Anwendungsknoten hinter einem Load Balancer, alle auf eine einzige Primärdatenbank schreibend. So gezeichnet ist der Single Point of Failure sichtbar, ohne dass ihn jemand aussprechen muss: die Anwendungsschicht fächert auf, die Datenschicht nicht. Das ist ein Satz, auf den jemand reagieren wird, und er hat keine zusätzliche Notation gekostet.

Ändert sich die Anzahl zur Laufzeit, ersetzen Sie die drei Knoten durch einen mit Multiplizität - app-node [3..*] - statt eine willkürliche Zahl zu zeichnen. Ein Diagramm, das genau drei behauptet, ist beim ersten Skalieren der Gruppe falsch, und ein als falsch bekanntes Diagramm wird nicht mehr konsultiert.

04Was wegzulassen ist#

Jedes Verteilungsdiagramm, das nutzlos wird, wird es auf dieselbe Weise: jemand hat immer weiter Knoten ergänzt. Die Disziplin besteht darin, zu entscheiden, wofür das Diagramm da ist, bevor der zweite Kasten fällt.

Dazu greifen, wenn

  • Protokolle und Ports auf jedem Kommunikationspfad - das ist der Inhalt der meisten Prüfungen.
  • Echte Artefaktnamen mit Versionen, damit das Diagramm beantwortet, was jetzt läuft.
  • Eine repräsentative Instanz je Rolle, mit Multiplizität, wenn die Anzahl schwankt.
  • Verwaltete Dienste als schlichte Geräte am Rand, mit sichtbarer Grenze dessen, was Sie betreiben.

Zu etwas anderem greifen, wenn

  • Logische Schichten - sie haben keine Adresse, und nichts wird auf sie deployt.
  • Jeden Microservice einer großen Landschaft. Zeichnen Sie stattdessen ein Teilsystem je Diagramm.
  • Monitoring, Logging und CI-Agenten, außer das Diagramm handelt von ihnen.
  • Aktuelle Instanzzahlen, die zum Zeitpunkt des Reviews schon falsch sind.

Brauchen Sie das Gegenstück, das die Software statt der Maschinen zeigt, ist das ein Komponentendiagramm. Die beiden werden meist als Paar gezeichnet, und das Verteilungsdiagramm ist das kürzere.

05Was zu behalten ist#

In je einer Zeile

  1. 01Vier Knoten, beschriftete Protokolle und benannte Artefakte sind bereits ein vollständiges Verteilungsdiagramm.
  2. 02Ein laufender Container ist ein Knoten; das Image, aus dem er startete, ist ein Artefakt. Beides zu verwechseln ist der übliche Containerfehler.
  3. 03Protokoll- und Portbeschriftungen sind es, die das Diagramm in einem Review öffnenswert machen.
  4. 04Zeichnen Sie eine Instanz je Rolle und nutzen Sie eine Multiplizität, wenn die Anzahl zur Laufzeit schwankt.
  5. 05Lässt sich ein Kasten nicht anpingen, gehört er nicht auf dieses Diagramm.

06Häufige Fragen#

Was ist ein einfaches Beispiel für ein Verteilungsdiagramm?

Ein Browser verbindet sich mit einem Webserver, dieser mit einem Anwendungsserver und dieser mit einer Datenbank, wobei auf jedem ein Artefakt liegt. Vier Knoten, drei mit Protokollen beschriftete Kommunikationspfade und drei Deploy-Pfeile ergeben ein vollständiges, nützliches Diagramm.

Wie zeichnet man ein Verteilungsdiagramm für Kubernetes?

Modellieren Sie die Laufzeitteile des Clusters als Knoten und die Images als Artefakte. Der Load Balancer ist ein Gerät, Ingress-Controller und jeder Pod sind Ausführungsumgebungen, und das Container-Image ist ein auf den Pod verteiltes Artefakt. Managed Services wie eine gehostete Datenbank bleiben Geräte am Rand.

Sind Container in UML Knoten oder Artefakte?

Beides, je nachdem, welchen Container Sie meinen. Ein laufender Container ist eine Ausführungsumgebung und damit ein Knoten, weil darin etwas anderes läuft. Das Image, aus dem er gestartet wurde, ist ein Artefakt, weil es eine Builddatei ist. Das Image als Knoten zu zeichnen ist der häufigste Fehler.

Wie zeigt man Redundanz in einem Verteilungsdiagramm?

Entweder Sie zeichnen die Instanzen einzeln - ehrlich, aber jenseits von vier unbrauchbar - oder Sie zeichnen einen Knoten mit einer Multiplizität in der Ecke, etwa app-node mit 3..*. Nehmen Sie das Zweite, wenn die Anzahl zur Laufzeit schwankt: ein Diagramm, das genau drei behauptet, ist nach dem ersten Autoscaling falsch.

Wie viel Detail gehört in ein Verteilungsdiagramm?

So viel, dass es die Frage beantwortet, wegen der Sie es gezeichnet haben. Ein Infrastruktur-Review will Protokolle und Ports an den Kommunikationspfaden; ein Onboarding-Diagramm will vier Kästen und sonst nichts. Jeder weitere Knoten ist eine Behauptung, die nach der nächsten Migration jemand wahr halten muss.

In dieser Reihe

Passend dazu

Alle Artikel