Zum Hauptinhalt Zur Navigation

Softwarearchitektur: Noch mehr Katastrophen aus der Welt der Microservices

Zu den sieben Problemen mit Microservices , die ich bereits beschrieben habe, kommen vier weitere – selbst erlebt in meinem Berufsalltag.
/ João Alves
23 Kommentare News folgen (öffnet im neuen Fenster)
Mit dem Chaos leben (Bild: M W from Pixabay)
Mit dem Chaos leben Bild: M W from Pixabay / Pixabay License
Inhalt
  1. Softwarearchitektur: Noch mehr Katastrophen aus der Welt der Microservices
  2. Problem 8: das Gateway zur Hölle
  3. Problem 10: wenn das Organigramm zur Architektur wird

Der Artikel ist eine Übersetzung. Das Original ist im Blog des Entwicklers João Alves erschienen.(öffnet im neuen Fenster)

Als ich zum ersten Mal über Probleme mit Microservices schrieb, dachte ich noch, wir würden sie irgendwann lösen – mit besseren Tools, Frameworks und mehr betrieblicher Reife. Das ist nicht passiert. Wir haben nur gelernt, mit dem Chaos zu leben.

Verteilte Systeme überraschen uns immer wieder: Timeouts, Retries und Fallacies verschwinden nicht, sie nehmen nur andere Formen an. Vielleicht ist das die eigentliche Lektion: Bei der Softwareentwicklung geht es nicht darum, Unsicherheiten zu beseitigen, sondern darum, elegant mit ihnen umzugehen.

Als Mitglied des Runtime-Teams bei Adevinta, wo ich eine interne Kubernetes-as-a-Service-Lösung für den Rest des Unternehmens aufgebaut habe, habe ich Einblick in alles bekommen, was Softwareentwickler auf der Grundlage verteilter Systeme entwickeln – und frage mich: Kann eine Plattform überhaupt gut sein, wenn sie uns nicht überrascht durch das, was Menschen da so bauen? Ich finde: nein.

Deshalb füge ich den sechs bereits beschriebenen Problemen vier weitere hinzu, mit denen ich selbst zu tun hatte.

Problem 7: mehr Services als Entwickler

Wenn ich in ein neues Team oder einen neuen Bereich komme, bitte ich sehr schnell um eine Einführung in die Architektur. Aus Neugier, ja, aber vor allem, weil es überlebenswichtig ist. Es hilft mir, mir ein mentales Bild der Funktionen, der Komplexität, der technischen Schulden und der Grenzen des Machbaren zu machen. Es ist zudem der beste Weg, mit den Mitarbeitern (Individual Contributors, ICs) in Kontakt zu kommen und zu verstehen, wie sie das System wahrnehmen.

Dabei verblüfft mich immer wieder, wie viele Teams mehr Dienste als Entwickler haben. Nicht nur ein bisschen mehr, sondern vier oder fünf Dienste pro Person. Auf einer Präsentationsfolie liest sich das beeindruckend – "Wir haben unsere Plattform vollständig modularisiert!" -, bis man sich klarmacht, dass damit ein einziger Mensch Eigentümer, Betreiber und Ansprechpartner bei Störungen für fast ein halbes Dutzend verteilter Systeme ist.

Große Tech-Unternehmen wie Google oder Uber mit einer erstklassigen internen Plattform mögen damit zurechtkommen. Sie haben automatische Abhängigkeits-Upgrades, standardisierte Vorlagen, CI/CD-Abstraktionen, Dashboards für die Zuweisung der Verantwortung für Dienste und gut besetzte SRE-Teams (Site Reliability Engineering). Für die meisten anderen Unternehmen ist das aber selbst mit guter Automatisierung quasi eine Katastrophe in Zeitlupe.

Denn jeder neue Dienst verursacht zusätzlichen kognitiven Overhead, etwa bei neuen Pipelines, Dashboards, Warnmeldungen, Secrets, Abhängigkeiten und Laufzeitkontexten. Mit jeder Änderung wächst der Bereich, auf den sie sich auswirkt. Und wenn das Team umstrukturiert wird, was immer passiert, verwaisen diese Dienste. Niemand weiß mehr, wofür sie da sind, aber alle haben zu viel Angst, sie abzuschalten. Also laufen sie einfach weiter.


Relevante Themen